Страница 15

Введение в OpenGl. Учебник

Главная
Страница 1
Страница 2
Страница 3
Страница 4
Страница 5
Страница 6
Страница 7
Страница 8
Страница 9
Страница 10
Страница 11
Страница 12
Страница 13
Страница 14
Страница 15
Страница 16
Страница 17
Страница 18
Страница 19
Страница 20
Страница 21






Скачать учебник
Предыдущая страница
Следующая страница

void glutWireIcosahedron (void);
void glutSolidIcosahedron (void);
void glutWireOctahedron (void);
void glutSolidOctahedron (void);
void glutWireTetrahedron (void);
void glutSolidTetrahedron (void);
void glutWireDodecahedron (GLdouble radius);
void glutSolidDodecahedron (GLdouble radius);

Рисуют проволочные или сплошные икосаэдр, октаэдр, тетраэдр и додекаэдр соответственно (единственный параметр последний пары функций задает радиус додекаэдра).

void glutWireTeapot (GLdouble size);
void glutSolidTeapot (GLdouble size);

Рисуют проволочный или сплошной чайник размера size.

1.9.5 Управление фоновым процессом

Вы можете указать функцию, которая будет вызываться в том случае, если нет других сообщений, то есть во время простоя приложения. Это может быть полезно для выполнения анимации или другой фоновой обработки.

void glutIdleFunc (void (*func)(void));

Задает функцию, выполняемую в случае, если больше приложению делать нечего (отсутствуют сообщения). Выполнение этой функции обратного вызова можно отменить передачей glutIdleFunc() аргумента NULL.

1.9.6 Запуск программы

После того, как все настройки выполнены, программы GLUT входят в цикл обработки сообщений функцией glutMainLoop().

void glutMainLoop (void);

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

Пример 1-2 показывает, как с помощью GLUT можно заставить работать программу, показанную в примере 1-1. Обратите внимание на реструктуризацию кода. Для увеличения эффективности операции, которые нужно выполнить только один раз (установка цвета фона и координатной системы), теперь помещены в функцию init(). Операции по визуализации (и пересчету) сцены находятся в функции display(), которая зарегистрирована в качестве дисплейной функции обратного вызова.

Пример 1-2. Простая OpenGL – программа с использованием GLUT: hello.cpp

#include <GL/glut.h>

void init(void)
{
//Выбрать фоновый (очищающий) цвет
glClearColor(0.0,0.0,0.0,0.0);

//Установить проекцию
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}

void display(void)
{
//
Очистить экран glClear(GL_COLOR_BUFFER_BIT);

//Нарисовать белый полигон (квадрат) с углами //в (0.25, 0.25, 0.0) и (0.75, 0.75, 0.0)
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex3f(0.25,0.25,0.0);
glVertex3f(0.75,0.25,0.0);
glVertex3f(0.75,0.75,0.0);
glVertex3f(0.25,0.75,0.0);
glEnd();

//Не ждем. Начинаем выполнять буферизованные
//команды OpenGL
glFlush();
}

//Установить начальные характеристики окна,
//открыть окно с заголовком «hello».
//Зарегистрировать дисплейную функцию обратного вызова
//В

Предыдущая страница
Следующая страница
Hosted by uCoz