読者です 読者をやめる 読者になる 読者になる

catalinaの備忘録

ソフトウェアやハードウェアの備忘録。後で逆引きできるように。

openGLでMMDモデルを表示する

C++ MMD openGL

前回のエントリまででモデルしか表示できていなかったけども、今回はテクスチャに対応した。

あとは、しくみを変更して高速化した。

これでMMDを扱うための最低限の機能は実装できたはず。

とりあえずモデルを表示するという意味合いでは。

(このブログエントリ書き始めてから気づいたけど、ボーンとかスフィアの実装がマダだった。。。)

 

というわけでソースコード

javoren/mmdview · GitHub

 

動作確認した環境は、VMWare上のCentOS

ためしに前回のブログのエントリでお借りしたモデルをテクスチャ張ったときのスクリーンショット

f:id:Catalina1344:20141019005445p:plain

ここまでできたなら、そろそろ色々なことに使えそう。

やっとやりたいことを実現するための土台が整ったので、色々とやっていきたい。

(とは言いつつも、次はモーションデータの解析と実装になりそうだけども。)

 

ひとまず実装できたので満足。

 

詰まったところ

かなり手こずった。

  • glVertexPointer, glNormalPointer系の関数にデータ列を渡す時に、モデルデータフォーマットから頂点、法線、テクスチャUV座標を分離するコード書くのがめんどくさかった。
  • glVertex3を使うのをやめて、glVertexPointerとglDrawElementsを使うようにしたとき、glBegin/glEndを消し忘れて、何も表示されなくなって手間取った。
  • あと、EnableClientStateとか忘れてると落ちたり、EnableClientStateしててもポインタをセットしてないと落ちるとか。
  • テクスチャの座標がおかしかった現象の解析に手間取った。DirectXOpenGLで座標系が違う罠。