gITranslatef ( 40.0, 0.0, 30.0 );
drawWheelAndBolts ();
gIPopMatrix ();
gIPushMatrix ();
gITranslatef ( 40.0, 0.0, -30.0 );
drawWheelAndBolts ();
gIPopMatrix ();
...... // draw last 2 wheels similarly
}
12.4. Дисплейные списки В традиционных языках программирования существуют функции и процедуры -можно выделить конкретную последовательность команд, запомнить ее в определенном месте и вызывать всякий раз, когда в ней возникает потребность. Подобная
12. Работа с библиотекой OpenGL
возможность существует и в OpenGL - набор команд OpenGL можно запомнить в так называемый дисплейный список (display list)(Bce команды и данные переводятся в некоторое внутреннее представление, наиболее удобное для данной реализации OpenGL) и затем вызывать при помощи всего лишь одной команды.
Каждому дисплейному списку соответствует некоторое целое число, идентифицирующее этот список.
Узнать, занят ли данный номер каким-либо дисплейным списком, можно при помощи функции
GLboolean gllsList ( GLuint list );
а зарезервировать range свободных идущих подряд номеров для идентификации дисплейных списков при помощи функции GLuint gIGenLists ( GLsizei range ); Эта функция возвращает первый свободный номер из блока зарезервированных данной командой.
Для того чтобы выделить последовательность команд в дисплейный список, служат процедуры glNewList () и glEndList (). Все команды, находящиеся между ними, помещаются в соответствующий дисплейный список автоматически.
void glNewList ( GLuint list, GLenum mode );
Здесь list - уникальное положительное число, служащее идентификатором списка, а параметр mode принимает одно из двух значений - GL_COMPILE или GL_COMPILE_AND_EXECUTE. Первое из этих значений обеспечивает только запоминание (компиляцию) дисплейного списка, второе - запоминание и выполнение этого списка.
Не все команды OpenGL могут быть.запомнены в дисплейном списке. Ниже приводится список команд, которые не могут быть запомнены в нем. * gIDeleteLists () gllsEnabled () gIFeedbackBuffer () gllsList () gIFinish () gIPixelStore ()