Другой набор функций позволяет передавать нормализованные значения как атрибуты вершин:
void glVertexAttrib4NubARB(GLuint index. TYPE v)
void glVertexAttrib4N{b!s]i|f|d|ub|us|ui}vARB(GLuint index, const TYPE *v)
Функции устанавливают дополнительные атрибуты вершин по индексу index в нормализованное значение из V. В дополнение к N (что указывает на нормализованные данные) в названии может быть два суффикса, что позволяет указывать тип передаваемого аргумента. Первый суффикс указывает тип данных v и может обозначать byte (b), short (s), int (i), float (f),double(d), unsigned byte (ub), unsigned Short (us) или unsigned int (ui). Второй суффикс v - необязательный и обозначает, что v - указатель на массив значений этого типа данных.
Команда с N в названии обозначает, что для данных, не являющихся числами с плавающей запятой или числами двойной точности, аргументы будут линейно отображены на нормализованный диапазон точно так же, как данные, передаваемые вцелые варианты функций gl Col or ид! Normal. То есть для функций, работающих сцелыми числами со знаками, самое большое положительное число отображается на 1,0, а самое маленькое - на -1,0; для беззнаковых целых наибольшее положительное число отображается на 1,0, а наименьшее - на 0.
Attribute-переменные могут быть типов mat2, mat3 или mat4. Установить ихмож-fio с помощью функции gl VertexAttri bARB в последовательные ячейки по столб-дам. То есть чтобы задать атрибут типа mat4, нужно установить первую колонку в attribute-переменную с индексом i, вторую - в attribute-переменную с индексом i +1, третью - в attribute-переменную с индексом i +2 и четвертую - в attribute-переменную с индексом i +3.
За одним исключением, атрибуты вершин могут быть любыми. Их можно использовать для передачи всего, чего угодно: дополнительных значений цвета, тангенсов, бинормалей, значений глубины и т. п. Исключение сострит в том, что вершинный атрибут с индексом 0 используется, подобно вызову функции gl Vertex, для того, чтобы сообщить OpenGL об окончании передачи данных для конкретной вершины. Команды gl Vertex2, gl Vertex3, gl Vertex4 полностью эквивалентны соответствующей команде gl VertexAttri bARB с индексом 0. Для атрибута с индексом 0 не существует текущего значения; при попытке получить его будет сгенерирована ошибка. Только один этот атрибут имеет такие свойства; установка всех прочих стандартных атрибутов может выполняться в произвольном порядке, вперемешку с установкой других дополнительных атрибутов. Можно также сочетать вызовы gl Vertex с вызовами функции gl VertexAttri bARB с индексом 0.