前回、シェイプのある軸がフリップする現象に悩まされた。
色々探ったが、もうわからんのでCGTalkで質問したら、Hrist氏より「Just don't use the Z axis」とコメント頂いた。
--------------------
2013/11/18更新
Hrist氏
It's complicated, and I don't really understand 3D rotations completely, but let's try. When you define a rotation by one vector, say, the direction of travel, that's not actually enough information to align the particle. So it just assumes one more direction (up), and then gets the third by vector cross product of the two. And it might flip because at some point in rotating it the 'up' gets wrong because of the assumed second vector :)
っていうコメント追加でいただいたけど、、?
ちゃんとした方向を設定するには軌道方向( direction of travel)では、情報が少ない。だからクロスベクトルを必要とする。クロスベクトルは任意の仮定したベクトルから作ってやる。
問題点として、クロスベクトルを得る際に、仮定した二つ目のベクトルが元の方向( direction of travel)と重なった場合にフリップは起こるという事だと解釈。
なので、重ならないようになるべくすることが必要。くるくる回転されたらいつか重なるのは回避できない。
こういうときはクオータニオン??ただ整列させるだけには使わないのかな。整列+回転がクオータニオンの出番といったところか。
---------------
あーこれジンバルロックという事かな?
Alignmentの軸をx axisにすると思い通りの結果になった。
画質悪くてわかりづらいと思うが、意図した方向にお魚が向いている。
しかし、ゴールなしでこんな風にboidを放てばどっかでジンバルロックが起きるはず。。。
その解決法はクオータニオン??
謎は深まるばかりorz
とりあえず、一旦締めということでムービーでも作ろうかな。
でもboidは、色々勉強になるので、まだまだ探って行きたいと思います。
0 件のコメント:
コメントを投稿