- •Синтаксис команд
- •Void glBegin(
- •Void glEnd(
- •Void glPointSize(
- •Void glLineWidth(
- •Треугольники
- •Четырехугольники и многоугольники
- •1. Основные шаги для построения минимальной программы
- •Int glutCreateWindow(const char *title);
- •Void glutDisplayFunc(void (*func)(void));
- •Void glutReshapeFunc(void (*func)(int width, int height));
- •Void glutMainLoop(void);
- •2. Работа с окнами в glut
- •Void glutSetWindow(int win);
- •Int glutGetWindow(void);
- •Void glutSetCursor(int cursor);
- •Void glutGameModeString(const char *string);
- •Int glutEnterGameMode(void);
- •Void glutLeaveGameMode(void);
- •3. Связь между glut и вашей OpenGl программой
- •Void glutDisplayFunc(void (*func)(void));
- •Void glutReshapeFunc(void (*func)(int width, int height));
- •Void glutVisibilityFunc(void (*func)(int state));
- •Void glutIdleFunc(void (*func)(void));
- •Void glutTimerFunc(unsigned int millis, void (*func)(int value), int value);
- •Void glMatrixMode(
- •Void glViewport(
- •Void glFinish(
- •Преобразования объектов
- •Работа с матрицами
- •Модельно-Видовые преобразования
- •Проекции
- •Область вывода
- •Демонстрационные программы Пример 1: Простое glut-приложение
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 задаёт ширину растеризуемых линий.
