Средства поддержки операций с массивами вершин включены в версию OpenGL 1.1.

5Средства поддержки операций с массивами вершин включены в версию OpenGL 1.1.

4.4. Модель разноцветного куба

4.4.1. Моделирование куба Пожалуй, трудно подобрать для первых экспериментов более простой трехмерный объект, чем куб. Но даже такой простой объект можно моделировать в компьютере по-разному. В системе CSG он рассматривается как единый примитив. Но, с другой стороны, куб обрабатывается аппаратными средствами как объект, состоящий из восьми вершин. Поскольку мы повсеместно будем использовать модели, основанные на ограничивающих поверхностях, то куб следует рассматривать либо как совокупность шести пересекающихся плоских поверхностей, либо как шесть многоугольников, которые определяют его грани {facets). Начнем с определения массива вершин, который должен быть доступен всем компонентам программы:

GLfloat vertices[8][3] = {{-1.0,-1.0,-1.0}, {1.0,-1.0,-1.0}, {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0}, {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};

Если следовать объектно-ориентированному подходу, то нужно ввести новый тип данных: typedef GLfloat point3[3]; В таком случае вершины куба будут определены в программе следующим образом:

point3 vertices[8] ={{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0}, {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0}, {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};

Использование typedef - это вопрос стиля программирования. OpenGL в любом случае реализует каждую вершину в виде четырехмерного массива однородных координат. При вызове функций, для которых задан трехмерный тип данных (таких как glVertex3fv( )), значения преобразуются в четырехмерную форму внутри графической системы.

Для определения граней куба можно использовать список точек- элементов массива вершин. Например, одна грань в тексте программы определяется следующим образом:

glBegin{GL_POLYGON};
glVertexIfv(vertices[0]);
glVertex3fv(vertices[3]);
glVertex3fv(vertices[2]);
glVertex3fv(vertices[1]); glEnd();

Другие пять граней определяются аналогично. Обратите внимание на то, что трехмерный многоугольник в программе определяется точно так же, как и двухмерные в рассмотренных выше примерах.


⇐ Предыдущая| |Следующая ⇒