Легко представить, что приложению может потребоваться указывать, например, тангенс, температуру, давление иди еще какую-нибудь величину. Как же позволить приложениям передавать «нетрадиционные» атрибуты и работать с ними в вершинных шейдерах?

Ответ таков: OpenGL предоставляет некоторое количество переменных для передачи атрибутов вершин. Каждая такая переменная имеет индекс (номер) и место для хранения до четырех чисел с плавающей запятой (то есть типа vec4). Реализация, поддерживающая 16 таких переменных, будет присваивать им номера от 0 до 15. Приложение может передавать атрибуты вершины через любые такие переменные с помощью функций

vol о* gl VertexAttri Ь{ 1121314} {s j f | d} ARB( SLui nt index. TYPE v)

void glVertexAttrib{l]2|3}{s|fjd}vARB(GLuint index, const TYPE*v)
void glVertexAttrib4{b|s|i|f|d|ub|us|ui}vARB(GLuint index, const TYPE *v)

Функции устанавливают атрибуты вершин по индексу index в значение из v. Эта команда имеет до трех суффиксов, которые дифференцируют входные параметры. Первый суффикс может быть 1,2,3 или 4, он показывает, содержит ли v 1,2,3 или 4 компонента. Если второй и третий компоненты не указаны, по умолчанию предполагается значение 0. Если четвертый компонент не указан, по умолчанию предполагается значен ие 1. Второй суффикс определяет тип данных и может обозначать byte (b), short (s), int (i), float (f), double (d), unsigned byte (ub), unsigned short (us) или unsigned int (ui). Третий суффикс необязателен - это буква v, обозначающая, что параметр v является указателем на массив значений этого типа данных.

16, Установка атрибутов вершин Приведенный набор команд имеет свои правила для преобразования данных в формат числа с плавающей запятой, то есть во внутреннее представление данных в OpenGL. Числа с плавающей запятой и двойной точности переводятся во внутренние значения OpenGL обычным способом, целые числа преобразуются в числа с плавающей запятой добавлением нулевой дробной части. Таким образом, например, значение 27 для типов byte, int, short, unsigned byte, unsigned int, unsigned short станет значением 27,0 внутри OpenGL.


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