前回のエントリまででモデルしか表示できていなかったけども、今回はテクスチャに対応した。
あとは、しくみを変更して高速化した。
これでMMDを扱うための最低限の機能は実装できたはず。
とりあえずモデルを表示するという意味合いでは。
(このブログエントリ書き始めてから気づいたけど、ボーンとかスフィアの実装がマダだった。。。)
というわけでソースコード。
ためしに前回のブログのエントリでお借りしたモデルをテクスチャ張ったときのスクリーンショット。
ここまでできたなら、そろそろ色々なことに使えそう。
やっとやりたいことを実現するための土台が整ったので、色々とやっていきたい。
(とは言いつつも、次はモーションデータの解析と実装になりそうだけども。)
ひとまず実装できたので満足。
詰まったところ
かなり手こずった。
- glVertexPointer, glNormalPointer系の関数にデータ列を渡す時に、モデルデータフォーマットから頂点、法線、テクスチャUV座標を分離するコード書くのがめんどくさかった。
- glVertex3を使うのをやめて、glVertexPointerとglDrawElementsを使うようにしたとき、glBegin/glEndを消し忘れて、何も表示されなくなって手間取った。
- あと、EnableClientStateとか忘れてると落ちたり、EnableClientStateしててもポインタをセットしてないと落ちるとか。
- テクスチャの座標がおかしかった現象の解析に手間取った。DirectXとOpenGLで座標系が違う罠。