トップページ > 記事閲覧
モデルの行列について
名前:ペッパー 日時: 2016/11/17 21:47

行列について、かなり初歩的な事なのですがお聞きしたいことがあります。 言葉だと文量が多くなってしまいますので、擬似コードで失礼します。 ----------------------擬似コードここから---------------------- void MTransCopy(MATRIX& in, const MATRIX& src){ in.m[3][0] = src.m[3][0]; in.m[3][1] = src.m[3][1]; in.m[3][2] = src.m[3][2]; in.m[3][3] = 1.f; } void rot{ const int handle = モデルハンドル const int index = MV1SearchFrame(handle, "xxxx"); MATRIX x = MGetRotX(DX_PI_F * 0.5f); MATRIX local_mat = MV1GetFrameLocalMatrix(handle, index); MTransCopy(x, local_mat); MV1SetFrameUserLocalMatrix(handle, index, x); } ----------------------擬似コードここまで---------------------- 上記のような感じのコードの結果は、モデルのxxxx名のフレームが、フレームのローカル空間のX軸で90度回転します。 これを、ワールド空間のX軸で90度回転するようにしたいのですが、なにか方法はありますでしょうか? さらに言うと、カメラからみたX軸で回転させたいのですが・・・。
メンテ

Page: 1 |

Re: モデルの行列について ( No.1 )
名前:管理人 日時:2016/11/18 01:33

うーん現状では各フレームは必ず親フレームの影響を受けるので、親フレームの影響を無視して ワールド空間での回転を行うのはかなり難しいです 現状ではワールド空間で回転させたいフレームを別のモデルファイルにしてしまうのが一番簡単です ただ、僅かな手間で済むのでご所望でしたら MV1SetFrameUserLocalWorldMatrix のような 関数を追加しますが如何でしょう?
メンテ
Re: モデルの行列について ( No.2 )
名前:ペッパー 日時:2016/11/18 13:27

ご返信ありがとうございます。 >>現状ではワールド空間で回転させたいフレームを別のモデルファイルにしてしまうのが一番簡単です あっ・・・その手法はまったく考えつきませんでした。さっそく試してみます。 >>MV1SetFrameUserLocalWorldMatrix 厚かましいお願いですが、片手間に終わる程度の作業でしたら実装して下さると嬉しいです。 アンドロイド版などの拡張作業でお忙しい中、申し訳ないです・・・。
メンテ
Re: モデルの行列について ( No.3 )
名前:管理人 日時:2016/11/20 23:41

了解です 想像以上に簡単に実装できました よろしければこちらの関数を追加したバージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 以下の関数を追加しました // 指定のフレームの座標変換行列( ローカル座標からワールド座標に変換する行列 )を設定する int MV1SetFrameUserLocalWorldMatrix( int MHandle, int FrameIndex, MATRIX Matrix ) ; // 指定のフレームの座標変換行列( ローカル座標からワールド座標に変換する行列 )をデフォルトに戻す int MV1ResetFrameUserLocalWorldMatrix( int MHandle, int FrameIndex ) ; よろしければお使いください
メンテ
Re: モデルの行列について ( No.4 )
名前:ペッパー(解決) 日時:2016/11/23 11:05

迅速なご対応ありがとうございます m(_ _)m 早速試したところ、見事望んだ結果となりました。 お忙しい中、本当にありがとうございます!
メンテ

Page: 1 |

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

   クッキー保存