cambiare il colore di un vertice in un vertex
-
23-09-2019 - |
Domanda
E 'possibile impostare il colore di un singolo vertice utilizzando un programma shader di GLSL vertice, nello stesso modo in cui GL_POSITION cambia la posizione di un vertice?
Soluzione
Per le versioni di GLSL prima versione 1.30, si desidera scrivere sul gl_FrontColor
o gl_BackColor
built-in, che sono accessibili varyings nel vertex shader. Leggi varyings nella specifica GLSL 1.10 ( http: // www .opengl.org / registro / doc / GLSLangSpec.Full.1.10.59.pdf ) per saperne di più su di loro, o la specifica estensione GL_ARB_vertex_shader.
gl_FrontColor
e gl_BackColor
sono vettori RGBA 4D che tengano scalari virgola mobile normalizzato.
Ma questo imposterà tutti i vertici al rosso, non solo un vertice. Questo perché lo stesso vertice shader viene eseguita per tutti i vertici. Se si desidera impostare singoli colori, utilizzare glColorPointer
insieme glDrawArrays
, glDrawElements
, glDrawRangeElements
o glMultiDrawElements
. Il colore vertice fissato dal glColorPointer
può essere letto come gl_Color
nel vertex. gl_Color
nel vertex è un attributo per vertice.
Per leggere il colore che hai scritto nel vertex shader, nello shader frammento, leggere il built-in variabili gl_Color
. frammenti finiti devono essere scritti gl_FragColor
.
Vertex Shader esempio:
void main()
{
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Esempio Fragment Shader:
void main()
{
gl_FragColor = gl_Color;
}
Inoltre, per rendere il vertex impostare i varyings proprio come l'OpenGL funzione fissa conduttura, chiama la funzione ftransform ().
void main()
{
ftransform();
}