CATransform3D行/列顺序

时间:2011-02-07 04:02:52

标签: core-animation catransform3d

我对CATransform3D结构的矩阵行/列顺序有点困惑。结构定义了这样的矩阵:

[m11 m12 m13 m14]
[m21 m22 m23 m24]
[m31 m32 m33 m34]
[m41 m42 m43 m44]

首先,似乎值定义行(因此[m11 m12 m13 m14]形成第一行),但是当您通过(tx,ty,tz)创建转换矩阵时,矩阵看起来像这样:

[ 1  0  0  0]
[ 0  1  0  0]
[ 0  0  1  0]
[tx ty tz  1]

我的困惑来自于这不是一个有效的翻译矩阵;将它与4元素列向量相乘将不会转换该点。

我的猜测是CATransform3D结构以列顺序存储值,因此值[m11 m12 m13 m14]构成第一列(而不是第一行)。

任何人都可以确认吗?

2 个答案:

答案 0 :(得分:5)

是的,CATransform3D是列主要顺序,因为这是OpenGL(ES)想要它的方式。 Core Animation在后台使用GL进行渲染。如果您需要校样,请查看man的{​​{1}}页面:

  

<强>参数

     

m 指向16个连续值,用作4 x 4列主矩阵的元素.16个连续值,用作4 x 4列主矩阵的元素

这在glMultMatrix的文档中应该更加明确。

答案 1 :(得分:3)

您的初步解释是正确的; CATransform3D确定了以下矩阵:

[m11 m12 m13 m14]
[m21 m22 m23 m24]
[m31 m32 m33 m34]
[m41 m42 m43 m44]

是的,尽管它可能令人困惑(如果您习惯于预先乘以变换矩阵),这会产生转换矩阵:

[ 1  0  0  0]
[ 0  1  0  0]
[ 0  0  1  0]
[tx ty tz  1]

请参阅Figure 1-8 in the "Core Animation Programming Guide"

如果你后乘你的变换矩阵,这个 是一个有效的变换矩阵,这就是Apple在Core Animation中的作用(参见同一指南中的图1-7) ,虽然要注意方程式缺少转置操作。)