Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Actionscript Matrix3D进行矩阵连接_Actionscript_Stage3d_Agal - Fatal编程技术网

使用Actionscript Matrix3D进行矩阵连接

使用Actionscript Matrix3D进行矩阵连接,actionscript,stage3d,agal,Actionscript,Stage3d,Agal,我想从Stage3D框架中获得正确渲染的投影结果,该框架通过API呈现出某种“灰盒”接口。它是灰色而不是黑色的,因为我可以看到这段关键的源代码片段: matrix3D.copyFrom (renderable.getRenderSceneTransform (camera)); matrix3D.append (viewProjection); 完全符合我需求的投影渲染技术来自一个有用的教程,该教程直接使用AGAL,而不是任何特定的框架。其可比较的呈现逻辑片段如下所示: cube.mat.co

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

matrix3D.copyFrom (renderable.getRenderSceneTransform (camera));
matrix3D.append (viewProjection);
完全符合我需求的投影渲染技术来自一个有用的教程,该教程直接使用AGAL,而不是任何特定的框架。其可比较的呈现逻辑片段如下所示:

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

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


是否有一系列的反转、变换或其他操作可以让我修改一个预先设计好的视图投影矩阵,这样当它被附加到对象的世界空间坐标时,它就会正确无误?

我提供的答案更多的是出于绝望而非肯定的理解,我仍然希望我能从那些更有知识的人那里得到更好的答案。从Dunn和Parberry的“3D数学入门”中,我了解到“将两个矩阵的乘积进行转置与将其转置的乘积按相反顺序进行转置是一样的。”

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

AB = transpose (B) x transpose (A)
这几乎解决了我的问题,重申一下,这个问题实际上只是一个问题,因为我无法控制框架包中内部矩阵操作的行为。但是,我可以在工作流的任意一侧执行适当的矩阵操作,从本地对象坐标到GPU顶点着色器所需的坐标

我还没有完成解决方案的测试,这需要在AGAL着色器中执行最后一步,但我已经能够在AS3中确认,最后一次“取消转换”确实产生了与相机作者的示例完全相同的组合原始数据,该示例具有所需的镜头属性,其实现涉及预加而不是附加

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

我还没有测试过这些额外的计算是否会占用大量的处理时间,从而将我的应用程序帧速率降低到超出可接受的范围,但我很高兴至少能够确认计算会产生相同的结果。

您使用的框架是away3d还是简单的变体minimole?也许你也可以描述一下你正在尝试做什么…听起来你在做框架没有提供内置功能的事情-这可能表明你做得不正确。是的,杰克逊·邓斯坦(Jackson Dunstan)在他精彩的教程演示中使用的Camera3D是Away3d的4.1版,我试图将其与之结合的框架。正如我在答复中指出的那样,我确实通过执行转置操作的转置成功地进行了必要的更改。谢谢你的跟进。我也学到了一些可能有用的信息。CPU端和GPU端的操作足够快,因此FPS速率没有损失。我现在明白了邓斯坦相机之所以“与众不同”,是因为他选择实现右手相机/镜头空间,而不是大多数示例从com.adobe.utils.PerspectiveMatrix3D类借用的左手相机/镜头空间。有了这个额外的解释,也许对于如何在两者之间修改/适应有更好的建议——这似乎不仅仅是一个反转.z方向符号的问题。不,这不是一个微不足道的问题。我以mnimole和away3d为灵感,基于左手坐标系构建了一个完整的3D引擎。有一些重要的函数需要修改以供左手使用,例如lookAt命令。此外,您还必须修改相机/镜头投影矩阵-这需要一些数学知识。我强烈推荐Eric Lengyel的“3D游戏编程和计算机图形学数学”。第四章有你需要的所有答案!