そこそこ前に作り始めたものですが...
MMDPI
公開中です。
https://github.com/shirobu2400/mmdpi
こんな感じのことができる。
使い方(ビューア)
mmdpiv -p "モデルパス" -v "モーションパス"
メソッド群(C++ ライブラリ)
int mmdpi::load( const char* model_name ) | モデルファイル(.pmd, .pmx)の読み込み(PATH で指定) |
int mmdpi::vmd_load( const char* file_name ) | モーションファイル(.vmd)の読み込み(PATH で指定) |
void mmdpi::draw( void ) | 表示 |
void mmdpi::set_bone_matrix( uint bone_index, mmdpiMatrix& matrix ) | 指定されたボーンのindexと対応するボーンの姿勢行列を matrix で上書き。 |
void mmdpi::set_bone_matrix( const char* bone_name, mmdpiMatrix& matrix ) | 指定されたボーンの名と対応するボーンの姿勢行列を matrix で上書き。 |
mmdpiVmd* mmdpi::get_vmd( int index ) | vmd情報の取得。indexはvmdを複数読み込んだうちの読み込んだ順番でvmdを変更できる。 |
*mmdpi::get_vmd( int index ) += frame | frame 分だけモーションフレームを進める |
*mmdpi::get_vmd( int index ) = frame | 指定されたフレームにジャンプ |
mmdpi::get_vmd( int index )->is_end() | モーションの終了判定 |
void mmdpi::set_fps( int fps ) | モーション実行時のfps を指定。 |
void mmdpi::set_projection_matrix( const GLfloat* p_projection_matrix ) | プロジェクション行列の指定。 |
void mmdpi::set_projection_matrix( const mmdpiMatrix_ptr p_projection_matrix ) | プロジェクション行列の指定。 |
コンパイル
cmake . (-Dpi=on ラスパイモード -Dbullet=on Bullet Physics インストール時のみ物理演算可)
make -j N (Nは並列スレッド数)
make install <= お好みで
ここからは開発のあれこれ
動機
RaspberryPi で 3DCG をやってみたい。
RaspberryPi 上で3DCG 関連のことができたらうれしい! <= 手軽に!
やっぱり、可愛らしいモデルを躍らせたい!
3DCG の勉強したい!!
上みたいなことしたい
問題発生
ラズベリーパイは OpenGL ES 2.0 にしか対応してないらしい。。
=> 頂点シェーダで頂点テクスチャ使えないらしい!
各シェーダ共通でアクセスできるメモリがない。
頂点と関連するボーンの情報をどうしよう。。。
(OpenGL でMMD 表示したという記事でよく見るのは頂点テクスチャ上にボーンの情報を置いて各頂点シェーダから共通でアクセスするらしいのに・・・)
モデルをバラバラにして(細かい部分に分けて)頂点シェーダで使う GPU キャッシュに収めればいけるかも。。
完成
何とかそれっぽい動きをしているのでいいのかな・・・?