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




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


Список данных грани (flist) изменился и теперь содержит количество вершин, за которым следуют пары индексов для вершин и нормалей. В этом случае используется другая версия функции Create объекта C3dShape, которая получает массивы вершин и нормалей, а также данные граней.

Результат выполнения этой функции изображен на Рисунок 4-14. Вы можете увидеть его на экране, для этого следует запустить приложение Shapes и выполнить команду Edit ¦ Dished Face.

Вы обратили внимание на то, что грань кажется вогнутой в середине? (Этот эффект особенно четко проявляется, если привести грань во вращение.) На случай, если вы забыли, напомню, что источник света находится в левом верхнем углу макета. С помощью приложения Shapes можно также убедиться в том, что

/b> lll^ Глава 4. Создание фигур

нормали, направленные за пределы грани, создают иллюзию выпуклости. Для того чтобы увидеть этот эффект, достаточно выполнить команду Edit ¦ Bulging Face.

Рисунок. 4-14. Грань с неперпендикулярными нормалями


Создание твердых тел

Довольно об отдельных гранях! Давайте немного изменим нашу программу и создадим куб:

void CMainFrame::OnEditDefcube() (

D3DVECTOR vlist [] = {

{-1, -1, -1),

{-1, -1, 1},

{ 1, -1, 1},

{ 1, -1, -1),

{-1, 1, -1),

{-1, 1, 1),

{ 1, 1, 1),

{ 1, 1, -1) };

int nv = sizeof(vlist) / sizeof(D3DVECTOR);

int flist [] = (4, 0, 3, 2, 1,

4, 3, 7, 6, 2,

4, 4, 5, 6, 7,

4, 0, 1, 5, 4,

4, 0, 4, 7, 3,

4, 2, 6, 5, 1,

n

Создание твердых тел

/b>

};

NewScene() ;

m_pShape = new C3dShape;

m_pShape-»Create (vlist, nv, flist) ;

m_pScene-»AddChild(m_pShape) ;

} .

Список вершин теперь состоит из восьми элементов, по одному для каждого из углов куба, а список граней содержит шесть элементов по числу граней куба. На Рисунок 4-15 изображен куб с пронумерованными вершинами, он поможет вам понять значения элементов списка данных граней в приведенном выше фрагменте. Следует помнить о том, что вершины каждой грани должны перечисляться по часовой стрелке относительно того направления, с которого будет видна данная грань.




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