思いのほか手間取ったけれども、ようやくFK(フォワードキネマティクス)の実装が終わった。
動画を貼り付けておく。
モーションのVMDファイルは、HALのゆうきたん特設サイトからダウンロードした。
モーションキャプチャで作成したもののようで、IK実装はしていないんだけれども、足がちゃんと動いている。
ボーンはキューブで描いた。ボーンの回転がわかるように各面に色をつけている。
何に手間取ったかというと、FKは計算自体はそれほど難しくない。
けれども、ボーンごとにキーフレーム数が異なるし、フレーム間の補完処理なども考慮しなければならないのでデータの持ち方がややこしかった。
結局、C++で動いている過去のソースをC#にまんま移植することにした。
OpenGLでもDirectXでも、同じような仕組みなんだけれども、結局3Dの描画のステップを大雑把に言うとこうなる。
プログラムから、GPU(OpenGLなりDirectXなりを介してアクセスする)に描きたいモデルの頂点情報の配列を流し込む。
GPU側では、流された頂点情報が一点ずつブラフィックスパイプラインを通過していく。
グラフィックスパイプラインの中では、モデルの頂点情報を一点ずつ処理している(概念的にね)。
その処理とはつまり、モデルの一点一点にたいして、複数の変換行列を掛け合わせることで、実際の画面上の特定の位置にその点が描かれる、という仕組みになっている。
重要なのは、頂点一点一点に掛け合わされる変換行列(主にワールド変換行列)を求めることなのだ。
ということは、まあ、ググるなり本を読めば書いてあるようなことなんだけれども、これを実感としてイメージするには、やっぱり自分でプログラミングしてみる他に王道はないのかもしれない。
Javaだけれども、昔読んだこの本は大変勉強になった。