モーションを再生したい!(DxLib)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
EIYUU

モーションを再生したい!(DxLib)

#1

投稿記事 by EIYUU » 12年前

このごろ3Dに手を出したのですが・・・
モーションのことがよくわかりません。
説明があったりするのですが・・・・まったくわかりません(少しは、わかる)。
ということで、こんな人でもわかるように説明していただけないでしょうか・・・。
あとコードも載せてくれたらうれしいです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: モーションを再生したい!(DxLib)

#2

投稿記事 by softya(ソフト屋) » 12年前

モーションがあるモデル+モーションのファイルは、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入門】モデルをアニメーションさせよう(前編)と(後編)をお読み下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

EIYUU

Re: モーションを再生したい!(DxLib)

#3

投稿記事 by EIYUU » 12年前

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;
}

EIYUU

Re: モーションを再生したい!(DxLib)

#4

投稿記事 by EIYUU » 12年前

コードみにくくなっていたので・・
以下がコードです

コード:

#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;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: モーションを再生したい!(DxLib)

#5

投稿記事 by softya(ソフト屋) » 12年前

codeタグの使い方が間違っていますよ。

コード:

じゃなくて[code=cpp]です。
プレビューで必ず確認して投稿して下さいね。

それと、そのモデルはモーションが定義されているんでしょうか?
DXライブラリ付属ToolのDxLibModelViewer.exe でモーションが動くことを確認してみて下さい。

【確認方法の補足】
・DxLibModelViewerで該当モデルを読み込ム。
・アニメーションを選ぶ。定義されているアニメーションデータが表示される。
・テストしたいアニメーションデータを選択。
・再生を押す。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Priest
記事: 123
登録日時: 12年前
住所: 愛知

Re: モーションを再生したい!(DxLib)

#6

投稿記事 by Priest » 12年前

そのエラーの直接的な回答になるか分かりませんが、

PlayTime+=100.0f;

って進めすぎではないですか?
totaltimeを一瞬で上回って、Playtime=0;になっている可能性があります。

PlayTime+=1.0f;

位にしておきましょう。

コード:

#include <Priest.h>
int MyPolicy ( void ) { printf( "何事も楽しくね!" ); return 0; }

EIYUU

Re: モーションを再生したい!(DxLib)

#7

投稿記事 by EIYUU » 12年前

動きました!!
ありがとうございました!!
原因は、PlayTimeを一回で100進めていたことでした!
本当にありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る