Можете ли вы сохранить атрибут позиции в номере атрибута, отличном от 0

#c #opengl

Вопрос:

В OpenGL я всегда вижу, что атрибут position всегда находится в атрибуте 0. Возможно ли, чтобы атрибут позиции находился под номером 1? Почему атрибут position всегда равен атрибуту 0?

Ответ №1:

За пределами теперь удаленного gl_Vertex встроенного атрибута нет такого понятия, как «атрибут позиции». GLSL понятия не имеет, какой атрибут соответствует «позиции». Все они являются просто числами для вашего вершинного шейдера; они приобретают значение только тогда, когда вы что-то назначаете gl_Position .

Который является выводом вершинного шейдера. То, как вы генерируете значение для этого результата, не касается GLSL.

Как уже было сказано, более старые версии OpenGL наделяли атрибут 0 особыми полномочиями. Но это были в основном рудиментарные элементы glBegin/End программирования в стиле фиксированных функций, и им не требовалось иметь значение «позиция». Единственным особым статусом, который у него был, было то, что вы должны были что-то туда положить. То есть вы не могли не использовать атрибут 0.

Но опять же, это уже давно удалено из OpenGL. В наши дни люди ставят там «позицию» просто по привычке.