Чтобы создать фигуру, следует вызвать
Чтобы создать фигуру, следует вызвать функцию Create объекта C3dShape и передать ей в качестве аргументов список вершин, их общее количество и список данных грани. Не обращайте внимания на то, что происходит внутри объекта C3dShape, там нет ничего интересного — векторы и данные грани передаются в функцию механизма визуализации, которая и создает фигуру. Затем объект C3dShape присоединяется к макету, чтобы появиться в окне приложения. Если запустить приложение Shapes и выполнить команду Edit ¦ Flat Face, вы увидите что-нибудь похожее на Рисунок 4-12.
98 iy Глава 4. Создание фигур
Рисунок. 4-12. Приложение Shapes с одной плоской гранью
Обратите внимание на то, что грань выглядит плоской — это означает, что нормали ко всем вершинам имеют одинаковое направление. Вы можете проверить это командой View ¦ Normals, которая рисует возле каждой вершины небольшую стрелку, показывающую направление нормали. На Рисунок 4-13 изображена грань вместе с нормалями.
. Плоская грань с нормалями к вершинам
99
Создание простых фигур
Теперь давайте с теми же самыми данными создадим новую грань, но на этот раз укажем набор нормалей, направленных к центру грани. Ниже приведена функция для создания вогнутой грани, наподобие изображенной на Рисунок 4-11 на стр. 97:
void CMainFrame::OnEditDishface()
(
// Вогнутая грань D3DVECTOR vlist [] = (
(-2, -2, -2),
(-2, -2, 2),
( 2, -2, 2},
{ 2, -2, -2)
);
int nv = sizeof(vlist) / sizeof(D3DVECTOR);
D3DVECTOR nlist [] = {
( 1, 1, 1),
{ 1, 1, -1),
(-1, 1, -1),
{-1, 1, 1} };
int nn = sizeof(nlist) / sizeof(D3DVECTOR);
int flist [] = (4, О, О, 1, 1, 2, 2, 3, 3,
0 };
NewScene() ;
m_pShape = new C3dShape;
m_p3hape-»Create (vlist, nv, nlist, nn, flist);
m_pScene-»AddChild(m_pShape) ;
1
Как видите, мы пользуемся теми же самыми данными вершин, за исключением того, что к ним добавился еще один массив векторов, nlist. В этом массиве содержатся данные нормалей. Следует отметить, что векторы нормалей не являются единичными — их модули были взяты по моему усмотрению. Механизм визуализации нормирует эти векторы перед использованием.
Содержание Назад Вперед