Подтвердить что ты не робот

Что такое glVertexAttrib (по сравнению с glVertexAttribPointer)?

Я понимаю, что glVertexAttribPointer установит значения для атрибута вершины на основе массива с указателем. Что такое glVertexAttrib, хотя? Похоже, он просто устанавливает одно (возможно, векторное) значение для атрибута вершины, так что происходит, когда у вас есть несколько вершин? Все ли вершины в конечном итоге видят одинаковое значение для атрибута?

4b9b3361

Ответ 1

В основном это использовалось со старым немедленным режимом (glBegin/glEnd), где вы не используете массивы вершин, которые устарели (и удалены в OpenGL ES 2.0 и рабочем ядре OpenGL 3+).

Но эта функция по-прежнему используется с массивами (почему она все еще существует в современных версиях). Вы правы в своем предположении, что все вершины, следующие за этим вызовом, имеют одинаковое значение для этого атрибута (только если вы не включили этот массив атрибутов, конечно). Или, точнее, каждый использованный атрибут shader, который не имеет соответствующего массива, получает его значение из одного значения состояния, и это значение может быть изменено с помощью glVertexAttrib.

Это полезно, если у вас есть общий шейдер, например. атрибут цвета и атрибут position, и у вас есть объект с постоянным цветом. Таким образом, используя glVertexAttrib, вам не нужно указывать цвет для каждой вершины, и вам не нужно использовать специальный шейдер с измененным цветом в униформе.