2013年11月16日土曜日

TPでboidsをセットアップしてみる。その7 シェイプの向き解決?

さて、色々調べ物して更新までに時間がかかった。
前回、シェイプのある軸がフリップする現象に悩まされた。
色々探ったが、もうわからんので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は、色々勉強になるので、まだまだ探って行きたいと思います。