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

3.4.1. Формирование дисплейного списка и преобразование его в изображение Для работы с дисплейными списками необходимо иметь в своем распоряжении средства создания списка и включения в него нужной информации. Механизм доступа к элементам списка должен быть достаточно гибким и обеспечивать прикладной программе значительную свободу. В составе OpenGL имеется небольшой набор функций манипулирования содержимым дисплейного списка, и ниже на примерах будет показано, как ими пользоваться4.

Дисплейные списки формируются по той же схеме, что и графические примитивы. Список открывается функцией glNewList(), а закрывается функцией glEndList( ). Операторы между этими двумя вызовами формируют содержимое списка. Каждый дисплейный список имеет уникальный идентификатор - целое число, которое определяется с помощью директивы макроопределения #def ine языка С. Например, приведенный ниже фрагмент программы формирует дисплейный список, в котором имеется один объект- красный квадрат. Этот фрагмент практически идентичен фрагменту, приведенному в главе 2, но на сей раз информация не отправляется сразу же на отображение, а помещается в список.

tdefine BOX 1 /* Или любое другое ранее не использованное целое число */

4 В пакете PHIGS имеются структуры ^structures,/, а в пакете GKS- сегменты ^segments/ причем и те и другие поддерживают многие из характеристик дисплейных файлов OpenGL.

3.4. Дисплейный файл

glNewList(BOX, GL_COMPILE); glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0); glVertex2f(-1.0, -1.0); glVertex2f( 1.0, -1.0); glVertex2f( 1.0, 1.0); glVertex2f(-1.0, 1.0); glEnd(); glEndList();

Флаг GL_COMPILE настраивает такой режим работы графической системы, что список пересылается на сервер, но его содержимое на экран не выводится. Если желательно сразу же вывести изображение на экран, то вторым аргументом функции glNewList() должен быть флаг GL_COMPILE_AND_EXECUTE.


⇐ Предыдущая| |Следующая ⇒