Как только возникнет необходимость вывести изображение этого квадрата на экран, нужно вызвать функцию glCallList ( ), передав ей в качестве аргумента идентификатор списка, в данном случае - BOX:

glCallList(BOX);

Как и по отношению к другим функциям построения примитивов на экране, к дисплейному списку применяются переменные текущего состояния исполнительной системы OpenGL, которые задают необходимые преобразования. Если,' например, изменить матрицы проективного преобразования и/или вида между двумя последовательными вызовами функции glCallList {), то изображение объекта появится в другом месте экрана (а может, и вообще исчезнет). Как выполняется управление матрицей проективного преобразования, показано в приведенном ниже фрагменте программы.

glMatrixMode(GL_PROJECTION);
for(i= 1 ; i<5; i++)
{
glLoadIdentity();
gluOrtho2D(-2.0*i, 2.0*i, -2.0*i, 2.0*i); glCallList(BOX);
}

При каждом вызове функции glCallList ( ) квадрат будет повторно выводиться на экран с учетом новых параметров отсекающего прямоугольника.

В последующих главах я познакомлю вас с матрицами преобразований, которые позволяют использовать дисплейный список для моделирования динамических сцен. Но учтите, поскольку имеется возможность манипулировать дисплейным списком, нужно быть предельно внимательным при программировании такого рода процедур, иначе потом могут появиться совершенно нежелательные и часто непредсказуемые эффекты. Например, в приведенном выше дисплейном списке текущий цвет изменяется на красный. После этого все объекты будут выводиться на экран красным цветом до тех пор, пока в каком-либо другом списке не встретится функция, устанавливающая другой текущий цвет. Проще всего "предохраниться" от подобного эффекта с помощью стека матриц и атрибутов, который поддерживается пакетом OpenGL. Стек- это структура данных, в которой элемент, включенный в структуру последним, извлекается из нее первым. Таким образом, можно поместить в вершину соответствующего стека (иногда говорят "затолкать в стек") текущее значение используемого атрибута или матрицы, а затем восстановить его, извлекая из стека это значение (одновременно оно удаляется из стека). Поэтому стандартная последовательность операций, обеспечивающая сохранение-восстановление текущих параметров состояния, предусматривает сначала сохранение их в соответствующих стеках, за-


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