頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Blenderで表示されるクォータニオンをOpenGL ESで使う

Blenderの -Z Forward , Y Up の設定
↑Blenderで3Dのモデルを作成してそれをiOSアプリのOpenGL ESで使う場合に座標系が微妙に違うけどBlenderの出力時の設定でうまくいってる、というのをここで書いたんだけどさ。
こういうのがあるってのを頭の片隅に置いといて、、、

物体の姿勢をオイラー角じゃなくてクォータニオンで表す方がなにかと具合がいいので、OpenGL ES側ではクォータニオンだけ使うようにしてる。
この時、例えば物体の初期の姿勢を設定する時にクォータニオンで設定しておく、というのをしようとしたのよ。

Blenderで姿勢(角度)がどのように表されてるかを確認すると

Blenderでの姿勢(オイラー角)

↑多分デフォルトだとXYZ Eulerになってるのかな。オイラー角になってるはず。
この部分選択できるようになってて、Quaternion (WXYZ)ってのに変えると

Blenderでの姿勢(クォータニオン)

↑クォータニオンの4つの数字が出てくる。ありがたいじゃない!
この数字、OpenGL ESでそのまま使えるのかな?と思って試してみたのよ。

例えばBlenderでのy軸まわりに回転させてみる。

Blenderで回転

↑真正面から見るとこんなのね。

この時のクォータニオンは図にあるように ( 0.0 , 0.259 , 0.0 ; 0.966 ) ね。

OpenGL ES (iOS)で物体の姿勢としてこのクォータニオンを設定すると

OpenGL ES(iOS)で回転

↑あら?期待してたのと違う?
確かにy軸まわりに回転してることはしてるんだけどね。
そうかあ、Blenderで表示されるクォータニオンのままだとこうなっちゃうから何か補正が必要なんだな。

ということで、

90度回転でうつ伏せ

↑オブジェクトを90度回転。これでBlenderと同じようにy軸がロボットのおなかに垂直になる。

60度回転
↑ちょっとわかりにくいので60度回転させた図がこれ。うつ伏せになってる。

クォータニオン適応時

↑うつ伏せの状態でクォータニオン( 0.0 , 0.259 , 0.0 ; 0.966 )による回転を適用するとこうなる。

90度戻した場合

↑元に戻して(-90度回転)完了。

こういう補正をすればとりあえず、Blenderで表示されるクォータニオンを使えることはわかった。
まあ一手間増えるけど、かといってBlenderでy軸を上にしてモデルを作成したり動かしたりするのがなんともやりづらかったのでこの方法でいくわ。

<< GLKMatrix4からsimd::float4x4への変換  TopPage  iPhoneをリセットしてもiOSのバージョンは変わらなかった >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/934-23c197c5




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad