Настройка библиотеки | MetodPro.ru

Реклама на сайте

Настройка библиотеки


Как уже говорилось, работа OpenGL основана на базе конвейера визуализации. Позднее мы будем подробно рассматривать большинство этапов этого конвейера. Для начала, абстрагируясь от деталей, представим его в виде черного ящика, на вход которого подается описание моделей в виде совокупности геометрических примитивов, а на выходе, в буфере кадра, получается двумерный образ сцены.  Очевидно, что конвейер должен работать в различных режимах: закрашивать образы моделей или оставлять их каркасными, учитывать освещение или нет, использовать сглаживание или оставлять линии ступенчатыми и многих других.

Представим, что в нашем черном ящике скрывается конечный автомат. Следовательно,  исходя из свойств автомата, мы можем сказать следующее:

  • Существует множество возможных состояний;
  • При изменении  состояния автомата изменяются  выполняемые им преобразования;
  • Существует некоторое начальное состояние автомата.

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

Некоторые из переменных принадлежат к  логическому типу и их значения показывают, включен или нет один из режимов. Как правило, изменение значений этих переменных производится с помощью команд glEnable() – разрешить и glDisable() – запретить. Например, команда glEnable(GL_LINE_SMOOTH) переводит систему в состояние (включает режим), в котором производится сглаживание линий.

Другие переменные определяют свойства преобразований. Они хранят числа, вектора и даже матрицы. Значения таких переменных устанавливаются различными специальными процедурами. Так команда glСolor3f(0.5, 0.5, 0.5) изменяет текущее значение переменной, отвечающей за цвет выводимых примитивов.

В любой момент времени можно запросить у системы текущие значения переменных состояния. Для этого используется одна из команд начинающаяся с glGet, например, glGetBoolean(), glGetFloatv(), glGetError(). Полный список переменных состояния, значения по умолчанию и связанные с ними команды можно узнать в справочном руководстве.

Часто мы хотим временно изменить значение переменных. Для этого опрашиваем и запоминаем текущее состояние, устанавливаем новое, затем производим вывод и восстанавливаем исходное состояние. Для облегчения данной процедуры и увеличения эффективности работы в библиотеке предусмотрен стек атрибутов. Занести значения в стек можно при помощи команд glPushAttrib() и glPushClientAttrib(), а для восстановления из стека используются команды glPopAttrib() и glPopClientAttrib.

Отдельно остановимся на переменных, определяющих матричные преобразования. В OpenGL используются четыре матрицы:

  • Матрица видового преобразования  - GL_MODELVIEW;
  • Матрица проецирования - GL_PROJECTION;
  • Матрица текстуры - GL_TEXTURE;
  • Матрица цвета – GL_COLOR_MATRIX.

По умолчанию все матрицы являются единичными. С каждым типом матриц связан свой стек. Текущей является матрица, находящаяся в вершине стека соответствующего типа. Количество матриц, которые можно поместить в стек, зависит от типа матрицы и конкретной реализации библиотеки.  Механизм доступа к матрицам единый, следовательно, для того, чтобы изменить конкретную матрицу, нужно установить режим изменения матриц этого типа с помощью команды glMatrixMode(). Так команда glMatrixMode(GL_MODELVIEW) выбирает для изменения матрицу видового преобразования. Рассмотрим некоторые разрешенные операции:

glLoadIdentity() - заменяет текущую матрицу выбранного типа единичной;

glPushMatrix() - заносит в стек копию текущей матрицы.

glPopMatrix()  -  извлекает матрицу из стека, делая ее текущей (можно рассматривать как удаление верхней матрицы из стека).



Методические пособия

  • Системы автоматизированного проектирования
  • Социология молодёжи
  • Общая социология
  • Криптография
  • Проектирование трансляторов
  • Компьютерная графика
  • Моделирование систем
  • Информационная безопасность
  • Теория вычислительных процессов
  • Логические основы искусственного интелекта
  • Проектирование распределённых информационных систем