Введение в OpenGL (fb2) читать постранично, страница - 3
[Настройки текста] [Cбросить фильтры]
- 1
- 2
- 3
- 4
- 5
- . . .
- последняя (13) »
Вершины и примитивы
Определение атрибутов вершины
Под вершиной понимается точка в трехмерном пространстве, координаты которой можно задавать следующим образом: void glVertex[2 3 4][s i f d](type coords) void glVertex[2 3 4][s i f d]v(type *coords) Координаты точки задаются максимум четырьмя значениями: x, y, z, w, при этом можно указывать два (x,y) или три (x,y,z) значения, а для остальных переменных в этих случаях используются значения по умолчанию: z=0, w=1. Как уже было сказано выше, число в названии команды соответствует числу явно задаваемых значений, а последующий символ - их типу. Координатные оси расположены так, что точка (0,0) находится в левом нижнем углу экрана, ось x направлена влево, ось y- вверх, а ось z- из экрана. Это расположение осей мировой системы координат, в которой задаются координаты вершин объекта, другие системы координат будут рассмотрены ниже. Однако чтобы задать какую-нибудь фигуру одних координат вершин недостаточно, и эти вершины надо объединить в одно целое, определив необходимые свойства. Для этого в OpenGL используется понятие примитивов, к которым относятся точки, линии, связанные или замкнутые линии, треугольники и так далее. Задание примитива происходит внутри командных скобок: void glBegin(GLenum mode) void glEnd(void) Параметр mode определяет тип примитива, который задается внутри и может принимать следующие значения: GL_POINTS каждая вершина задает координаты некоторой точки. GL_LINES каждая отдельная пара вершин определяет отрезок; если задано нечетное число вершин, то последняя вершина игнорируется. GL_LINE_STRIP каждая следующая вершина задает отрезок вместе с предыдущей. GL_LINE_LOOP отличие от предыдущего примитива только в том, что последний отрезок определяется последней и первой вершиной, образуя замкнутую ломаную. GL_TRIANGLES каждая отдельная тройка вершин определяет треугольник; если задано не кратное трем число вершин, то последние вершины игнорируются. GL_TRIANGLE_STRIP каждая следующая вершина задает треугольник вместе с двумя предыдущими. GL_TRIANGLE_FAN треугольники задаются первой и каждой следующей парой вершин (пары не пересекаются). GL_QUADS каждая отдельная четверка вершин определяет четырехугольник; если задано не кратное четырем число вершин, то последние вершины игнорируются. GL_QUAD_STRIP четырехугольник с номером n определяется вершинами с номерами 2n-1, 2n, 2n+2, 2n+1. GL_POLYGON последовательно задаются вершины выпуклого многоугольника. Для задания текущего цвета вершины используются команды void glColor[3 4][b s i f](GLtype components) void glColor[3 4][b s i f]v(GLtype components) Первые три параметра задают R, G, B компоненты цвета, а последний параметр определяет alpha-компоненту, которая задает уровень прозрачности объекта. Если в названии команды указан тип ‘f’ (float), то значения всех параметров должны принадлежать отрезку [0,1], при этом по умолчанию значение alpha-компоненты устанавливается равным 1.0, что соответствует полной непрозрачности. Если указан тип ‘ub’ (unsigned byte), то значения должны лежать в отрезке [0,255]. Разным вершинам можно назначать различные цвета и тогда будет проводиться линейная интерполяция цветов по поверхности примитива. Для управления режимом интерполяции цветов используется команда void glShadeModel(GLenummode) вызов которой с параметром GL_SMOOTH включает интерполяцию (установка по умолчанию), а с GL_FLAT отключает. Например, чтобы нарисовать треугольник с разными цветами в вершинах, достаточно написать: GLfloat BlueCol[3]={0,0,1}; glBegin(GL_TRIANGLE); glColor3f(1.0, 0.0, 0.0); //красный glVertex3f(0.0, 0.0, 0.0); glColor3ub(0,255,0); //зеленый glVertex3f(1.0, 0.0, 0.0); glColor3fv(BlueCol); //синий glVertex3f(1.0, 1.0, 0.0); glEnd(); Для задания цвета фона используется команда void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha). Значения должны находиться в отрезке [0,1] и по умолчанию равны нулю. После этого вызов команды void glClear(GLbitfield mask) с параметром GL_COLOR_BUFFER_BIT устанавливает цвет фона во все буфера, доступные для записи цвета (иногда удобно использовать несколько буферов цвета). Кроме цвета аналогичным образом можно определить нормаль в вершине, используя команды void glNormal3[b s i f d](type coords) void glNormal3[b s i f d]v(type coords) Задаваемый вектор может не иметь единичной длины, но он будет нормироваться автоматически в режиме нормализации, который включается вызовом команды glEnable(GL_NORMALIZE). Команды void glEnable(GLenum mode) void glDisable(GLenum mode) производят включение и отключение того или иного режима работы конвейера OpenGL. Эти команды применяются достаточно часто, и их влияние будет рассматриваться в конкретных случаях. Вообще, внутри командных скобок glBegin() и glEnd() можно производить вызов лишь нескольких команд, в которые входят glVertex…(), glColor…()glNormal…(), glRect…(), glMaterial…() и glTexCoord…(). Последние две команды будут- 1
- 2
- 3
- 4
- 5
- . . .
- последняя (13) »
Последние комментарии
2 часов 2 секунд назад
5 часов 41 минут назад
6 часов 2 минут назад
6 часов 56 минут назад
9 часов 55 минут назад
9 часов 56 минут назад