2014-11-21 71 views
2

我試圖讓這個tutorial能夠正常工作,但我遇到了兩個問題,其中之一可以找到here。另一個是以下內容。着色器中Threejs的正常值被設置爲0

爲了方便,這是應該工作的代碼,這裏是一個jsfiddle

頂點着色器:

uniform mat4 projectionMatrix; 
uniform mat4 modelViewMatrix; 
attribute vec3 position; 
uniform vec3 normal; 
varying vec3 vNormal; 

void main() { 
    test = 0.5; 
    vNormal = normal; 
    gl_Position = projectionMatrix * 
       modelViewMatrix * 
       vec4(position,1.0); 
} 

片段着色器: 變化mediump VEC3 vNormal;

void main() { 
    mediump vec3 light = vec3(0.5, 0.2, 1.0); 

    // ensure it's normalized 
    light = normalize(light); 

    // calculate the dot product of 
    // the light to the vertex normal 
    mediump float dProd = max(0.0, dot(vNormal, light)); 

    // feed into our frag colour 
    gl_FragColor = vec4(dProd, // R 
         dProd, // G 
         dProd, // B 
         1.0); // A 
} 

在頂點着色器或至少爲在片段着色器vNormalnormal的值似乎是0是應該顯示保持黑色的球體。只要手動更改gl_FragColor的值,球體就會改變顏色。有人可以告訴我爲什麼這不起作用嗎?

回答

5

在你的頂點着色器的vec3 normal應該是一個屬性(因爲每個頂點有一個正常的),沒有一個統一的:

attribute vec3 normal; 

Here是你的代碼的工作版本。

+0

你是我的英雄!非常感謝! – Flavio 2014-11-21 22:19:07