トップページ > 記事閲覧
dxlibでのアニメーションでアニメーションの座標無効化がで
名前:しょうご 日時: 2018/06/09 01:26

初めまして、大変申し訳ないのですが アニメーションの移動の座標無効ができなく困っています。 助けていただけませんか? DXライブラリ置き場でのサンプルコードでの無効をしてもできなく モデルはMMDを使用しています コードは以下の通りです // 初期化 Player::Player() { // 画像格納 modelHandle = MV1LoadModel("character/seiver/seiv.pmd"); // 走りアニメーションをアタッチ animAttachIndex = MV1AttachAnim(modelHandle, 0); // 走りアニメーションの総時間を取得しておく totalTime = MV1GetAttachAnimTotalTime(modelHandle, animAttachIndex); // アニメーション再生時間を初期化 playTime = 0.0f; MV1SetAttachAnimTime(modelHandle, animAttachIndex, playTime); // アニメーションで移動をしているフレームの番号を検索する moveAnimFrameIndex = MV1SearchFrame(modelHandle, "BasePoint"); // アニメーションで移動をしているフレームを無効にする MV1SetFrameUserLocalMatrix(modelHandle, moveAnimFrameIndex, MGetIdent()); //modelHandle = MV1LoadModel("object/tintin.mqo"); // rota = VGet(0, 0, 0); // 初期位置 pos = VGet(0.0f, 0.0f, 0.0f); } // 削除 Player::~Player() { // モデル削除 MV1DeleteModel(modelHandle); } // 関数一つで呼べるように void Player::All() { // 処理 Update(); Draw(); } // 更新 void Player::Update() { // プレイヤー制御. key = GetJoypadInputState(DX_INPUT_KEY_PAD1); // 現在の位置 prevPosition = MV1GetAttachAnimFrameLocalPosition(modelHandle, animAttachIndex, moveAnimFrameIndex); // 上を押していたら上に進む if (key & PAD_INPUT_UP) { rota.y = 3.0f; pos.z += 1.0f; playTime += 1.0f; } // 下を押していたら下に進む if (key & PAD_INPUT_DOWN) { rota.y = 0; pos.z -= 1.0f; playTime += 1.0f; } // 右を押していたら右に進む if (key & PAD_INPUT_RIGHT) { rota.y = 4.5; pos.x += 1.0f; playTime += 1.0f; } // 左を押していたら左に進む if (key & PAD_INPUT_LEFT) { rota.y = 1.5f; pos.x -= 1.0f; playTime += 1.0f; } if (key & PAD_INPUT_A) { pos.y += 2.0f; } // アニメーション再生時間 if (playTime >= totalTime) { // 超えている場合は、まず『アニメーション再生時間を進める前の「アニメーションで移動しているフレームの座標」』と、 // 『アニメーションの終端での「アニメーションで移動しているフレームの座標」』との差分をモデルの座標に加算する MV1SetAttachAnimTime(modelHandle, animAttachIndex, totalTime); nowPosition = MV1GetAttachAnimFrameLocalPosition(modelHandle, animAttachIndex, moveAnimFrameIndex); pos = VAdd(pos, VSub(nowPosition, prevPosition)); // 新しいアニメーション再生時間は、アニメーション再生時間からアニメーション総時間を引いたもの playTime -= totalTime; // 次に『新しいアニメーション再生時間での「アニメーションで移動をしているフレームの座標」と // 『アニメーション再生時間0での「アニメーションで移動しているフレームの座標」』との差分をモデルの座標に加算する MV1SetAttachAnimTime(modelHandle, animAttachIndex, 0.0f); prevPosition = MV1GetAttachAnimFrameLocalPosition(modelHandle, animAttachIndex, moveAnimFrameIndex); MV1SetAttachAnimTime(modelHandle, animAttachIndex, playTime); nowPosition = MV1GetAttachAnimFrameLocalPosition(modelHandle, animAttachIndex, moveAnimFrameIndex); pos = VAdd(pos, VSub(nowPosition, prevPosition)); } else { // 新しいアニメーション再生時間をセット MV1SetAttachAnimTime(modelHandle, animAttachIndex, playTime); // 『新しいアニメーション再生時間での「アニメーションで移動をしているフレームの座標」』と、 // 『アニメーション再生時間を進める前の「アニメーションで移動をしているフレームの座標」』との差分をモデルの座標に加算する nowPosition = MV1GetAttachAnimFrameLocalPosition(modelHandle, animAttachIndex, moveAnimFrameIndex); pos = VAdd(pos, VSub(nowPosition, prevPosition)); } // 3Dモデルのポジション設定 MV1SetPosition(modelHandle, pos); // 3Dモデルの角度設定 MV1SetRotationXYZ(modelHandle, rota); } // 描画 void Player::Draw() { MV1SetAttachAnimTime(modelHandle, animAttachIndex, playTime); // モデルを描画 MV1DrawModel(modelHandle); } です。 どうかご教授お願い致します。
メンテ

Page: 1 |

Re: dxlibでのアニメーションでアニメーションの座標無効化がで ( No.1 )
名前:管理人 日時:2018/06/11 00:23

実際に手元で現象を確認してみないと推測しか申し上げられませんが、 恐らく無効にすべきアニメーションが設定されているフレームが "BasePoint" ではないのではなかと思います 再現に必要な pmdファイルと vmdファイルをいただければ原因を調べることができますので、 よろしければ seiverフォルダの中の現象の再現に必要なファイルだけを圧縮してメールで BQE00322(あっとまーく)nifty.com ( (あっとまーく)を@に置き換えてください ) に送っていただけないでしょうか? m(_ _)m
メンテ
Re: dxlibでのアニメーションでアニメーションの座標無効化がで ( No.2 )
名前:しょうご 日時:2018/06/11 19:40

送りました よろしくおねがいします
メンテ
Re: dxlibでのアニメーションでアニメーションの座標無効化がで ( No.3 )
名前:管理人 日時:2018/06/12 02:03

メールありがとうございます やはり無効にすべきアニメーションのフレーム名が "BasePoint" ではないのが原因でした "BasePoint" と書かれている箇所を "センター" に変更していただければアニメーションの移動を 無効にすることができますので、よろしければお試しください m(_ _)m ( 無効にすべきフレーム名は、DXライブラリのパッケージの Tool フォルダの中にある DxLibModelViewer.exe で確認することができます )
メンテ
Re: dxlibでのアニメーションでアニメーションの座標無効化がで ( No.4 )
名前:しょうご 日時:2018/06/12 09:16

ありがとうございます  アニメーションの無効ができました
メンテ

Page: 1 |

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

   クッキー保存