Назад | Оглавление | Домой | Далее
Все геометрические примитивы в OpenGL задаются в терминах вершин. Каждая вершина задаётся набором чисел, определяющих её координаты в пространстве.
OpenGL работает с однородными координатами (x, y, z, w). Если координата z не задана, то она считается равной нулю. Если координата w не задана, то она считается равной единице.
Под линией в OpenGL подразумевается отрезок, заданный своими начальной и конечной вершинами.
Под гранью (многоугольником) в OpenGL подразумевается замкнутый выпуклый многоугольник с несамопересекающейся границей.
Все геометрические объекты в OpenGL задаются посредством вершин, а сами вершины задаются процедурой
glVertex{2 3 4}{s i f d}[v](TYPE x, …),
где реальное количество параметров определяется первым суффиксом (2, 3 или 4), а суффикс v означает, что в качестве единственного аргумента выступает массив, содержащий необходимое количество координат. Например:
glVertex2s(1, 2);
glVertex3f(2.3, 1.5, 0.2);
GLdouble vect[] = {1.0, 2.0, 3.0, 4.0};
glVertex4dv(vect);
Для задания геометрических примитивов необходимо как-то выделить набор вершин, определяющих этот объект. Для этого служат процедуры glBegin() и glEnd(). Процедура glBegin(GLenum mode) обозначает начало списка вершин, описывающих геометрический примитив. Тип примитива задаётся параметром mode, который принимает одно из следующих значений:
GL_POINTS – набор отдельных точек;
GL_LINES – пары вершин, задающих отдельные точки;
GL_LINE_STRIP – незамкнутая ломаная;
GL_LINE_LOOP – замкнутая ломаная;
GL_POLYGON – простой выпуклый многоугольник;
GL_TRIANGLES – тройки вершин, интерпретируемые как вершины отдельных треугольников;
GL_TRIANGLE_STRIP – связанная полоса треугольников;
GL_TRIANGLE_FAN – веер треугольников;
GL_QUADS – четвёрки вершин, задающие выпуклые четырёхугольники;
GL_QUAD_STRIP – полоса четырёхугольников.
Процедура glEnd() отмечает конец списка вершин.
Между командами glBegin() и glEnd() могут находится команды задания различных атрибутов вершин: glVertex(), glColor(), glNormal(), glCallList(), glCallLists(), glTexCoord(), glEdgeFlag(), glMaterial(). Между командами glBegin() и glEnd() все остальные команды OpenGL недопустимы и приводят к возникновению ошибок.
Рассмотрим в качестве примера задание окружности:
glBegin(GL_LINE_LOOP);
for (int i = 0; I < N; i++)
{
float angle = 2 * M_PI * i / N;
glVertex2f(cos(angle), sin(angle));
}
glEnd();
Хотя многие команды могут находиться между glBegin() и glEnd(), вершины генерируются при вызове glVertex(). В момент вызова glVertex() OpenGL присваивает создаваемой вершине текущий цвет, координаты текстуры, вектор нормали и т. д. Изначально вектор нормали полагается равным (0, 0, 1), цвет полагается равным (1, 1, 1, 1), координаты текстуры полагаются равными нулю.
Назад | Оглавление | Домой | Далее