Matrix3D - appendTranslation,appendRotation

时间:2015-07-03 10:34:32

标签: actionscript-3 flex flex4

任何人都可以通过明确的例子解释有关appendRotation,追加Matrix3D的翻译函数的问题吗?

1 个答案:

答案 0 :(得分:0)

The manual on Matrix3D

Performing complex 3D transformations

基本上,该解释将导致在具有固定基础的3D空间中的三维正交基的变换。每个变换都可以被视为变换的组合,并且可以(技术上)分成一系列的缩放,旋转和平移变换。顺序的顺序很重要。

每个"简单"转换,无论是旋转,缩放,平移还是透视,都由AS3中称为Matrix3D的4x4矩阵描述。您可以参考Matrix进行2D转换,因为基本原理是相同的。还有零转换"矩阵,也称为"单位矩阵",它描述了在任何地方都没有移动的变换,它看起来像这样:

[1,0,0,0]
[0,1,0,0]
[0,0,1,0]
[0,0,0,1]

因此,当您需要创建转换时,从这个矩阵开始,然后开始将其向右乘以描述预期步骤的各种矩阵。

appendTranslation将矩阵与翻译矩阵相乘,如下所示,其中xyz为参数:

[1,0,0,x]
[0,1,0,y]
[0,0,1,z]
[0,0,0,1]

appendScale&#39}矩阵如下所示:

[xScale,0,     0,     0]
[0,     yScale,0,     0]
[0,     0,     zScale,0]
[0,     0,     0,     1]

appendRotation创建一个矩阵,用于描述axis向量周围的旋转,该向量从变换对象坐标系中的pivotPoint位置开始。转换是为了使枢轴点和轴向量上的所有点保持原位,而其他点逆时针旋转degrees,如果从枢轴点向下看轴。实际示例太重而无法手动计算,但可以构建围绕轴的简单旋转矩阵,它们看起来像这样(cossin代表Math.cos(angle)和{{1分别):

围绕X轴旋转:

Math.sin(angle)

绕Y轴旋转:

[1,0,  0,   0]
[0,cos,-sin,0]
[0,sin,cos, 0]
[0,0,  0,   1]

绕Z轴旋转:

[cos,0,-sin,0]
[0,  1,0,   0]
[sin,0,cos, 0]
[0,  0,0,   1]

通过[cos,-sin,0,0] [sin,cos, 0,0] [0, 0, 1,0] [0, 0, 0,1] 函数添加所有需要的矩阵后,矩阵将包含与完整转换相对应的值。

这个topis需要额外的阅读,其中很多,here是书籍和3D转换教程的一些链接。