トップページ > 記事閲覧
アニメーションのフレームについて
名前:yellow 日時: 2024/03/19 22:06

アニメーションのフレームについて 公式アニメーションサンプル dxlib.xsrv.jp/program/dxprogram_Animation.html こちらを参考にしていますが 例えばアニメーションは現在再生中のフレーム番号で ここでのフレームはサブオブジェクトの事ではなくて 再生しているコマ番号のフレーム番号の意味で 現在何コマ目が再生されているか、 という表示または取得を行いたいのですが アニメーショントータルタイムからプレイ間隔で 割るなどいろいろためしてみましたが アニメーションそのものの知識が乏しい事もあり 意図する結果は取得できませんでした。 そこでなにか方法がありましたらご教示ください
メンテ

Page: 1 |

Re: アニメーションのフレームについて ( No.1 )
名前:管理人 日時:2024/03/20 04:55

DXライブラリは Xファイルや pmdファイル fbxファイルなど幾つかの 3Dモデルファイルフォーマットに対応している関係で、一律に 『こうすればコマ番号を取得できます』 という方法はありません 以下のご質問にお答え頂けますでしょうか? m(_ _)m ・DXライブラリに読み込まんでいるファイルフォーマット( x や pmd+vmd や fbx など ) ・MV1GetAttachAnimTotalTime で取得できる値 ・アニメーション作成時のコマ数
メンテ
Re: アニメーションのフレームについて ( No.2 )
名前:yellow 日時:2024/03/20 09:11

公式サンプルのDxCHara.xの歩きモーションなのでxということになります。 MV1GetAttachAnimTotalTimeで取得できる値は12000.0fでした。 この歩きアニメーションのサンプルが何フレームで作られているのか 明確にはわかりませんが30〜60フレーム程度になるのではないかと推測してましたがじつはよくわかってません。 なるほど、管理人さんがおっしゃるように読み込むファイルフォーマットによって 取得できる値も変わってくるようなものなのですね、把握できました。 以前に考えていた方法としては アニメーションのスタート時に再生フレームの変数を0に、 ループする時に+1を加えるという方法がありましたが 公式サンプルほぼそのままですがこのような単純な方法で 良いのならそのまま使おうかなと考えています。 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int ModelHandle; float AnimTotalTime; float AnimNowTime; int AnimAttachIndex; int frame=0; ChangeWindowMode(TRUE); if (DxLib_Init() < 0) return -1; ModelHandle = MV1LoadModel("DxChara.x"); AnimAttachIndex = MV1AttachAnim(ModelHandle, 1); AnimTotalTime = MV1GetAttachAnimTotalTime(ModelHandle, AnimAttachIndex); AnimNowTime = 0.0f; MV1SetAttachAnimTime(ModelHandle, AnimAttachIndex, AnimNowTime); SetDrawScreen(DX_SCREEN_BACK); SetCameraPositionAndTarget_UpVecY(VGet(1340.0f, 600.0f, -420.0f), VGet(0.0f, 400.0f, -420.0f)); SetCameraNearFar(16.0f, 3800.0f); SetBackgroundColor(128, 128, 128); while (ProcessMessage() == 0) { ClearDrawScreen(); AnimNowTime += 100.0f; if (AnimNowTime >= AnimTotalTime) { AnimNowTime -= AnimTotalTime; frame=0; } MV1SetAttachAnimTime(ModelHandle, AnimAttachIndex, AnimNowTime); MV1DrawModel(ModelHandle); DrawFormatString(50, 60, GetColor(255, 255, 255), "TotalTime %f",AnimTotalTime); DrawFormatString(50, 80, GetColor(255, 255, 255), "NowTime %f",AnimNowTime); DrawFormatString(50,100, GetColor(255,255,255), "Frame %d",frame); ScreenFlip(); frame++; } DxLib_End(); return 0; }
メンテ
Re: アニメーションのフレームについて ( No.3 )
名前:管理人 日時:2024/03/20 13:50

> 公式サンプルのDxCHara.xの歩きモーションなのでxということになります。 > MV1GetAttachAnimTotalTimeで取得できる値は12000.0fでした。 > この歩きアニメーションのサンプルが何フレームで作られているのか > 明確にはわかりませんが30〜60フレーム程度になるのではないかと推測してましたがじつはよくわかってません。 DxChara.x のモーションは秒間60フレームで作成されていて、1秒辺りタイム値が 6000.0f 進むような ファイルとなっていますので、ゲームを 60fps で動作させている場合はメインループ1回につき 100.0f 進める 形となります > なるほど、管理人さんがおっしゃるように読み込むファイルフォーマットによって > 取得できる値も変わってくるようなものなのですね、把握できました。 はい、ファイルによって異なります 例えば VMD の場合は 1秒辺りタイム値が 30.0f 進むようなファイルとなっていますので、 ゲームを 60fps で動作させている場合はメインループ1回につき 0.5f 進める形となります ( ゲームが 30fps だった場合はメインループ1回につき 1.0f 進める )
メンテ
Re: アニメーションのフレームについて ( No.4 )
名前:yellow(解決) 日時:2024/03/20 14:13

なるほど。dxlib側のfpsによって も変化するわけですね。参考になりました。 完全に把握できたわけではありませんが ご助言を活用し自作アプリに組み込んでみる事にします。 ひとまず解決とさせていただきます。 ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存