Координаты x,y,z и w - задают положение вершины в мировой системе координат. Последнюю координату OpenGL использует для перспективного деления: (x,y,z,w)->(x/w,y/w,z/w) и обратного преобразования. Таким образом, w координата представляет расстояние до наблюдателя и называется координатой глубины. OpenGI выдаст сообщение об ошибке, если w равно 0. OpenGL также не обрабатывает корректно отрицательные значения координаты W.

Цвет - в зависимости от режима OpenGI цвет задается непосредственно через RGBA компоненты или индексом цвета в палитре.

Текстурные координаты - задают тексель текстуры, соответствующий вершине.

Нормаль - задает ориентацию плоскости в окрестности вершины. Нормаль используется в уравнении освещения.

Флаг ребра - указывает, является ли вершина внутренней частью сложного объекта, или описывает контур.

В последней версии OpenGL добавлены координата тумана и вторичный цвет вершины.

Основной способ формирования моделей - это многократный вызов функции glVertex между вызовов функций gIBegin и glEnd. При этом группа вершин может использовать одни и те же значения атрибутов. Если данные о вершинах не определяются в процессе вывода модели, а известны заранее, то предпочтительнее воспользоваться механизмом массивов OpenGL. Во многих реализациях это работает быстрее, чем использование цикла внутри gIBegin/glEnd. В последней версии OpenGL или через расширение EXT_multi_draw_arrays механизм массивов дополнен функциями gIMultiDrawArrays и gIMultiDrawElements, облегчающими вывод моделей.

Список функций для вывода вершин:

gIColor - устанавливает текущий цвет вершины;

glEdgeFlag - устанавливает текущий флаг ребра;

gINormal - устанавливает текущую нормаль;

glTexCoord - устанавливает текущие текстурные координаты;

gIBegin - начать вывод вершин;

glEnd - закончить вывод вершин;

glVertex - выводит вершину;

glVertexPointer - определяет массив вершин; gINormalPointer - определяет массив нормалей; gIColorPointer - определяет массив компонент цветов вершин; gllndexPointer - определяет массив индексов цвета вершин; gITexCoordPointer - определяет массив текстурных координат; glEdgeFlagPointer - определяет массив флагов ребра; glArrayElement - отображает указанную вершину по индексу; gIDrawElements - отображает указанные вершины по индексам; gIDrawArrays - отображает все вершины в массиве.

/*

Демонстрация glBegin и gIDrawArrays.

Клавишей F1 изменяется способ построения.

Клавишами + и - изменяется режим построения.

*/

int mode=0; // текущий режим построения int type=0; // способ отображения int begin_mode[10]= // массив режимов построения {GL_POINTS,GL_LINES,GL_LINE_LOOP, GL_LINE_STRIР, gl_triangl.es, GL_TRIANGLE_FAN, GL_QUADS,GL_POLYGON, GL_TRIANGLE_STRIP,GL_QUAD_STRIP};

// массив вершин float points[8][2]=

{{-50, 50}, {0,70}, {40, 40 }, {30,0},

{50,-50},{0,-7 0},{-4 0,-4 0},{-0,0}};

// массив цветов float color[8][3]=

{{1,0,0},{1,0.5,0},{1,0.5,0.5},{1,1,0}, {0,1,0},{0,1,0.5},{0.5,1,0.5},{0,1,1}};

void example_init()

{

gl.set(l); // настройка OpenGL // цвет очищения буфера цвета glClearColor(1,1,1,1);


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