主なコンテンツ

〜主なコンテンツ〜

1. Unityで製作したゲームと製作Tips
  1. 三月精チャレンジ(東方Project二次創作)
    1. 作り方
  2. 英語学習2D(オリジナルスマホアプリ)
2. UE4
3. ゲームアプリ見学
4. Bitbucket & SourceTreeでの一連の流れ
  1. 前半
  2. 後半
5. Tips
  1. UnityのTips
  5. SQL文のTips
  6. Final IK
  7. GearVR+Unity

2016年2月21日日曜日

Quaternionの基礎理解

  • 結論:角度の概念が直感的でないため、ベクトルに回転を与える場合はQuaternionかTransformの関数を使ったほうが良い
  • Quaternionは3次元空間上のある点(x,y,z)を、任意軸任意角で回転させるもの。(参考
  • Unityのtransform.rotationの(x,y,z) は任意軸のパラメータで合っている模様
    • (1, 0, 0)に対し、w=0のとき角度は0°
    • (1, 0, 0)に対し、w=0のとき角度は90°(*このときインスペクター上でのRotationのYとZが180から0に切り替わる)
    • (1, 0, 0)に対し、w=無限大のとき角度は180°に近似
    • 任意軸を正規化しないことで柔軟に角度が変えられる
    • 実際、UpdateでDebug.Log(transform.rotation)をしてみると、xz平面で水平に回転させてもw以外に任意軸のy成分も変動していることが確認できる。(下の画像はカメラのtransform.rotationを確認したもの)
  • Quaternion同士の掛け算で、角度を加算できる
  • transform.rotation *= Quaternion.AngleAxis(angle, Vector3.up);とした場合、transform.upを軸にangle度回転する(掛けられる側=回転する側の空間に置き換えて、回転が行われる) 打ち消し線をした内容に思われるが、ローカル空間に置き換えたとき真上を向くベクトルを作っても水平な回転にならなかった。仕様不明
  • 任意軸に任意角を回す場合、transform.Rotateを使うと良い。特にワールド空間で回転をさせたい場合に有用。
【追記2017.05.21】
回転行列とクォータニオンの違い(参考

    0 件のコメント:

    コメントを投稿