Matrix3D - appendTranslation,appendRotation

Matrix3D - appendTranslation, appendRotation

谁能用清楚的例子解释一下Matrix3D的appendRotation、appendTranslation函数?

The manual on Matrix3D

Performing complex 3D transformations

基本上,解释将推导出三维正交基在具有固定基的3D space中的变换。每个变换都可以看作是变换的组合,并且可以(技术上)拆分为一系列缩放、旋转和平移变换。顺序很重要。

每个 "simple" 变换,无论是旋转、缩放、平移还是透视,都由 AS3 中称为 Matrix3D 的 4x4 矩阵描述。二维变换可以参考Matrix,因为底层原理是一样的。还有 "zero transformation" 矩阵,也称为 "identity matrix",它描述了任何地方都没有移动的变换,它看起来像这样:

[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 的矩阵如下所示:

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

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

绕X轴旋转:

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

绕Y轴旋转:

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

绕Z轴旋转:

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

通过 appendXXX 函数添加所有需要的矩阵后,您的矩阵将包含与完整转换相对应的值。

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