2011-10-10 13 views
22

Entiendo que glVertexAttribPointer establecerá los valores para un atributo de vértice basado en la matriz apuntada. ¿Para qué sirve glVertexAttrib? Parece que solo establece un valor único (posiblemente vectorial) para el atributo de vértice, entonces, ¿qué sucede cuando tienes múltiples vértices? ¿Todos los vértices terminan viendo el mismo valor para el atributo?¿Para qué se utiliza glVertexAttrib (frente a glVertexAttribPointer)?

Respuesta

40

Esto se usó principalmente con el antiguo modo inmediato (glBegin/glEnd), donde no usa matrices de vértices, que está en desuso (y eliminado en OpenGL ES 2.0 y en el núcleo de OpenGL 3+ de escritorio).

Pero esta función todavía tiene su uso con las matrices (es por eso que todavía está allí en las versiones modernas). Tiene razón al suponer que todos los vértices que siguen a esta llamada tienen el mismo valor para este atributo (solo si no habilita la matriz de este atributo, por supuesto). O más exactamente, cada atributo de sombreador utilizado que no tiene sus fuentes habilitadas para la matriz correspondiente es un valor de un solo estado y este valor se puede cambiar con glVertexAttrib.

Esto es útil si tiene un sombreador general con p. Ej. un atributo de color y un atributo de posición y tiene un objeto con un color constante. Entonces, al usar glVertexAttrib, no tiene que enviar un color para cada vértice, ni tiene que usar un sombreador especial con el color cambiado a un uniforme.

+2

Usar un solo color es un buen ejemplo. ¡Gracias! –

+0

Awesome answer :-) Siempre me pregunté, ¿por qué uno usaría un atributo constante en lugar de un uniforme? pero tu ejemplo tiene mucho sentido para mí. – Mecki

Cuestiones relacionadas