そこそこ前に作り始めたものですが...

MMDPI

公開中です。
https://github.com/shirobu2400/mmdpi
mmdpi_screen.png
こんな感じのことができる。

使い方(ビューア)

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 の勉強したい!!
mmdpi_screen.png
上みたいなことしたい

問題発生

ラズベリーパイは OpenGL ES 2.0 にしか対応してないらしい。。
=> 頂点シェーダで頂点テクスチャ使えないらしい!
各シェーダ共通でアクセスできるメモリがない。
頂点と関連するボーンの情報をどうしよう。。。
(OpenGL でMMD 表示したという記事でよく見るのは頂点テクスチャ上にボーンの情報を置いて各頂点シェーダから共通でアクセスするらしいのに・・・)
モデルをバラバラにして(細かい部分に分けて)頂点シェーダで使う GPU キャッシュに収めればいけるかも。。

完成

何とかそれっぽい動きをしているのでいいのかな・・・?

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.