//-- После рисования переставляем буфера --//
glutSwapBuffers();
};
void main(int argcp, char **argv) {
//-- Инициализация GLUT --//
glutInit(&argcp, argv);
glutInitWindowSize(640, 480);
glutInitWindowPosition(0, 0);
//--Открытие окна--//
glutCreateWindow("My OpenGL Application");
//-- Выбор режима:Двойной буфер и RGBA цвета --//
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
//-- Регистрация вызываемых функций --//
glutDisplayFunc(MyDisplay);
glutIdleFunc(MyIdle);
//-- Запуск механизма обработки событий --//
glutMainLoop();
};
Этот шаблон используется в тексте приложения, использующего OpenGL, который приводится в конце этого пособия.
В случае, если приложение должно строить статичное изображение, можно заменить GLUT_DOUBLE на GLUT_SINGLE, так как одного буфера в этом случае будет достаточно, и убрать вызов функции glutIdleFunc().
Вершины и примитивы
Определение атрибутов вершины
Под вершиной понимается точка в трехмерном пространстве, координаты которой можно задавать следующим образом:
void glVertex[2 3 4][s i f d]
void glVertex[2 3 4][s i f d]v
Координаты точки задаются максимум четырьмя значениями: x, y, z, w, при этом можно указывать два (x,y) или три (x,y,z) значения, а для остальных переменных в этих случаях используются значения по умолчанию: z=0, w=1. Как уже было сказано выше, число в названии команды соответствует числу явно задаваемых значений, а последующий символ - их типу.
Координатные оси расположены так, что точка (0,0) находится в левом нижнем углу экрана, ось x направлена влево, ось y- вверх, а ось z- из экрана. Это расположение осей мировой системы координат, в которой задаются координаты вершин объекта, другие системы координат будут рассмотрены ниже.
Однако чтобы задать какую-нибудь фигуру одних координат вершин недостаточно, и эти вершины надо объединить в одно целое, определив необходимые свойства. Для этого в OpenGL используется понятие примитивов, к которым относятся точки, линии, связанные или замкнутые линии, треугольники и так далее. Задание примитива происходит внутри командных скобок:
void glBegin
void glEnd
Параметр 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]
void glColor[3 4][b s i f]v
Первые три параметра задают R, G, B компоненты цвета, а последний параметр определяет alpha-компоненту, которая задает уровень прозрачности объекта. Если в названии команды указан тип ‘f’ (float), то значения всех параметров должны принадлежать отрезку [0,1], при этом по умолчанию значение alpha-компоненты устанавливается равным 1.0, что соответствует полной непрозрачности. Если указан тип ‘ub’ (unsigned byte), то значения должны лежать в отрезке [0,255].
Разным вершинам можно назначать различные цвета и тогда будет проводиться линейная интерполяция цветов по поверхности примитива.
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT