2012-03-25 63 views
3

我試圖實現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沒有被設置。之前我曾嘗試過使用它們來達到類似的結果。我的理解是他們應該被設置爲默認值。

+0

你應該在第18行將w設置爲0.0還是1.0? – user1118321 2012-03-25 03:52:38

+1

@ user1118321法線是一個向量,所以翻譯不適用於它,它的值應該是0. – kevintodisco 2012-03-25 04:44:43

+0

當然是啊。好點子。 – user1118321 2012-03-25 14:36:08

回答

1

既然你提到normalnormalModelView沒有被設置,我的猜測是他們沒有被設置爲默認值,並且在技術上是無效的數據。在着色器中使用無效數據時,結果未定義,是着色器難以調試的部分原因。在嘗試在代碼中引用它們之前,請確保提供了這些變量的值。

+0

是的,這是問題。我以爲我之前已經讀過這個行爲是被定義的(至少對於矩陣),但這確實是問題所在。 – Kyle 2012-03-25 04:53:42