Capisco che glVertexAttribPointer
imposterà i valori per un attributo vertice basato sulla matrice puntata. Che cosa è, per, glVertexAttrib
? Sembra che imposti un solo valore (possibilmente vettoriale) per l'attributo vertice, quindi cosa succede quando si hanno più vertici? Tutti i vertici finiscono per vedere lo stesso valore per l'attributo?Per cosa viene utilizzato glVertexAttrib (rispetto a glVertexAttribPointer)?
risposta
Utilizzato principalmente con la modalità immediata precedente (glBegin/glEnd
), in cui non si utilizzano gli array di vertici, che sono deprecati (e rimossi in OpenGL ES 2.0 e desktop OpenGL 3+ core).
Ma questa funzione ha ancora il suo utilizzo con gli array (è per questo che è ancora presente nelle versioni moderne). Hai ragione nel supporre che tutti i vertici che seguono questa chiamata abbiano lo stesso valore per questo attributo (solo se non abiliti l'array di questo attributo, ovviamente). O più esattamente ogni attributo shader usato che non ha il suo array corrispondente abilitato fonti il suo valore da un singolo valore di stato e questo valore può essere modificato con glVertexAttrib
.
Ciò è utile se si dispone di uno shader generale con ad es. un attributo color e un attributo position e hai un oggetto con un colore costante. Quindi usando glVertexAttrib
non devi inviare un colore per ogni vertice, né devi usare uno shader speciale con il colore cambiato in uniforme.
L'utilizzo di un singolo colore è un buon esempio. Grazie! –
Risposta stupenda :-) Mi sono sempre chiesto, perché si dovrebbe usare un attributo costante invece di una uniforme; ma il tuo esempio ha perfettamente senso per me. – Mecki