2013-03-07 5 views
0

나는이 결과이 쉐이더를 사용하고 있습니다 :Stage3d 쉐이더 이상한 행동 추가 변수

<script id="per-fragment-lighting-vs2" type="x-shader/x-vertex"> 
    attribute vec3 aVertexPosition; 
    attribute vec3 aVertexNormal; 
    attribute vec2 aTextureCoord; 

    uniform mat4 uMVMatrix; 
    uniform mat4 uMV2Matrix; 
    uniform mat4 uPMatrix; 
    uniform mat3 uNMatrix; 

    varying vec2 vTextureCoord; 
    varying vec3 vTransformedNormal; 
    varying vec4 vPosition; 

    void main(void) { 
     gl_Position = uMVMatrix * vec4(aVertexPosition, 1.0); 
     vTextureCoord = aTextureCoord; 
     vTransformedNormal = uNMatrix * aVertexNormal;   
    } 
</script> 

<script id="per-fragment-lighting-fs2" type="x-shader/x-fragment"> 
    precision mediump float; 

    varying vec2 vTextureCoord; 
    varying vec3 vTransformedNormal; 
    varying vec4 vPosition; 

    uniform float uMaterialShininess; 

    uniform vec3 uAmbientColor; 

    uniform vec3 uPointLightingLocation; 
    uniform vec3 uPointLightingSpecularColor; 
    uniform vec3 uPointLightingDiffuseColor; 

    uniform sampler2D uSampler; 

    void main(void) { 
     vec4 fragmentColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)); 
     gl_FragColor = fragmentColor; 
    } 
</script> 

enter image description here

을하지만 쉐이더에 변수를 추가하는 경우는 사용되지 비록 그것이 완전히 결과를 변경 프래그먼트 쉐이더 :

<script id="per-fragment-lighting-vs2" type="x-shader/x-vertex"> 
    attribute vec3 aVertexPosition; 
    attribute vec3 aVertexNormal; 
    attribute vec2 aTextureCoord; 

    uniform mat4 uMVMatrix; 
    uniform mat4 uMV2Matrix; 
    uniform mat4 uPMatrix; 
    uniform mat3 uNMatrix; 

    varying vec2 vTextureCoord; 
    varying vec3 vTransformedNormal; 
    varying vec4 vPosition; 

    void main(void) { 
     gl_Position = uMVMatrix * vec4(aVertexPosition, 1.0); 
     vTextureCoord = aTextureCoord; 
     vTransformedNormal = uNMatrix * aVertexNormal; 
     **vPosition = vec4(1,1,1,1);** 
    } 
</script> 

enter image description here

여기에 무슨 일이 일어나는지 설명해 주시겠습니까?

감사합니다.

+0

glsl2agal을 사용하고 있습니까? – jordancpaul

+0

예,하지만 이미 해결책을 찾았습니다. 나는 대답을 고쳐야한다, 고마워! –

답변

0

glsl2agal의 문제는 정점 및 픽셀 쉐이더에서 변수를 다르게 매핑한다는 것입니다. 예를 들어

: 분명히 질감에 나쁜 출력하지만 좋은 정점의 위치로 이어질

Vertex Shader     
v0 vPosition      
v1 vTextureCoord     
v2 vTransformedNormal 

Fragment Shader 
v1 vPosition 
.... 

.

모든 변수를 다시 매핑하고 생성 된 AGAL 코드를 검색하고 대체해야하는 패치를 수정해야만하는 문제를 해결했습니다.

이제 제대로 작동합니다.