5

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] が最初の列 (最初の行ではなく) を形成します。

誰でも確認できますか?

4

2 に答える 2

5

はい、CATransform3DOpenGL(ES)が望んでいるため、列の優先順になっています。Core Animation は、レンダリングのバックグラウンドで GL を使用します。証明が必要な場合は、次のmanページをご覧くださいglMultMatrix

パラメーター

m 4 x 4 列優先の行列の要素として使用される 16 個の連続する値を指します。4 x 4 列優先の行列の要素として使用される 16 個の連続する値。

これは、 のドキュメントでより明確になるはずですCALayer

于 2011-02-10T20:28:48.757 に答える
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]

『コア アニメーション プログラミング ガイド』の図 1-8 を参照してください。

これは、Apple がコア アニメーションで行っている変換行列を事後乗算する場合に有効な変換行列です(同じガイドの図 1-7 を参照してください。ただし、式には転置操作がないことに注意してください)。

于 2013-05-07T18:17:39.913 に答える