2010-03-04 5 views
6

Ich versuche einige Shader zu meinem alten OpenGL-Programm hinzuzufügen, das viele GL_POINTS und einige GL_LINES zeichnet.GLSL mit Fragment-Shader rendert nur Schwarz GL_POINTS

Ich habe diese beiden Shadern:

Vertex-Shader:

void main() 
{ 
    vec4 v = vec4(gl_Vertex); 
    v.z = v.z + sin(v.x*v.x + v.y*v.y)/10.0; 
    gl_Position = gl_ModelViewProjectionMatrix * v; 
} 

Fragment-Shader:

#version 120 

void main() 
{ 
    vec4 myOutputColor = gl_Color; 
    gl_FragColor = myOutputColor; 
    //gl_FragColor.r = 0.5; 
} 

Diese beiden Shader kompilieren und verknüpfen, ohne Probleme. Und der Vertex-Shader funktioniert großartig, ich kann die GL_POINTS sehen, die mit dieser Sünde im Vertex-Shader verschoben wurden. Aber das Problem ist, dass ich meine GL_POINTS und GL_LINES nur sehen kann, wenn die Hintergrundfarbe nicht schwarz ist, weil alle Punkte und Linien schwarz dargestellt werden. Es scheint, dass alle mit glColor3f im Rendering-Code gesetzten Farben ignoriert werden. Wenn ich die kommentierte Zeile in meinem Fragment-Shader auskommentiere, kann ich alle Linien und Punkte rot machen, aber sollte gl_Color nicht der Farbe entsprechen, die mit glColor3f für jeden Punkt gesetzt wurde?

Gibt es noch etwas in meinem OpenGL-Code, das dieses Verhalten verursachen könnte?

Antwort

11

müssen Sie die Farbe im Vertex-Shader übergeben.

gl_FrontColor = gl_Color; 
+0

Danke! Arbeitet jetzt! Ich weiß nicht, wie ich diesen Teil in den Tutorials verpasst habe .. :) – ivans

+1

Siehe auch die Antwort hier für mehr: http://stackoverflow.com/questions/6430154/what-is-the-relationship-between-gl- color-and-gl-frontcolor-in-beiden-Vertex-und-fr –