ページ 1 / 1
モーションを再生したい!(DxLib)
Posted: 2013年2月02日(土) 21:15
by EIYUU
このごろ3Dに手を出したのですが・・・
モーションのことがよくわかりません。
説明があったりするのですが・・・・まったくわかりません(少しは、わかる)。
ということで、こんな人でもわかるように説明していただけないでしょうか・・・。
あとコードも載せてくれたらうれしいです。
Re: モーションを再生したい!(DxLib)
Posted: 2013年2月02日(土) 22:46
by softya(ソフト屋)
モーションがあるモデル+モーションのファイルは、MMD(ミクミクダンス)などで作成することができます。
で、DXライブラリであれば、リファレンスの真似をしてもらえばアニメーションします。
「MV1AttachAnim」
http://homepage2.nifty.com/natupaji/DxL ... .html#R4N1
【追記】
ここの記事の解説が詳細です。
「わくわくプログラミング自習室 Blogs - 3D Archive」
http://i-libro.net/wpmu/blog/archives/category/3d
【DXライブラリ3D入門】モデルをアニメーションさせよう(前編)と(後編)をお読み下さい。
Re: モーションを再生したい!(DxLib)
Posted: 2013年2月03日(日) 17:57
by EIYUU
MV1AttachAnim関数の説明のとうりにやったのですが、
モーションが再生されませんでした・・・。
どういうことでしょうか?
コード:
#include"DxLib.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE),SetWindowText("Motion"),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);
SetUseZBuffer3D(TRUE);
SetWriteZBuffer3D(TRUE);
int Model=MV1LoadModel("Motio/とげりんご.pmd");
MV1SetPosition(Model,VGet(320.0f,180.0f,0.0f));
MV1SetScale(Model,VGet(5.0f,5.0f,5.0f));
int AttachIndex,TotalTime,PlayTime;
AttachIndex=MV1AttachAnim(Model,0,-1,FALSE);
TotalTime=MV1GetAttachAnimTotalTime(Model,AttachIndex);
PlayTime=0.0f;
while(ProcessMessage()==0&&ScreenFlip()==0&&ClearDrawScreen()==0){
PlayTime+=100.0f;
if(PlayTime>=TotalTime)
PlayTime=0.0f;
MV1SetAttachAnimTime(Model,AttachIndex,PlayTime);
MV1DrawModel(Model);
}
DxLib_End();
return 0;
}
Re: モーションを再生したい!(DxLib)
Posted: 2013年2月03日(日) 17:59
by EIYUU
コードみにくくなっていたので・・
以下がコードです
コード:
#include"DxLib.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE),SetWindowText("Motion"),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);
SetUseZBuffer3D(TRUE);
SetWriteZBuffer3D(TRUE);
int Model=MV1LoadModel("Motio/とげりんご.pmd");
MV1SetPosition(Model,VGet(320.0f,180.0f,0.0f));
MV1SetScale(Model,VGet(5.0f,5.0f,5.0f));
int AttachIndex,TotalTime,PlayTime;
AttachIndex=MV1AttachAnim(Model,0,-1,FALSE);
TotalTime=MV1GetAttachAnimTotalTime(Model,AttachIndex);
PlayTime=0.0f;
while(ProcessMessage()==0&&ScreenFlip()==0&&ClearDrawScreen()==0){
PlayTime+=100.0f;
if(PlayTime>=TotalTime)
PlayTime=0.0f;
MV1SetAttachAnimTime(Model,AttachIndex,PlayTime);
MV1DrawModel(Model);
}
DxLib_End();
return 0;
}
Re: モーションを再生したい!(DxLib)
Posted: 2013年2月03日(日) 18:01
by softya(ソフト屋)
codeタグの使い方が間違っていますよ。
コード:
じゃなくて[code=cpp]です。
プレビューで必ず確認して投稿して下さいね。
それと、そのモデルはモーションが定義されているんでしょうか?
DXライブラリ付属ToolのDxLibModelViewer.exe でモーションが動くことを確認してみて下さい。
【確認方法の補足】
・DxLibModelViewerで該当モデルを読み込ム。
・アニメーションを選ぶ。定義されているアニメーションデータが表示される。
・テストしたいアニメーションデータを選択。
・再生を押す。
Re: モーションを再生したい!(DxLib)
Posted: 2013年2月03日(日) 18:02
by Priest
そのエラーの直接的な回答になるか分かりませんが、
PlayTime+=100.0f;
って進めすぎではないですか?
totaltimeを一瞬で上回って、Playtime=0;になっている可能性があります。
PlayTime+=1.0f;
位にしておきましょう。
Re: モーションを再生したい!(DxLib)
Posted: 2013年2月03日(日) 18:36
by EIYUU
動きました!!
ありがとうございました!!
原因は、PlayTimeを一回で100進めていたことでした!
本当にありがとうございました