1
我正在處理一個非常簡單的程序,它將一個點數組傳遞給可編程管道以繪製一個立方體。我試圖設置它,所以我可以改變每一幀的幾何圖形(基於某些外部輸入),因此,對於照明,我需要在改變後重新計算面部法線。我正在做幾何着色器作爲練習。當它不應該改變GLSL幾何值
我的着色如下:
頂點:
#version 330 core
layout(location = 0) in vec3 vertexPosition_modelspace;
uniform mat4 MVP;
void main(){
gl_Position = MVP * vec4(vertexPosition_modelspace,1);
}
幾何:
#version 330
precision highp float;
layout (triangles) in;
layout (triangle_strip) out;
layout (max_vertices = 3) out;
out vec3 normal;
void main(void)
{
for (int i = 0; i < gl_in.length(); i++) {
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
EndPrimitive();
normal = vec3(0,0,1);
}
片段:
#version 330
in vec3 normal;
out vec4 color;
void main()
{
color = vec4(normal,1);
}
我試圖計算法線(但我有pul因爲調試的原因導出了這段代碼),並且當我運行該程序時正常值出現了。 所以我把片段顏色設置爲任何正常值。 (看看它是否確實是正常的。) 因此,無論出於何種原因,「正常」的價值無論在何種原因下都是在紅色,綠色,白色和黑色之間翻轉。 如果我只是在片段着色器中指定一個顏色矢量,那麼該立方體在任何地方都會呈現該顏色。
爲什麼正常值的變化呢?
想法?
謝謝你的回答。它解決了我的問題。在我所有關於幾何着色器的閱讀中,我從來沒有看到任何告訴過我的東西。儘管這是我自己的無能。謝謝。 – APalmer 2013-05-10 13:55:45