2010-03-04 182 views
6

我想向我的舊的OpenGL程序添加一些着色器,繪製大量GL_POINTS和一些GL_LINES。帶片段着色器的GLSL只呈現黑色GL_POINTS

我創建了這兩個着色器:

頂點着色器:

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; 
} 

片段着色器:

#version 120 

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

這兩種着色器編譯和鏈接沒有任何問題。頂點着色器工作得很好,我可以看到GL_POINTS在頂點着色器中使用該罪移位。但問題是如果背景顏色不是黑色,我只能看到我的GL_POINTS和GL_LINES,因爲所有點和線都呈現爲黑色。看起來在渲染代碼中用glColor3f設置的所有顏色都被忽略。如果我取消註釋片段着色器中的註釋行,我可以將所有行和點設爲紅色,但是不應該將gl_Color與每個點使用glColor3f設置的顏色相對應?

我的OpenGL代碼中是否還有其他可能導致此行爲的東西?

回答

11

您需要在頂點着色器中傳遞顏色。

gl_FrontColor = gl_Color; 
+0

謝謝!現在工作!我不知道我是如何錯過教程中的那部分。:) – ivans 2010-03-04 23:16:28

+1

另請參閱此處的答案以獲取更多信息:http://stackoverflow.com/questions/6430154/what-is-the-relationship-between-gl-色和-GL-frontcolor合兩個頂點和 - FR – 2011-09-19 16:26:57