我对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]构成第一列(而不是第一行)。
任何人都可以确认吗?
答案 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) ,虽然要注意方程式缺少转置操作。)