2017-03-23 14 views

答えて

4

変換、スケーリング、回転、斜行、およびパースペクティブを含む4 x 4マトリックスを使用して、さまざまな3D変換を表現できます。

個々の変換を表す行列を掛け合わせることで、1つの行列に複数の連続する変換を表すことができます。

CATransform3DMakeRotationは、単一の変換を表す行列を作成します。つまり、与えられた軸を中心に所定の角度だけ回転します。

CATransform3DRotateは、CATransform3DMakeRotationのように行列を作成し、その行列に別の行列を乗算して、回転を既存の変換シーケンスに追加します。

あなたは本当にどちらか一方しか必要としません。あなたが持っている場合、あなたは簡単に他を定義することができます。

あなたはこのようCATransform3DMakeRotationを使用してCATransform3DRotateを書き込むことができます。

func CATransform3DRotate(_ t: CATransform3D, _ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D { 
    let rotation = CATransform3DMakeRotation(angle, x, y, z) 
    return CATransform3DConcat(rotation, t) 
} 

CATransform3DConcatは二つの行列の積を返します。

それとも、このようなCATransform3DRotateを使用してCATransform3DMakeRotationを書き込むことができます。

func myCATransform3DMakeRotation(_ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D { 
    return CATransform3DRotate(CATransform3DIdentity, angle, x, y, z) 
} 

CATransform3DIdentityは単位行列である、とまったく変換を表すありません。

変換行列、その構築方法と組み合わせ方法、3D変換に4x4行列が必要な理由について詳しく知りたい場合は、好きな検索エンジンにhomogeneous coordinates 3dと入力してください。

2

CATransform3DMakeRotationは、新しいトランスフォームを作成します。

CATransform3DRotateは、既存のトランスフォームを受け取り、それをローテーションします。

回転させようとしているのであれば、まったく違うことはありません。しかし、縮尺を変えて回転させて翻訳しなければならない場合は、最後まで差が出る可能性があります。

関連する問題