web-dev-qa-db-ja.com

CATransform3Dをよりよく簡単に理解する必要があります

画像をご覧ください。

Initial PositionAfter Rotation

つまり、これは私がオンラインソースから取得したコードであり、オブジェクトを変換します。それ以外は何も分かりませんでした。私はCATransform3Dを初めて使用し、それがどのように機能するかを正確に知りたいと思っています。

CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -500;
transform = CATransform3DRotate(transform, 45.0f * M_PI / 180.0f, 0, 1, 0.0f);
_bgView.layer.transform = transform;

このコードがどのように実行されたか知りたいですか?なぜm34に値を設定したのですか?私はそれが私をさらに混乱させるある種のマトリックスであることに気づきました。また、CATransform3DRotateの引数はどういう意味ですか?

私は理解しようとしていますが、それ以上は得られません。

CATransform3Dを深く理解したい。記事、ドキュメント、または自分自身を説明することで助けてください。

どうもありがとう。

20
mayuur

何なのかわからないm34は見ていません。

必要なのは回転する角度だけなので、2D回転は簡単です。次に、回転はZ軸(つまり、画面の外を直接指す軸)の周りで行われます。

3D回転は異なります。角度が必要ですが、回転している1つまたは複数の軸を知る必要もあります。

CATransform3DRotateあなたはそれに5つのパラメータを与えます...

  1. 回転を適用する変換。
  2. 角度(ラジアン)πラジアン= 180度3、4、および5は、各軸に適用する回転角の量です。

  3. X軸-これは、画面の左側から画面の右側に向かう軸です。

  4. Y軸-これは、画面の上部から画面の下部に向かう軸です。
  5. Z軸-これは、画面から直接手前を指す軸です。

例で適用した回転は次のとおりです...

角度= 45度(ラジアンに変換)。 X = 0 Y = 1 Z = 0

これは、45度すべてがY軸を中心に回転することを意味します。つまり、中央を下る線の周りを回転ドアのように回転します。

最後にパラメータ...「1、0、0」がある場合は、外輪船のように回転します。 「あなたから離れていく。」

最後に、「0、0、1」がある場合、画面上でキャサリンホイールのように回転します。

値を組み合わせて、「0、1、1」を指定して、2つの軸を中心に回転を適用することもできます。

行列のw行は透視投影です。学校で、ドットを配置してドットから線を引き、それらの線に合わせて遠近法を描くような遠近法を描いたことはありますか? m34値は、そのドットが配置される場所を決定するため、遠近法を提供します。 -50のように設定すると、より大きな違いがわかります。

M34の設定は、このポイントのZ軸の値に関連しています。したがって、ポイントは(0、0、-1/500)に配置されます。

33
Fogmeister

_m34_値は、3行4列目であり、実際に回転の視点を与える変換の背後にあるマトリックス内の値です。

行列乗算の背後にある数学について詳しくは、ウィキペディアをご覧ください。

CATransform3DRotate(...)の値について。

  • 最初の引数は、回転している変換です
  • 2番目は角度(ラジアン)です。
  • 他の3つの引数は、回転している軸((x、y、z)ベクトル)です。
9

これがSwift https://github.com/paulz/PerspectiveTransform の私のプロジェクトで、CATransform3Dの計算に役立ち、サンプルアプリと遊び場が含まれています。

animated transformation

cALayer変換プロパティをアニメーション化するために使用できます。

fitted polygon

マトリックスの作成とその他の可能な解決策の詳細については、wiki: https://github.com/paulz/PerspectiveTransform/wiki を参照してください。

matrix calculation

この質問をありがとう、それは私がその問題を抱えているだけでなく、私のプロジェクトを始めるのを助けました!

4
Paul Zabelin