ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX




Создание фигур - часть 8


Чтобы создать фигуру, следует вызвать функцию 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. В этом массиве содержатся данные нормалей. Следует отметить, что векторы нормалей не являются единичными — их модули были взяты по моему усмотрению. Механизм визуализации нормирует эти векторы перед использованием.




Содержание  Назад  Вперед