Сохранение параметров Поскольку при работе с OpenGL часто возникает необходимость в изменении состояния OpenGL (параметры вывода, типы осуществляемых проверок и т. п.), то весьма удобной является возможность запоминать текущее состояние определенных параметров в стеке (наподобие стека матриц) и восстанавливать состояние потом.
Для запоминания ряда параметров служит функция
void glPùshAttrib ( GLbitfield mask );
Параметр mask задает типы параметров текущего состояния, которые должны быть сохранены этой командой. Наиболее распространенными значениями являются GL_COLOR_B UFFER_BIT, GL_ENABLE_BIT, GL_DEPTH_BUFFER_Brr, GL_STENCIL_BUFFER_BIT и GL_TEXTURE_BiT. Полный список возможных битовых значений (вместе со списком сохраняемых ими параметров) можно найти в описании OpenGL.
Функция
void glPopAttrib О; восстанавливает состояние сохраненных параметров, снимая их со стека.
ОБЪЕКТНАЯ МОДЕЛЬ. ОСНОВНЫЕ КЛАССЫ
Поскольку в рассматриваемом нами проекте мы собираемся активно использовать принципы и приемы объектно-ориентированного программирования (ООП), то для облегчения дальнейшей работы удобно будет сразу определить применяемую объектную модель и основные классы.
Довольно часто в ООП смешиваются два близких понятия - абстрактные типы данных (АТД) и объекты. Если мы хотим построить удобную п расширяемую в дальнейшем объектную модель, то эти два понятия необходимо четко различать.
Под АТД обычно подразумевают объединение данных с методами для их обработки. Хотя при этим может встречаться наследование АТД, но их методы при этом не переопределяются, т. е. фактически АТД - это просто "объектная обертка" вокруг структуры. Простейшими примерами АТД являются введенные ранее классы Vector2D, Vector3D, Plane и т. п. Полиморфизм в случае АТД практически отсутствует и вызываемые методы одно-шачно определяются на этапе компиляции.
С другой стороны, часто встречается необходимость в полиморфизме, наследовании и переопределении методов объектов непосредственно па стадии выполнения программы. Например, в конструкции