カメラの移動方法を調べていたら、そのものずばりの MSDN キューブ アニメーションのデモ を発見。これを組み込めば簡単に視点の変更ができる。
おお、もうひとりのおやじもこれを組み込んだのね。さすがだ。
と思い、デモソフトの Trackball.cs のコードをながめてみたら・・・外積を使っている?と不思議に思い、ソースを読んでみた。
次の図のようにマウスで左から右へドラッグし、ミクを中心にカメラを右方向に動かす場合、Y軸を中心にカメラを右方向に回転させることになります。では、どのようにY軸を中心にと判断しているかというと、カメラの視線ベクトルとカメラの移動ベクトルの外積から回転軸を求めています。外積を使えば、マウスの移動角度に応じて、斜めに回転する回転軸も簡単に求めることができます。
なるほど・・・外積ってこういう利用方法があるだぁ・・・と感動。ちなみに下が外積を簡単に説明した図。なつかしい・・・
と、さらに ソースを読んでいったところ、回転軸が求まったところで、クオータニオンの計算があり、意味不明 orz。クオータニオン自体初めて耳にするが、3D-CG をする人たちには常識らしい。ところが、にわか ミク3D野郎には難しすぎる・・・
ということで、次の資料があったので、一から勉強中。
http://www-sens.sys.es.osaka-u.ac.jp/users/kanaya/Documents/VCQ/kanaya-handai-quaternion.pdf
まさか、この歳でエルミート行列、オイラー角、テンソル、などなどと、どこかで聞いたことのあることをもう一度ひっくり返すことになるとは・・・・。一通り読んでみたのだが、外積、内積なら、物理的な意味が直感的にわかるのだが、クオータニオン同士の積の物理的な意味が直感的にわからない。ミクをグリングリン回すのにも、修行が足りない orz。
ちなみにクオータニオン(超複素数 or 四元数)は、大学では習わなかった。当時、3Dグラフィックスはなかったので w。
クオータニオンの数式を追ってみましたが、難しいですねぇ w
金谷さんの資料には、クオータニオンの積=2つの回転の合成と説明があるのですが、平面図から3次元の動きを読み解けないのと、数式もわけわからないので、簡単な解説書があるとうれしいのですが・・・
でも、3D CG やるにはこれを理解しておく必要があるみたいですね。お題が初音ミクでなければ、めげていました w