DXライブラリでMMDのモデルを描画しようとしてみましたが、うまく描画されていないようです。
公式のリファレンスを参考にしました。
どこがおかしいか、どう直せばいいか教えていただければ幸いです。
よろしくお願いします。
#include "DxLib.h"
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //裏画面に設定
int ModelHandle, AttachIndex, PlayAnim ;
float TotalTime, PlayTime ;
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "初音ミク.pmd" ) ;
if(ModelHandle==-1)printfDx("モデルの読み込みに失敗");
// 画面に映る位置に3Dモデルを移動
if(MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) )==-1)
printfDx("モデルの移動に失敗");
// 3Dモデルの0番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, 0, -1, FALSE ) ;
if(AttachIndex==-1)printfDx("アニメーションのアタッチに失敗");
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;
// 再生時間の初期化
PlayTime = 0.0f ;
unsigned int prevtime,nowtime;
prevtime=nowtime=GetTickCount();
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない
//ココに処理を書いていく
// 再生時間を進める
nowtime=GetTickCount();
PlayTime+=(float)(nowtime-prevtime)/1000.0f*60.0f;
prevtime=nowtime;
if( PlayTime >= TotalTime )PlayTime=0.0f;
// 再生時間をセットする
if(MV1SetAttachAnimTime( ModelHandle, AttachIndex, PlayTime )==-1)
DrawString(50,400,"再生時間のセットに失敗",GetColor(255,255,255));
// 3Dモデルの描画
if(MV1DrawModel( ModelHandle )==-1)
DrawString(50,440,"モデルの描画に失敗",GetColor(255,255,255));
ScreenFlip();//裏画面を表画面に反映
}
DxLib_End();
return 0;
}
modeltest.exeと同じフォルダに、
http://www.geocities.jp/higuchuu4/でダウンロードできる
「MikuMikuDance (Multi-Model Edition)」のUserFile>Modelフォルダから「初音ミク.pmd」をコピーしてください。
イメージ図はMMDの画面をコピペしてちょっと編集しただけなので汚いですが気にしないでください。
画面写真 イメージ図