Frage

Ist es möglich, die Farbe eines einzelnen Vertex mit einem GLSL Vertex-Shader-Programm, auf die gleiche Art und Weise eingestellt werden, dass gl_Position die Position eines Knotens ändert?

War es hilfreich?

Lösung

Für die Versionen von GLSL vor Version 1.30, mögen Sie schreiben an dem gl_FrontColor oder gl_BackColor Einbauten, die sind varyings zugänglich im Vertex-Shader. Lesen Sie mehr über varyings in der GLSL 1.10-Spezifikation ( http: // www .opengl.org / registry / doc / GLSLangSpec.Full.1.10.59.pdf ) mehr über sie oder die GL_ARB_vertex_shader Erweiterung Spezifikation zu lernen.

gl_FrontColor und gl_BackColor sind 4D-RGBA-Vektoren, die Punkt Skalare normalisiert nehmen schwimmt.

Aber dieser Wille Satz alle die Ecken zu rot, nicht nur eine Ecke. Dies liegt daran, die gleichen Vertex-Shader für alle Ecken ausgeführt wird. Wenn Sie einzelne Farben setzen, verwenden Sie glColorPointer zusammen mit glDrawArrays, glDrawElements, glDrawRangeElements oder glMultiDrawElements. Die Vertex Farbe durch glColorPointer einstellen als gl_Color im Vertex-Shader gelesen werden. gl_Color im Vertex-Shader ist ein pro-Vertex-Attribut.

Um die Farbe lesen Sie in der Vertex-Shader geschrieben, in dem Fragment-Shader, lesen Sie die eingebaute in gl_Color variiert. Fertige Fragmente sollten gl_FragColor geschrieben werden.

Vertex-Shader-Beispiel:

void main()
{
    gl_FrontColor = gl_Color;
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

Fragment-Shader-Beispiel:

void main()
{
    gl_FragColor = gl_Color;
}

Auch auf der Vertex-Shader machen gesetzt die varyings wie die OpenGL Fixed-Function-Pipeline, rufen Sie die Funktion ftransform ().

void main()
{
    ftransform();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top