GLint points [8][3] = 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, О, О, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1 ; Или же можно сначала определить тип данных координат точки в трехмерном пространстве, а затем задавать координаты каждой вершины как элементы массива с одним индексом, например, так.

typedef GLint vertex3 [3];

vertex3 pt [8] = 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0,

0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1 ; Далее необходимо определить переднюю сторону каждой из шести поверхностей объекта. Для этого нужно шесть раз вызвать функцию glBegin (GL_POLYGON) или функцию glBegin (GL_QUADS). В любом случае следует убедиться в том, что вершины каждой стороны перечислены против часовой стрелки, если смотреть на наружную поверхность куба. В следующем фрагменте кода все поверхности куба задаются как четырехугольники, при этом используется вызов функции для передачи значений индексов стандартным процедурам OpenGL. На рис. 3.59 перечислены индексы массива pt, соответствующие координатам вершин куба.

void quad (GLint ni, GLint n2, GLint n3, GLint n4){ glBegin (GL_QUADS);

glVertex3iv (pt [ni]); glVertex3iv (pt [n2]); glVertex3iv (pt [n3]); glVertex3iv (pt [n4]); glEnd ( );

}

void cube ( ){

quad (6, 2, 3, 7); quad (5, 1, 0, 4 ) ; quad (7, 3, 1, 5 ) ; quad (4, 0, 2, 6); quad (2, 0, 1, 3); quad (7, 5, 4, 6);

}

Таким образом, для описания каждой поверхности необходимо шесть функций OpenGL, а всего есть шесть поверхностей, которые нужно описать. Если прибавить описание цвета и других параметров, то в нашей программе для изображения куба легко можно будет насчитать сто или даже больше обращений к функциям, а для сцен, состоящих из нескольких сложных объектов, потребуется намного больше функций.

Как видно из предыдущего примера с кубом, для полного описания сцены может понадобиться задать сотни или даже тысячи значений координат. К тому же, существуют различные параметры свойств и параметры визуализации, которые нужно задавать для определенных объектов. Таким образом, для описания объекта или сцены необходимо огромное количество обращений к функциям, что увеличивает требуемые ресурсы системы и замедляет выполнение графических программ. Со сложными изображениями связана даже еще большая проблема - поверхности объектов (таких как куб, изображенный на рис. 3.58), как правило, имеют общие вершины. При использовании тех методов, которые описывались до сих пор, эти общие точки придется задавать не один раз.

Чтобы частично решить эти проблемы, в пакете OpenGL предлагается механизм уменьшения числа обращений к функциям, необходимого для обработки информации о координатах. С помощью массива вершин можно таким образом упорядочить информацию, необходимую для описания сцены, чтобы требовалось всего несколько вызовов функций. Для этого необходимо выполнить следующие действия.


⇐ вернуться назад | | далее ⇒