на начало
На главную страницу
Форум   

Статья :: Использование списков

 

Использование списков

С кубиком быстро расправляется любой компьютер и видеокарта, а вот с более сложными объектами могут возникнуть затруднения, бороться с которыми можно с помощью нескольких приемов. Один из них — использование заранее откомпилированных списков команд OpenGL. Для иллюстрации этого приема создайте отдельную глобальную функцию:

void DrawScene()

{

//====== Создаем новый список команд OpenGL

glNewList(I,GL_COMPILE);

//====== Сюда поместите код, рисующий куб,

//====== начиная со строки

static float v[8][3] =

//====== и заканчивая

for (int j = 0; j < 4; j++)

glVertex3fv(v[id[i] [j] ] ) ;

}

glEnd() ;

glEndList () ;

}

Список рисующих команд OpenGL ограничивается операторными скобками вида:

glNewList(I, GL_COMPILE);

//====== Здесь располагаются команды OpenGL

glEndList () ;

Первый параметр glNewList (типа GLuint) идентифицирует список с тем, чтобы разработчик мог одновременно использовать несколько списков и вызывать их в нужные моменты времени по номеру. Вызов нашего (единственного) списка мы будем производить командой glCallList(l);. Команды, расположенные между строками giNewList(l, GL_COMPILE); и glEndListQ;, будут откомпилированы и сохранены в списке номер один. В функции перерисовки их следует просто воспроизвести. Для этого замените существующую версию функции OnDraw на новую:

void _stdcall OnDraw()

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode (GL_MODELVIEW);

glLoadldentity ();

glTranslated(gdTransX, gdTransY, gdTransZ);

glRotated(gdAngleY, 0.,1.,0.);

glRotated(gdAngleX, 1. ,0 .,0 .);

//====== Воспроизводим команды из списка 1

glCallList (1);

auxSwapBuffers();

}

Вызов DrawScene можно осуществить внутри функции initQ, то есть один раз за время существования программного модуля:

void Init ()

{

glClearColor (1., 1., 1., 0.);

//====== Включаем интерполяцию цветов полигона

glShadeModel (GL_SMOOTH);

glShadeModel (GL_DEPTH_TEST) ;

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL),

glEnable(GL_LIGHTING);

glEnable(GL_LIGHTO);

glEnable(GL_COLOR_MATERIAL);

//====== Готовим сцену

DrawScene () ;

}

 

Использование списков

страницы в данном разделе 
Урок 6. Графика OpenGL Графика OpenGL
Обзор возможностей библиотеки OpenGL Подключаемые библиотеки
Ограничения Microsoft Примитивы OpenGL
OpenGL — автомат с конечным числом состояний Конвейер передачи OpenGL
Основные этапы Анимация
Другие функции OpenGL Контекст передачи изображения
Подготовка окна Создание консольного проекта
Штриховка линий Штриховка полигонов
Как убирать внутренние линии Перспективная проекция
Вносим свет Интерактивное управление положением и ориентацией
Двойная буферизация Использование списков
Интерполяция цвета Строим икосаэдр
Как создать сферу Выбор способа вычисления нормалей
Рекурсивное деление Массивы вершин, нормалей и цветов
Создание сферы >  


Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C



 
© faq.pp.ru, справочник программиста