使用Actionscript Matrix3D进行矩阵级联

时间:2013-07-09 06:14:33

标签: actionscript stage3d agal

我希望从Stage3D框架获得正确渲染的投影结果,该框架通过其API呈现“灰盒子”界面。它是灰色而不是黑色,因为我可以看到这个关键的源代码片段:

matrix3D.copyFrom (renderable.getRenderSceneTransform (camera));
matrix3D.append (viewProjection);

完全符合我需求的投影渲染技术来自一个直接与AGAL而不是任何特定框架一起工作的有用教程。其可比较的渲染逻辑片段如下所示:

cube.mat.copyToMatrix3D (drawMatrix);
drawMatrix.prepend (worldToClip);

所以,我相信这里正在发生的事情的正确概括是两段代码都设置了适当的组合矩阵以发送到顶点着色器,其中该矩阵将成为m44 AGAL操作的参数。一般描述是组合矩阵将把我们从对象局部空间通过相机视图空间带到屏幕或剪辑空间。

我的问题可以概括为由于我对正确的矩阵运算的无知。我相信我合并这两种环境的失败尝试恰恰是因为将一个矩阵前置到另一个矩阵的语义不是,而且从来没有打算过,相当于将该矩阵附加到另一个矩阵。那么,我的要求可以用这种方式概括。因为我无法控制框架将发出的调用序列,例如,我必须使用追加操作,我只能尝试修复我准备要附加的矩阵的那一部分。该代码不是黑盒子,但对于我来说,知道如何更改它以使其满足框架提出的接口要求对我来说太复杂了。

是否有一些反转,变换或其他装配的序列可以让我修改一个设计为前置的viewProjection矩阵,这样当它被附加到Object的World Space坐标时它会向右转?

1 个答案:

答案 0 :(得分:1)

我提供的答案更多的是绝望而不是肯定的理解,并且仍然希望我会从那些知识渊博的人那里得到更好的答案。从Dunn和Parberry的“3D数学入门”中我了解到“将两个矩阵的乘积转换为以相反的顺序对其转置的乘积进行转换。”

如果不能理解如何输入涉及上标的文本,我不确定我是否可以减少我的方法以获得有用的数学公式,因此我将使用功能表示法创建语法。 Dunn和Parberry注意到的等价物如下:

AB = transpose (B) x transpose (A)

接近于解决我的问题,重述哪个问题实际上只是由于我无法控制框架包中内部矩阵操作的行为而引起的问题。但是,我可以在工作流程的任何一侧执行适当的矩阵运算,从本地对象坐标到GPU顶点着色器所需的那些。

我还没有完成我的解决方案的测试,这需要在AGAL着色器中进行最后一步,但我已经能够在AS3中确认最后一次'un-transform'确实产生完全相同的组合原始数据作为相机作者的例子,具有所需的镜头属性,其实现涉及前置而不是附加。

BA = transpose (transpose (A) x transpose (B))

我还没有测试过,看看这些额外的计算是否如此处理密集,以至于我的应用程序帧速率降低到超出可接受范围的程度,但我很高兴至少能够确认计算产生相同的结果。 / p>