2014-04-19 1 views
0

나는 webgl의 간단한 퐁 쉐이더에서 작업하고 있는데, 나는 가까이 가고 있다고 생각하지만 여전히 잘못된 것이 있습니다. Dead give away : 빌보드를 가지고 바퀴가 돌기 때문에 광고판의 일부가 회전합니다. (모델에 문제가있는 것처럼 보이기 때문에 혼란 스럽습니다. 행렬을 만들었지 만 변환으로 인해 모든 위치가 정확하게 맞고 조명이 잘못되었습니다. 뷰 매트릭스가있는 Ditto는 주위를 돌아 다니며 자유롭게 볼 수 있으며 모든 것이 올바른 위치에 있으며 조명이 잘못되었습니다.WebGl의 버그 Phong 쉐이더

여기에 있습니다. 내 쉐이더 (마이너스 공간에 대한 정의, 모델 매트릭스의 조명은 명확성을 위해 GPU로 이동) {당신은 GitHub의 읽기 원하는 경우 : https://github.com/nickgeorge/quantum/blob/master/index.html#L41}

<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

몰라. 이것은 빛의 위치가 이미 세계 좌표계에 있기 때문에 어떤 의미가 없으므로 전혀 변환 할 필요가 없습니다.