MV1LoadModelで読み込んだ3Dモデルを、指定した座標を中心に回転するにはどうすればいいでしょうか。
MV1SetRotationXYZを使うと、モデルの中心で回転してしまいます。
モデルを指定した座標を中心に回転するには
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: モデルを指定した座標を中心に回転するには
これで出来ると思うのですが、試していませんのでテストをしてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: モデルを指定した座標を中心に回転するには
この方法を使うとMV1SetPosition()やMV1SetRotationXYZ()の値はすべて無視されますので、それが原因では無いでしょうか。RYO さんが書きました:テストするとモデルが変な場所にずれてしまいました...
それと先程のは実験的なので回転中心はワールドの(0,0,0)です。
任意座標中心だと
MATRIX mr = MGetRotY(ror); //回転
MATRIX mv1 = MGetTranslate(VGet(0, 10, 0)); //回転中心からの移動距離
MATRIX mv2 = MGetTranslate(VGet(10, 0, 0)); //回転中心座標
MATRIX mm1 = MMult(mv2, mr); //行列の掛け算 回転中心に移動して回転する。
MATRIX mm2 = MMult(mm1, mv1); //行列の掛け算 回転したものから指定距離移動する。
MV1SetMatrix(ModelHandle,mm2); //モデルに行列を反映by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
RYO
Re: モデルを指定した座標を中心に回転するには
>この方法を使うとMV1SetPosition()やMV1SetRotationXYZ()の値はすべて無視されますので、
MV1SetPosition()の値を無視しない方法はないでしょうか。
MV1SetPosition()の値を無視しない方法はないでしょうか。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: モデルを指定した座標を中心に回転するには
MATRIX mv2 が回転の中心座標ですから、その値ではダメなのでしょうか?RYO さんが書きました:>この方法を使うとMV1SetPosition()やMV1SetRotationXYZ()の値はすべて無視されますので、
MV1SetPosition()の値を無視しない方法はないでしょうか。
2つ目のコードは回転中心座標、回転角度、回転中心からの距離は全てパラメータとして与えれるようになっています。
逆にMV1SetPosition()が必要な理由が良く分かりませんので説明して頂けると助かります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: モデルを指定した座標を中心に回転するには
MV1SetPosition()で設定した数値を使いたいのなら
MV1GetPosition()で得た数値を行列計算に使うという手もあります。
MV1GetPosition()で得た数値を行列計算に使うという手もあります。