Введение в OpenGL | страница 26



> glCallList(TETR_LIST);

>}

>void Display(void) {

> //--Инициализация (очистка) текущего буфера кадра и глубины-----------//

> glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

> //--Построение объектов-----------------------------------------------//

> DrawFigures();

> //--Перестановка буферов кадра----------------------------------------//

> glutSwapBuffers();

>}

>void Redraw(void) {

> //--Увеличение текущего угла поворота---------------------------------//

> CurAng+=1;

> //--Сигнал для вызова процедуры создания изображения (для обновления)-//

> glutPostRedisplay();

>}

>int main(int argc, char **argv) {

> //--Инициализация функций библиотеки GLUT-----------------------------//

> glutInit(&argc, argv);

> //--Задание режима с двойной буферизацией, представление цвета в формате RGB,--//

> //--использование буфера глубины --//

> glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

> //--Создание окна приложения-----------------------------------------//

> glutCreateWindow("Example of using OpenGL");

> //--Регистрация функции построения изображения-----------------------//

> glutDisplayFunc(Display);

> //--Регистрация функции обновления изображения-----------------------//

> glutIdleFunc(Redraw);

> //--Инициализация функций OpenGL-------------------------------------//

> Init();

> //--Цикл обработки событий-------------------------------------------//

> glutMainLoop();

> return 0;

>}

Результат работы программы:

В программе используется только файл glut.h, который содержит обращения к файлам gl.h и glu.h, поэтому отдельно подключать их не нужно.

Большим достоинством OpenGL является независимость большинства команд. Например, чтобы отключить наложение текстуры, достаточно закомментировать вызов функции TextureInit(), а чтобы получить статичное изображение достаточно не регистрировать функцию обновления изображения вызовом функции glutIdleFunc(). В этом случае можно использовать режим с одним буфером, заменив GL_DOUBLE на GL_SINGLE в команде glutInitDisplayMode() и добавив команду glFlush() в конце процедуры Display() для очистки этого буфера.

Использованные материалы:

1. Тихомиров Ю. Программирование трехмерной графики. СПб., BHV 1998.

2. Visual Introduction in OpenGL, Siggraph’98.

3. The OpenGL graphics system: a specification (version 1.1).

4. Программирование GLUT: окна и анимация. Miguel Angel Sepulveda, LinuxFocus.

5. The OpenGL Utility Toolkit (GLUT) Programming Interface, API version 3, specification.