我試圖實現phong陰影無濟於事。我正在逐漸構建着色器(這本身可能是一個問題),但這裏是我目前所處的位置。我希望這會在我的黑色背景上輸出我的結果(猶他州茶壺)作爲白色圖像。當我從頂點着色器中刪除第18行時,它正確地做到了這一點,但是當行在那裏時沒有輸出,並且沒有錯誤。有任何想法嗎?GLSL Vertex Shader編譯時不顯示
片段着色器:
1 #version 120
2
3 varying vec3 vertexNormal;
4 varying vec3 cameraSpacePos;
5
6 vec3 calcSpecular(vec3 l, vec3 n, vec3 v, vec3 cL, vec3 cS, float p)
7 {
8 vec3 r = 2.0 * n * (n * l) - l;
9 return cL * cS * pow(max(0.0, dot(r, v)), p);
10 }
11
12 vec3 calcDiffuse(vec3 l, vec3 n, vec3 cL, vec3 cD)
13 {
14 return cL * cD * max(0.0, dot(n, l));
15 }
16
17 void main(void)
18 {
19 vec3 lightDirection = normalize(vec3(-1.0, 0.0, -1.0));
20 vec3 objectColor = vec3(0.5, 0.0, 0.0);
21 vec3 ambientColor = vec3(0.1, 0.1, 0.1);
22 vec3 lightColor = vec3(0.3, 0.0, 0.3);
23 vec3 specularColor = vec3(1.0, 1.0, 1.0);
24
25 gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
26 }
頂點着色器:
1 #version 120
2
3 uniform mat4 modelView;
4 uniform mat4 normalModelView;
5 uniform mat4 projection;
6
7 attribute vec3 position;
8 attribute vec3 normal;
9
10 varying vec3 vertexNormal;
11 varying vec3 cameraSpacePos;
12
13 void main(void)
14 {
15 vec4 tmpCameraSpacePos = modelView * vec4(position, 1.0);
16 gl_Position = projection * tmpCameraSpacePos;
17
18 vertexNormal = (normalModelView * vec4(normal, 0.0)).xyz;
19 cameraSpacePos = (tmpCameraSpacePos).xyz;
20
21 }
22
這也可能是值得一提的是正常的,normalModelView沒有被設置。之前我曾嘗試過使用它們來達到類似的結果。我的理解是他們應該被設置爲默認值。
你應該在第18行將w設置爲0.0還是1.0? – user1118321 2012-03-25 03:52:38
@ user1118321法線是一個向量,所以翻譯不適用於它,它的值應該是0. – kevintodisco 2012-03-25 04:44:43
當然是啊。好點子。 – user1118321 2012-03-25 14:36:08