一,Matrix3D表示的矩阵是按行表示的(某一轴的变换是按行表示的 ) 1. 正常情况下矩阵按列表示,如下: scaleX 0 0 0 0 scaleY 0 0 0 0 scaleZ 0 tx tY tZ tW 此时,先进行A矩阵变换再进行B矩阵变换,表示如下: 总变换 = A * B 2. 仔细看Matrix3D的表示图,它与一般矩阵的按列表示不同,它是按行表示的,如下图:
总变换 = B * A 为什么这里矩阵相乘是后置一个矩阵呢,因为这样运算后,才能保证与正常情况下矩阵运算结果一样(运算的行列才能对应),随便列2个矩阵试下就知道了。 所以就是为什么Matrix3D.append( )函数的表示如下: public function append(lhs:Matrix3D):void 在使用 append() 方法时,乘法运算将从左侧开始,这意味着 lhs Matrix3D 对象位于乘法运算符的左侧。 thisMatrix = lhs * thisMatrix; 二,Matrix3D实际存储的是上图的转置矩阵。 Matrix3D对矩阵的表示与存储是2种不同的方式,有什么区别呢? 1. 表示的方式:决定了在实际运算时,是按后置矩阵运算的。 2. 存储的方式:决定了数据的存储顺序,如果存储与表示的顺序不同,则在使用前要做相关的操作。 存储的方式不一定非要跟表示的方式一样,比如Matrix3D中存储与表示是颠倒的,所以使用前要将存储的结构转置一下。这就是为什么在上传常矩阵时最后一个参数要设为true(上传时先转置). m_kContext3D.setProgramConstantsFromMatrix( Context3DProgramType.VERTEX, 0, m_matFinal, true ); |
关于Stage3D中Matrix3D
最新推荐文章于 2024-07-23 11:46:27 发布