2011-03-28 113 views
3

我想了解小题大做,想多一个顶点由两个矩阵,说:Molehill的着色器

output = theVertex * scaleMatrix * rotationMatrix 

即时猜测我的顶点着色器看起来是这样的:

"m44 vt0, va0, vc0\n" + 
"mul op, vt0, vc1\n"; 

而且我会设置矩阵

context3d.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, scaleMatrix); 
context3d.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 1, rotationMatrix); 

但它不工作。我究竟做错了什么?

我意识到我可以在着色器之前多个矩阵,但我想了解AGAL。

干杯

回答

4

m44矩阵为4×4浮筒,它需要4个寄存器为每个寄存器是128位(4个浮子)所以你要你的旋转矩阵加载到VC4寄存器:

"m44 vt0, va0, vc0\n" + 
"mul op, vt0, vc4\n"; 

context3d.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, scaleMatrix); 
context3d.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 4, rotationMatrix); 
+0

太棒了,谢谢一堆。 – user346443 2011-03-28 07:26:09

+1

第二条指令不应该是'm44'吗? – 2011-06-10 16:01:07

+0

第二条指令也应该是m44。并且,根据您构建矩阵的方式,在大多数情况下,您可能想要将setProgramConstantsFromMatrix的最后一个“转置”参数设置为true。 – starmole 2011-08-29 08:29:53