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




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


Начнем с исключительно простой фигуры — прямоугольника, который имеет четыре вершины, определяющие одну грань. Запустив приложение Shapes, вы найдете в меню Edit несколько команд с названиями фигур. Выберем команду Flat Face (то есть «плоская фигура»). Вот как выглядит ее программная реализация:

void CMainFrame::OnEditInsface() {

// Вставить простую плоскую грань

//и задать список вершин

D3DVECTOR vlist [] = (

На первый взгляд понятие «ненерпендикулярная нормаль» кажется внутренне протинорсчи-liliiM, однако если гопорить о нормалях к псршипам, а нс к граням, то ему можно придать смысл. — Иршчеч. пере».

Создание простых фигур <¦Ц 97

(-2, -2, -2},

t-2, -2, 2>,

{ 2, -2, 2},

{ 2, -2, -2} };

// Получить количество вершин в массиве

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

// Определить вершины, входящие в каждую грань, // в формате:

// количество, вершина!, вершина2 и т. д. int flist [] = (4, О, 1, 2, 3, // 4 вершины, ...

О // Конец списка данных грани );

// Создать для фигуры новый макет NewScene ();

// Создать фигуру по списку вершин // и списку данных грани m pShape = new C3dShape;

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

// Присоединить фигуру к макету m_pScene-»AddChild(m_pShape) ;

}

Вершины грани содержатся в массиве векторов vlist. Каждый вектор определяет одну из четырех вершин, лежащих в плоскости у =-2. Прямоугольник имеет размеры 4х4 единицы. Первый вектор определяет ближнюю левую вершину, второй — дальнюю левую, третий — дальнюю правую и четвертый — ближнюю правую. Другими словами, мы обходим вершины по часовой стрелке.

Для определения фигуры используется целочисленный массив с информацией о грани, flist. Каждая грань в списке описывается количеством входящих в нее вершин, за которыми следует индекс каждой вершины в массиве vlist. Список граней завершается нулем. Он может содержать информацию о нескольких гранях, но в нашем случае определяется всего одна. Обратите внимание на то, что вершины пронумерованы в порядке О, 1, 2, 3, что соответствует их обходу по часовой стрелке, начиная с ближней левой, если смотреть на грань сверху. Поскольку грань находится в плоскости у =-2, она расположена ниже камеры (точки О, О, -10) и, следовательно, попадает в кадр.




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