トップページ > 過去ログ > 記事閲覧
モデルのフレームごとのローカル回転軸について
名前:ffm8 日時: 2013/04/07 17:00

MMDなどでモデルを扱った際にフレームごとに設定されているローカル回転軸(法線ベクトル?)を取得したく思い、 調べてみたところ、調べ方の悪さもあるかもしれませんが見当たらなかったので質問させて頂きました。 かなり需要のある部分だと思うのですが見当たらず、 アニメーションには手を出したばかりで自分の見落としや勘違いかも知れませんが、 どうか回答お願いします。

Page: 1 |

Re: モデルのフレームごとのローカル回転軸について ( No.1 )
名前:管理人 日時:2013/04/07 18:45

フレーム( ボーン )のローカル回転軸を取得する機能はありませんが ローカル行列でしたらこちらの関数で取得することが出来ます // 指定のフレームの座標変換行列を取得する MATRIX MV1GetFrameLocalMatrix( int MHandle, int FrameIndex ) ; ローカル→ワールド行列はこちらです // 指定のフレームのローカル座標からワールド座標に変換する行列を得る MATRIX MV1GetFrameLocalWorldMatrix( int MHandle, int FrameIndex ) ;
Re: モデルのフレームごとのローカル回転軸について ( No.2 )
名前:ffm8 日時:2013/04/07 21:41

ローカル回転軸は取得出来ませんか…… とういうことは皆さんはアニメーションで全てまかなっているのでしょうか? 取得出来れば対象の座標に応じた変形がしやすくなると思うのですが…… 出来ないなら仕方ありませんね、代替策を考えてみます。 また、不勉強で申し訳ありませんが // 指定のフレームの座標変換行列を取得する MATRIX MV1GetFrameLocalMatrix( int MHandle, int FrameIndex ) ; のフレームの座標変換行列とはどのような行列なのでしょうか。 リファレンスを探していてもそこが疑問でした。 引数がフレーム番号とハンドルだけで一意的に決定される変換が思いつきません。 回転移動拡大といった行列しか思いつかないのでご教示願えませんでしょうか。 あと別人ですが3Dサウンドの実装ありがとうございました。とても助かっています。
Re: モデルのフレームごとのローカル回転軸について ( No.3 )
名前:管理人 日時:2013/04/14 16:15

ffm8さんの仰るローカル回転軸とはどのようなものなのでしょうか? よろしければC言語の変数などで表した場合どのようなものになるのか 教えていただけないでしょうか? > // 指定のフレームの座標変換行列を取得する > MATRIX MV1GetFrameLocalMatrix( int MHandle, int FrameIndex ) ; > のフレームの座標変換行列とはどのような行列なのでしょうか。 こちら↓の Direct3D の トランスフォームパイプラインの解説の http://msdn.microsoft.com/ja-jp/library/bb206260(v=vs.85).aspx Model space から World space に座標値を変換するための行列です 行列の中に拡大・回転・平行移動の要素が詰まっています
Re: モデルのフレームごとのローカル回転軸について ( No.4 )
名前:ffm8 日時:2013/04/21 12:39

お返事遅れて申し訳ありません。 私の想像しているローカル回転軸とは、 MMDでボーンを選択した際に回転や移動のボタン(?)にマウスオンすると表示される軸のことです。 申し訳ありませんがあの軸が各ボーンに登録されているのか、 それとも何らかの式で算出しているのかも分からず、 調べているのですが見当たらないのでCで表現は出来ません。 また、一番最初に(法線ベクトル?)などと書いたのは完全に勘違いでした。 PMDエディタでそれっぽいベクトルが登録されていないか調べた時にメッシュの法線ベクトルをそれと勘違いしただけです。 フレームの行列については試行錯誤しながらも、ついに目的の動きをさせることが出来ました。 ローカル行列にワールド座標ベクトル依存の回転を補正なしに試行錯誤していたためにイメージと異なった動きになっていたようです。 モデルに軸取得用のボーンを追加するといった擬似的な方法を使うことでローカル回転軸も一応は取得できるようにしたので、 あとは細かく条件や挙動を設定していけば実装は出来そうです。ありがとうございました。 ただ、いくつか疑問があります。 1.MGetRotX、Y、Zをローカル行列に合成すると、イメージと違った回転を行いますが、 ワールド座標軸のXYZ軸中心ではなく、 ttp://marupeke296.com/DXG_No39_WorldMatrixInformation.html こちらの最後に書いているような、ローカル行列の座標軸中心の回転になっているのでしょうか? 2.今までパーティクル関係で散々使ってきたつもりですが、MGetRotAxisの具体的な計算方法が示されていないことに気づきました。 どのような計算を行なって実現しているのでしょうか?
Re: モデルのフレームごとのローカル回転軸について ( No.5 )
名前:ffm8 日時:2013/04/28 19:09

時間はかかりましたがなんとか理想通りの目的の挙動を実装することが出来ました。 モデル空間とワールド空間のイメージをつかむ手助けになり、とても助かりました。 ありがとうございました。
Re: モデルのフレームごとのローカル回転軸について ( No.6 )
名前:管理人 日時:2013/04/30 00:34

目的の処理を実現できたようで何よりです > 1.MGetRotX、Y、Zをローカル行列に合成すると、イメージと違った回転を行いますが、 > ワールド座標軸のXYZ軸中心ではなく、 > ttp://marupeke296.com/DXG_No39_WorldMatrixInformation.html > こちらの最後に書いているような、ローカル行列の座標軸中心の回転になっているのでしょうか? MGetRotX, Y, Z については「各軸の回転行列を返す関数」というだけでローカルやワールドなどの概念はありません > 2.今までパーティクル関係で散々使ってきたつもりですが、MGetRotAxisの具体的な計算方法が示されていないことに気づきました。 > どのような計算を行なって実現しているのでしょうか? 私もあまり理解できているとは言えないので、ご説明するのは難しいです・・・ よろしければ「行列 任意軸回転」などで検索してみてください、解説しているサイトが見つかると思います
Re: モデルのフレームごとのローカル回転軸について ( No.7 )
名前:ffm8(解決) 日時:2013/05/02 23:42

目的の挙動を実装でき、この先しばらくは使わなさそうなので、 必要になったときに改めて勉強するという事にします。 ありがとうございました。 疑問ができたらまたよろしくお願いします。

Page: 1 |