2013-02-12 42 views
0

我想港口此GLSL着色器的Stage3D和AGAL,但我不能让它工作:的Stage3D移植GLSL到AGAL

顶点着色器(GLSL)

attribute vec3 aVertexPosition; 
    attribute vec4 aVertexColor; 

    uniform mat4 uMVMatrix; 
    uniform mat4 uPMatrix; 

    varying vec4 vColor; 

    void main(void) { 
     gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); 
     vColor = aVertexColor; 
    } 

片段着色器(GLSL)

precision mediump float; 

    varying vec4 vColor; 

    void main(void) { 
     gl_FragColor = vColor; 
    } 

具有作为结果:

顶点着色器(AGAL)

mov vt0.w, vc0.x 
mov vt0.xyz, va0.xyz 

mov vt1.xyzw, vc1 
mul vt5.xyzw, vt1, vc5 
m44 op.xyzw, vt0.xyzw, vt5 
mov v0.xyzw, va1.xyzw 

片段着色器(AGAL)

mov oc.xyzw, v0.xyzw 

这是我执行指令的跟踪:

(setVertexBufferAt) va0 3 0 
(setVertexBufferAt) va1 4 3 
(identity setProgramConstantsFromMatrix): vc0 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 
(setProgramConstantsFromMatrix) vc1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,-2,1 
(setProgramConstantsFromMatrix) vc5 1.81066,0,0,0,0,2.4142136573791504,0,0,0,0,-1.0020020008087158,-1,0,0,-0.20020020008087158,0 
render drawTriangles + present 

但我仍无法看到任何东西。

更新: 显然,问题在于三角形被裁剪。乘法数组上的值大于1.0,这使得它们被裁剪掉。所以,我需要找到一种方法来归一化矩阵或哟延长剪裁

什么建议吗?

+0

两个想法:1,如果你从矩阵寄存器访问去掉了“.xyzw”会发生什么? 2. va0中没有z分量。它看起来只有一个x和一个y(基于你的踪迹)。它是否正确? – bwroga 2013-02-12 22:07:08

+0

@bwroga我刚发现一个可能的原因。 – 2013-02-14 17:35:59

回答