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?

È stato utile?

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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top