Skip to content

shirobu2400/mmdpi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mmdpi

Miku_Miku_Pi(mmdpi)v1.0

shirobu(または wq2400kskm)と申します。
限られた処理系(Raspberry Pi 等)でも
MMD っぽいことを実現のためにライブラリを作りました。
PMD,PMXまた、VMDに対応しています。
現在は表示、再生のみしか行えません。
バグがたくさんありますのでライブラリとして使用するには頼りないですが、
このプログラム、ライブラリでコンピュータグラフィックスに興味を持って頂ける方が増えたら私は嬉しいです。
なお、本プログラムはpng, jpegファイル読み込みにlibpng, libjpegをしようさせていただいてます。
libpng, libjpeg がない場合には zlib, libpng, libjpeg をインストールしてください。

ディレクトリの構成

  • LICENSE.md : このソースコードのライセンス
  • README.md : このファイル
  • libmmdpi : ライブラリフォルダ( mmdpi の処理 ) .cpp, .h があります。
  • mmdpiv : ビューアフォルダ .cpp, .h があります。

コンパイル方法(Raspbian)

!!!!Raspbian かつ LegacyDriver 時のみ!!!!
LegacyDriverの設定は raspi-config => Advanced Options => GL Driver => G3 Legacy を選択してください。
また、-lEGL, -lGLESv2 などの存在がない場合には rpi-update を実行してください。

cmake . -Dpi=on
make

cmake を -Dpi=on オプションで実行してください。

コンパイル方法(Other Platform)(未確認のものあり。)

cmake . 
make

bullet オプションで Bullet Physics インストール済みの場合に物理演算が可能です。

make で mmdpiv/ に実行ファイル mmdpiv ができます。
実行ファイル mmdpiv は ビューアプログラムです。
GL, GLU, GLUT, GLEWが必要です。
Bullet Physics インストール済みおよび、-Dbullet=on オプションを付けるとBullet Physics による物理演算を行えます。
-Doutline=onをすると輪郭が表示されます。
linux x64 では-Dx64=onオプションを付けてください。
最新バージョンではx64 オプションを指定する必要はありません
(ただし、正常に動作するかは一部を除いて未確認。)

実行方法

./mmdpiv -p"モデルファイルパス" -v"VMD ファイルパス"

mmdpi のリファレンス

int mmdpi::load( std::string model_name ) モデルファイル(.pmd, .pmx)の読み込み(PATH で指定)
int mmdpi::vmd_load( std::string motion_name, std::string file_name ) モーションファイル(.vmd)の読み込み(PATH で指定). motion_name にで motion を命名しその名前で今後呼び出し
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::vmd( std::string name ) vmd情報の取得。nameはvmdを複数読み込んだうちの命名したvmdを変更できる。
*mmdpi::vmd( std::string name ) += frame frame 分だけモーションフレームを進める
*mmdpi::vmd( std::string name ) = frame 指定されたフレームにジャンプ
mmdpi::vmd( std::string name )->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 ) プロジェクション行列の指定。

その他、注意事項など

Raspberry Piの Raspbian 上での動作を想定にプログラムされています。
大抵の処理系では動くはずです。
VRAM は128MB以上推奨。
OpenGL 2.0 以上で動作ができます。(頂点テクスチャを使用していないようになっています。)
一部モデルが正常に表示されない、IKが動作しない問題があります。
このプログラムで起きた問題等には責任を負いかねます。

動作しない場合

Q. 何も画面に表示されない場合もしくは表示がおかしい場合
A. VRAM が足りない場合があります。VRAM を増やして実行をしてみてください。
またはグラフィックドライバを変更してみてください。
一部の画像ファイルには対応していません。

Q. Raspbian でOpenGL ES 関連のエラーが出る。
A. -Dpi=on でRaspbian のLegacy Driver を使用します。
raspi-config => Advanced Options => GL Driver => G3 Legacy を選択してください。 また、-lEGL, -lGLESv2 などの存在がない場合には rpi-update を実行してください。

余談

Raspbian で OpenGL ES を扱う方へ

Raspbian には頂点テクスチャが実装されてないのでボーンの割り当てに苦労しました。

=> メッシュ分割で解決しました。GPUに渡せる行列は24が限界?


Raspbian の頂点インデックスは unsigned int 以上の大きさの数値は扱えない。

=> unsigned short 型に収まるようにメッシュ分割しました。


気軽にご連絡ください。

Twitter : @2400kskm
ニコニコ: shirobu

About

Miku_Miku_Pi(mmdpi)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published