Скачиваний:
54
Добавлен:
17.03.2015
Размер:
287.23 Кб
Скачать

Void glBegin(

GLenum mode

);

Void glEnd(

void

);

Параметры

glBegin(GLenum mode); // указываем, что будем рисовать

glVertex[2 3 4][s i f d](...); // первая вершина

... // тут остальные вершины

glVertex[2 3 4][s i f d](...); // последняя вершина

glEnd(); // закончили рисовать примитив

     Сначала вы говорите, что будете рисовать - glBegin с соответсвующим параметром. Возможные значения mode перечислены ниже в таблице. Далее вы указываете вершины, определяющие объекты указанного типа. Обычно, вы будете задавать вершину одним из четырех способов.

glVertex2d(x,y); // две переменных типа double

glVertex3d(x,y,z); // три переменных типа double

glVertex2dv(array); // массив из двух переменных типа double

glVertex3d(array); // массив из трех переменных типа double

И, наконец, вы вызваете glEnd, чтобы указать, что вы закончили рисовать объекты типа, указанного в glBegin.

Далее мы подробно разберем создание всех примитивов.

Значение mode

Описание

GL_POINTS

Каждый вызов glVertex задает отдельную точку.

GL_LINES

Каждая пара вершин задает отрезок.

GL_LINE_STRIP

Рисуется ломаная.

GL_LINE_LOOP

Рисуется ломаная, причем ее последняя точка соединяется с первой.

GL_TRIANGLES

Каждые три вызова glVertex задают треугольник.

GL_TRIANGLE_STRIP

Рисуются треугольники с общей стороной.

GL_TRIANGLE_FAN

Тоже самое, но по другому правилу соединяются вершины, вряд ли понадобится.

GL_QUADS

Каждые четыре вызова glVertex задают четырехугольник.

GL_QUAD_STRIP

Четырехугольники с общей стороной.

GL_POLYGON

Многоугольник.

На следующем рисунке описан порядок описания вершин для разных типов:    

Точки

glVertex

Функция glVertex задаёт вершинные координаты. Имеет следующие формы: glVertex2d, glVertex2f, glVertex2i, glVertex2s, glVertex3d, glVertex3f, glVertex3i, glVertex3s, glVertex4d, glVertex4f, glVertex4i, glVertex4s, glVertex2dv, glVertex2fv, glVertex2iv, glVertex2sv, glVertex3dv, glVertex3fv, glVertex3iv, glVertex3sv, glVertex4dv, glVertex4fv, glVertex4iv, glVertex4sv.

Пояснения

Функция glVertex задаёт вершину для точки, линии или полигона. Функция glVertex используется совместно с парой функций glBegin и glEnd. При вызове glVertex с вершиной связываются все текущие вершинные данные, такие как цвет, нормаль, текстурные координаты и пр.

Вызов функции glVertex вне пары glBegin и glEnd приводят к неопределённому поведению.

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

glPointSize

Функция glPointSize задаёт диаметр (размер) растеризуемых точек.

Void glPointSize(

GLfloat size

);

Параметры

size

Диаметр точек. По умолчанию — 1.0.

Пояснения

Функция glPointSize задаёт диаметр (размер) растеризуемых точек, как со сглаживанием, так и без. Использование значений отличных от 1.0 приводит к различному результату в зависимости от того включено сглаживание точек или нет. Сглаживание точек управляется вызовом функций glEnable/glDisable с аргументом GL_POINT_SMOOTH.

Режим сглаживания можно устанавливать вызовом функции

glEnable(GL_POINT_SMOOTH)

     Отключается, соответственно, вызовом glDisable() c этим параметром. Последние функции - glPointSize и glEnable/glDisable надо вызывать вне glBegin/glEnd, иначе они будут проигнорированы. Функции glEnable/glDisable включают/выключают множество опций, но вы должны учитывать, что некоторые опции влекут за собой большие вычисления и, следовательно, изрядно затормаживают ваше приложение, поэтому без надобности не стоит их включать. Очевидно, что совершенно не к чему включать освещение, наложение текстры и сглаживания цветов при рисовании точек. Пока вы с этими возможностями OpenGL не познакомились, поэтому запомните это на будующее.

glColor

Функция glColor устанавливает текущий цвет для вершины. Может принимать следующие формы: glColor3b, glColor3d, glColor3f, glColor3i, glColor3s, glColor3ub, glColor3ui, glColor3us, glColor4b, glColor4d, glColor4f, glColor4i, glColor4s, glColor4ub, glColor4ui, glColor4us, glColor3bv, glColor3dv, glColor3fv, glColor3iv, glColor3sv, glColor3ubv, glColor3uiv, glColor3usv, glColor4bv, glColor4dv, glColor4fv, glColor4iv, glColor4sv, glColor4ubv, glColor4uiv, glColor4usv.

Параметры

red, green, blue

Новые значения для красной, зелёной и синей компоненты текущего цвета.

alpha

Новое значение для альфа-компоненты текущего цвета. Встречается только в формах функции с четырьмя аргументами. (может отсутствовать)

Пояснения

Функция glColor устанавливает текущий цвет четырьмя значениями для соответствующих компонент.

Существует два основных варианта функции glColor:

  • Вариант glColor3 задаёт новые значения для красной, зелёной и синей компоненты текущего цвета, а также устанавливает текущее значение для альфы в 1.0.

  • Вариант glColor4 задаёт все четыре новые компоненты цвета.

Значения компонент текущего цвета сохраняется, как вещественные значения с плавающей запятой, однако точность этих значений зависит от конкретной реализации. Значения параметров для принимаемых целых типов значений линейно интерполируются на сохраняемые значения с плавающей запятой. Наибольшее целое число преобразуется в значение 1.0, нулевое целое число в 0.0, а наименьшее отрицательное в −1.0. Значения параметров для дробных чисел сохраняются как есть.

Вы можете обновлять значения текущего цвета в любое время. В частном случае вы можете вызывать glColor между вызовом glBegin и соответствующим glEnd.

// рисуем точки

glPointSize(2);

glBegin(GL_POINTS);

glColor3d(1,0,0);

glVertex3d(-4.5,4,0); // первая точка

glColor3d(0,1,0);

glVertex3d(-4,4,0); // вторая точка

glColor3d(0,0,1); // третья

glVertex3d(-3.5,4,0);

glEnd();

Линии

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

glLineWidth

Функция glLineWidth задаёт ширину растеризуемых линий.

Соседние файлы в папке OpenGL