背景
Alternativa3d在3D坐标转换计算时,是用了自己的Transform3D,而没有采用Stage3D自带的Matrix3D。
两者区别
两者均是坐标转换矩阵,区别在于Transform3D只保存了4*3的信息,而Matrix3D可以保存4*4。
Alternativa3d的Object3D里的代码:
/**
* The <code>matrix</code> property represents a transformation matrix that determines the position
* and orientation of an <code>Object3D</code>.
*/
public function get matrix():Matrix3D
{
if (transformChanged)
composeTransforms();
return new Matrix3D(Vector.<Number>([transform.a, transform.e, transform.i, 0, transform.b, transform.f, transform.j, 0, transform.c, transform.g, transform.k, 0, transform.d, transform.h, transform.l, 1]));
}
可以看出两者是可以互相转换的。Transform3D转换后的Matrix3D如下:
a | e | i | 0 |
---|---|---|---|
b | f | j | 0 |
c | g | k | 0 |
d | h | l | 1 |
实际上Transform3D在进行矩阵运算时就是按照这个矩阵来的,只是没有存下最后一个常量列向量。
(d,h,l)
表示
(Δx,Δy,Δz)
。