2011-02-07 16 views
3

CATransform3D構造体の行列の行/列の順番について少し混乱します。値が(その結果、[M11、M12、M13、M14]は第1行目)が、もしによる翻訳マトリックスを作成するときに(行を定義することを思わ、まずCATransform3D行/列の順序

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

:構造体は、このような行列を定義しますTX、TY、TZ)、行列は次のようになります。

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

私の混乱が、これは有効な変換行列ではないという事実から来ています。それを4要素の列ベクトルに掛けても、その点は翻訳されません。

私の推測では、値[m11 m12 m13 m14]が最初の列(最初の行ではない)を形成するように、CATransform3D構造体が値を列順に格納すると考えられます。

誰でも確認することができますか?

答えて

4

はい、CATransform3Dは、OpenGL(ES)がそれを望んでいるので、列の主要な順序です。コアアニメーションは、レンダリングのためにバックグラウンドでGLを使用します。 4×4列優先行列の要素として使用されている16の連続値に

パラメータ

メートルポイント:あなたが証明をしたい場合は、glMultMatrixためmanページをチェックしてください。 4 x 4列主要行列の要素として使用される16個の連続する値。

これは、CALayerのドキュメントで実際にはっきりしているはずです。

+0

いいえ、そうではありません。 https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreAnimation_guide/CoreAnimationBasics/CoreAnimationBasics.html#//apple_ref/doc/uid/TP40004514-CH2-SW16 – idz

+0

@idzリンクを参照してくださいいう?それは列の主要な仮定を否定するようには見えない。 –

+0

@ xi.lin図1-8を参照してください。変換は行の長さとして解釈されます。 – idz

2

最初の解釈は正しいです。 CATransform3Dは、以下の行列を定義します:

[ 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"を参照してください。(あなたは変換行列、乗算事前に使用されている場合)、それは混乱してもよいが、そう

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

をそして、これは平行移動行列を生成します。あなたはポスト乗算あなたのAppleはCore Animationの(式操作を転置不足している用心ものの、同ガイドでは、図1-7を参照して何をするかである、行列を変換する場合、この

有効な変換行列であります)。