2014-04-19 113 views
0

我正在研究webgl中的一個簡單的phong着色器,並且我認爲我越來越接近但仍有錯誤。死亡放棄:如果我有一個廣告牌並且它有滾動(所以它像輪子一樣旋轉),廣告牌亮起來的部分旋轉着它:(這讓我感到困惑,因爲它似乎是模型的問題矩陣,但是變換使得所有位置的旋轉都是正確的,只是照明不正確。與視圖矩陣同樣,我可以四處移動,並且可以自由地看,並且所有東西都位於其正確的位置,只是錯誤地點亮。我的着色器(減去空間的定義,並在模型矩陣照明搬進GPU爲清楚起見){如果你喜歡閱讀github上:https://github.com/nickgeorge/quantum/blob/master/index.html#L41}WebGl Phong着色器中的Bug

<script id="fragment-shader" type="x-shader/x-fragment"> 
    void main(void) { 
    vec3 lightWeighting; 
    if (!uUseLighting) { 
     lightWeighting = vec3(1.0, 1.0, 1.0); 
    } else { 
     vec3 lightDirection = normalize(vLightPosition.xyz - vPosition.xyz); 

     float directionalLightWeighting = max(0.0, dot(
      normalize(vTransformedNormal), 
      lightDirection)); 
     lightWeighting = uAmbientColor + uPointLightingColor * directionalLightWeighting; 
    } 

    vec4 fragmentColor; 
    if (uUseTexture) { 
     fragmentColor = texture2D(uSampler, 
      vec2(vTextureCoord.s, vTextureCoord.t)); 
    } else { 
     fragmentColor = uColor; 
    } 
    gl_FragColor = vec4(fragmentColor.rgb * lightWeighting, fragmentColor.a); 
    } 
</script> 

<script id="vertex-shader" type="x-shader/x-vertex"> 
    void main(void) { 
    vPosition = uModelMatrix * vec4(aVertexPosition, 1.0); 

    // TODO: Move back to CPU 
    vLightPosition = uModelMatrix * vec4(uPointLightingLocation, 1.0); 

    gl_Position = uPerspectiveMatrix * uViewMatrix * vPosition; 
    vTextureCoord = aTextureCoord; 
    vTransformedNormal = normalize(uNormalMatrix * aVertexNormal); 
    } 
</script> 

謝謝很多,並讓我知道是否有其他任何有用的補充。

回答

1

說不上什麼政策是在這裏回答你自己的問題,但萬一有人絆倒在這個同樣的問題:

我被模型矩陣變換我的光的位置。這沒有任何意義,因爲燈光位置已經在世界座標中,所以根本不需要改變它。