1

如何移动这样的计算:

var a : Matrix3D = ...
var b : Matrix3D = ...
a.append( b );

在着色器中?

我目前的做法:

setProgramConstantsFromMatrix( VERTEX, 0, a, true );
setProgramConstantsFromMatrix( VERTEX, 4, b, true );


"mov vt0, vc0\n" + 
"mov vt1, vc1\n" + 
"mov vt2, vc2\n" + 
"mov vt3, vc3\n" + 
"m44 vt4, vc4, vt0\n"

在 vt4 中产生错误的结果。我究竟做错了什么?

4

1 回答 1

0

在着色器中,您不需要分配 vt1、2 和 3。着色器将“知道”它正在发送一个矩阵并自动加载以下 3 个寄存器(总共 4 个寄存器)以及所需的详细信息。自己加载它们可能会导致不可预测的结果。
另请注意,您应用 matrix3D 乘法的顺序很重要。在 AS3 中还有 prepend 方法,它将 matrix3D 参数放在乘法的右侧。append 方法将 matrix3D 参数放在乘法的左侧。然后,您可能需要颠倒您应用 m44 的顺序。IE; 您可以将 vt1 设置为 b,然后将 (m44) 乘以 a。

于 2014-01-28T09:56:16.073 回答