CATransform3D行/列顺序

Mar*_*ote 5 core-animation catransform3d

关于CATransform3D结构的矩阵行/列顺序,我有点困惑.结构定义了这样的矩阵:

[m11 m12 m13 m14]
[m21 m22 m23 m24]
[m31 m32 m33 m34]
[m41 m42 m43 m44]
Run Code Online (Sandbox Code Playgroud)

首先,似乎值定义行(因此[m11 m12 m13 m14]形成第一行),但是当您通过(tx,ty,tz)创建转换矩阵时,矩阵将如下所示:

[ 1  0  0  0]
[ 0  1  0  0]
[ 0  0  1  0]
[tx ty tz  1]
Run Code Online (Sandbox Code Playgroud)

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

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

谁能确认一下?

Nat*_*ror 5

是的,CATransform3D是列主要顺序,因为这是OpenGL(ES)想要的.Core Animation在后台使用GL进行渲染.如果您需要证明,请查看以下man页面glMultMatrix:

参数

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

这在文档中应该更清楚CALayer.