Основы программирования OpenGL в Borland С+Builder и Delphi

       

Примитивы


Любую трёхмерную фигуру, какая бы сложная она не была, можно разбить на двухмерные (плоские) составляющие. Эти составляющие я и буду называть примитивами, хотя некоторые авторы считают, что примитивами следует обозвать вышеперечисленные трёхмерные фигуры.

Примитивы определяются одной или несколькими точками, которые в OpenGL задаются внутри командных скобок glBegin/glEnd:



С++

void glBegin(mode);

void glEnd();

Delphi

procedure glBegin(mode);

procedure glEnd;

Параметр mode показывает, какие примитивы будут рисоваться. Доступны следующие значения:

GL_POINTS

Каждая вершина – отдельная точка

GL_LINES

Каждая пара вершин – отдельная линия. Если число вершин нечётно, то последняя игнорируется

GL_LINE_STRIP

Последовательность связанных отрезков. Первые две вершины – первый отрезок. Третья вершина определяет второй отрезок с началом в конце первого и концом в этой вершине и т.д

GL_LINE_LOOP

Аналогичен GL_LINE_STRIP, только последняя вершина соединяется отрезком с первой.

GL_TRIANGLES

Каждая тройка вершин – отдельный треугольник

GL_TRIANGLE_STRIP

Группа связанных треугольников. Первые три вершины – первый треугольник. Вторая, третья и четвёртая вершины - второй треугольник и т.д.

GL_TRIANGLE_FAN

Также группа связанных треугольников. Первые три вершины – первый треугольник. Первая, вторая и четвёртая вершины - второй треугольник и т.д.

GL_QUADS

Каждые четыре вершины – отдельный четырёхугольник.

GL_QUAD_STRIP

Группа связанных четырёхугольников. Первые четыре вершины – первый четырёхугольник. Третья, четвёртая, пятая и шестая вершины – второй четырёхугольник и т.д.

GL_POLYGON

Рисует отдельный выпуклый многоугольник (один).

Особое внимание нужно уделить GL_QUAD_STRIP. Здесь не совсем понятный, но очень удобный порядок указания вершин:

У каждого примитива есть минимальное число вершин. Если указанное число вершин меньше минимального для данного примитива, то примитив не рисуется.

Осталось только сказать, как задать вершину. Для этого определена следующая процедура:

glVertex[2 3 4][s i f d][v](coord)

Вершина определяется четырьмя параметрами: координаты x, y, z и параметр w – коэффициент, на который делится каждая из координат, т.е. w определяет масштаб. По умолчанию z=0, w=1, т.е когда вы вызываете, например, glVertex2f(1,1) на самом деле вызывается glVertex4f(1,1,0,1).

С каждой вершиной связаны некоторые данные:

· Текущий цвет – цвет вершины (окончательный цвет высчитывается с учётом света). Цвет задаётся процедурой glColor*

· Текущие координаты текстуры – координаты текстуры, соответствующие этой вершине. Задаются процедурой glTexCoord*

· Текущая нормаль – вектор нормали, соответствующий данной вершине. Задаётся процедурой glNormal*

· Текущая позиция растра – используется для определения положения растра при работе с пикселями и битовыми массивами. задаётся процедурой glRasterPos*

ПРИМЕЧАНИЕ: вместо звёздочки ‘*’ ставятся соответствующие суффиксы; такое сокращение принято во многих документациях по OpenGL.



Содержание раздела