Иллюстрированный самоучитель по Visual Studio.Net
OpenGL
— автомат с конечным числом состояний
OpenGL работает
по принципу конечного автомата, то есть автомата, который в каждый момент времени
находится в одном из состояний, принадлежащих конечному множеству допустимых
значений. В документации вы можете встретить в применении к OpenGL термины state
machine (конечный автомат) и assembly line (конвейер). Некоторые команды (вызовы
функций OpenGL) переводят автомат в различные состояния или режимы, которые
остаются неизменными до тех пор, пока не придет следующая команда изменения
состояния. Текущий цвет, как вы видели, является одним из состояний. Другими
состояниями являются:
-
узор линий или полигонов
(stipple patterns);
-
тип проективных или обзорных
преобразований (projection and viewing transformations);
-
режимы рисования полигонов;
-
режимы упаковки пикселов;
-
расположение источников
света и свойства материалов.
Многие переменные,
определяющие состояния, переключаются с помощью функций glEnable (включить)
или gioisable (выключить). Каждая переменная состояния или режим имеет значение
по умолчанию, и в любой точке программы вы можете узнать текущее состояние.
Обычно для этой цели используется одна из 6-ТИ команд: glGetBooleanv, glGetDoublev,
glGetFloatv, glGetlntegerv, glGetPointerv или glisEnabled. Выбор зависит от
типа данных, которые задают состояние. Некоторые переменные состояния (state
variables) заполняются более специфичными командами, например: glGetLight*,
glGetError, glGetPolygonStipple. Множество состояний можно сохранить в стеке
атрибутов командами glPushAttrib или glPushClientAttrib. Обычно так делают для
того, чтобы временно изменить что-то, а затем восстановить состояния с помощью
одной из команд: glPopAttrib, glPopClientAttrib.