Следующий шаг в преобразованиях координат вершин - расчет перспективы. Эта операция делит координаты каждого компонента отсеченного пространства на однородную координату w. Полученные координаты x,ynz будут находиться в диапазоне [-1,1J, полученная же координата w всегда будет равна единице, так что ее можно отбросить. Иными словами, все видимые графические примитивы будут преобразованы так, чтобы помещаться в пространство между точками (-1, -1, -1) и (1, 1.1 )■ Это нормализованное пространство приборных координат, которое является промежуточным пространством на пути к окну и применяется для лучшего отображения графики в окне произвольных размера и глубины.

Пикселы в окне на экране, конечно же, не имеют дробных координат из промежутка (-1, 1). В окне обычно используются оконные координаты, где координата х меняется от 0 до значения ширины окна минус 1, а координата# - от 0 до значения высоты окна минус 1. Поэтому нужно выполнить еще одно преобразование. Оконное преобразование определяет правила отображения из нормализованных приборных координат в оконные координаты, и эти правила можно назначить функцией gl Viewport (назначаются правила отображения для х- и .у-координат). Растеризация графических примитивов происходит уже в оконных координатах.

1.10. Текстурирование

Отображение текстуры - один из самых сложных видов операций в OpenGL API. Для него определено больше расширений, чем для других видов Open GL-операций, так как этот вид был чуть ли не единственным, для которого применяли графические ускорители в то время, когда был определен Open GL (в начале 1990 гг.).

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

В OpenGL существует четыре основных типа текстурных карт: одномерная, двухмерная, трехмерная и кубическая (OpenGL 1.0 поддерживал только одномерные и двухмерные текстуры). 1 D-текстура - это массив, в котором хранятся значения ширины, 2Б-текстура - массив, содержащий значения высоты и ширины, а ЗО-текстура содержит значения ширины, высоты и глубины. Кубическая текстура содержит шесть двухмерных текстур, для каждого главного направления оси (то есть ±х, ±у, ±z).

В OpenGL используется понятие модуля текстур. Этот модуль соответствует части графического ускорителя, которая выполняет различные операции с текстурами. В OpenGL L3 появилась возможность работы с несколькими текстурными модулями. Каждый модуль хранит несколько состояний для текстурных операций:

□ состояние модуля - включен или выключен;

□ стек текстурной матрицы, используемый для преобразования текстурных координат;


⇐ вернуться назад | | далее ⇒