0

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

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

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

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

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

我的问题可以概括为我对正确的矩阵运算的无知。我相信我合并这两种环境的失败尝试正是因为将一个矩阵附加到另一个矩阵的语义不是,也绝不打算等同于将该矩阵附加到另一个矩阵。那么,我的要求可以这样概括。因为我无法控制框架将发出的调用顺序,例如,我必须接受追加操作,所以我只能尝试在准备要追加的矩阵的一侧修复问题。该代码不是黑盒代码,但它太复杂了,我不知道如何更改它以满足框架提出的接口要求。

是否有一些倒置、转换或其他操作序列可以让我修改设计为预先添加的 viewProjection 矩阵,以便它在添加到对象的世界空间坐标时正确显示?

4

1 回答 1

1

我提供的答案更多是出于绝望而不是肯定的理解,并且仍然希望我能从那些更有知识的人那里得到更好的答案。从 Dunn 和 Parberry 的“3D Math Primer”中,我了解到“转置两个矩阵的乘积与以相反的顺序取它们的转置乘积相同”。

由于无法理解如何输入涉及上标的文本,我不确定是否可以将我的方法简化为有用的数学公式,因此我将发明一种使用函数符号的语法。Dunn 和 Parberry 指出的等效性类似于:

AB = transpose (B) x transpose (A)

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

我还没有完成对我的解决方案的测试,这需要在 AGAL 着色器中执行最后一步,但我已经能够在 AS3 中确认最后一个“取消转换”确实产生了与来自相机作者的示例,具有所需的镜头属性,其实现涉及前置而不是附加。

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

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

于 2013-07-10T20:10:43.310 回答