モデルを指定した座標を中心に回転するには

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
RYO

モデルを指定した座標を中心に回転するには

#1

投稿記事 by RYO » 14年前

MV1LoadModelで読み込んだ3Dモデルを、指定した座標を中心に回転するにはどうすればいいでしょうか。
MV1SetRotationXYZを使うと、モデルの中心で回転してしまいます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: モデルを指定した座標を中心に回転するには

#2

投稿記事 by softya(ソフト屋) » 14年前

これで出来ると思うのですが、試していませんのでテストをしてみてください。

コード:

MATRIX m1 = MGetTranslate( VGet( 2.0f, 2.0f, 2.0f) );	//移動行列
MATRIX m2 = MGetRotY(rot);	//回転行列
MATRIX mm = MMult(m1,m2);	//行列のかけ算
MV1SetMatrix(ModelHandle,mm);	//モデルに行列を反映
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

RYO

Re: モデルを指定した座標を中心に回転するには

#3

投稿記事 by RYO » 14年前

テストするとモデルが変な場所にずれてしまいました...

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: モデルを指定した座標を中心に回転するには

#4

投稿記事 by softya(ソフト屋) » 14年前

RYO さんが書きました:テストするとモデルが変な場所にずれてしまいました...
この方法を使うとMV1SetPosition()やMV1SetRotationXYZ()の値はすべて無視されますので、それが原因では無いでしょうか。
それと先程のは実験的なので回転中心はワールドの(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);	//モデルに行列を反映
今後のことを考えるなら3Dの行列演算の勉強はされた方が良いですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

RYO

Re: モデルを指定した座標を中心に回転するには

#5

投稿記事 by RYO » 14年前

>この方法を使うとMV1SetPosition()やMV1SetRotationXYZ()の値はすべて無視されますので、

MV1SetPosition()の値を無視しない方法はないでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: モデルを指定した座標を中心に回転するには

#6

投稿記事 by softya(ソフト屋) » 14年前

RYO さんが書きました:>この方法を使うとMV1SetPosition()やMV1SetRotationXYZ()の値はすべて無視されますので、

MV1SetPosition()の値を無視しない方法はないでしょうか。
MATRIX mv2 が回転の中心座標ですから、その値ではダメなのでしょうか?
2つ目のコードは回転中心座標、回転角度、回転中心からの距離は全てパラメータとして与えれるようになっています。
逆にMV1SetPosition()が必要な理由が良く分かりませんので説明して頂けると助かります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: モデルを指定した座標を中心に回転するには

#7

投稿記事 by h2so5 » 14年前

MV1SetPosition()で設定した数値を使いたいのなら
MV1GetPosition()で得た数値を行列計算に使うという手もあります。

RYO

Re: モデルを指定した座標を中心に回転するには

#8

投稿記事 by RYO » 14年前

ありがとうございます。
出来ました!!!!


閉鎖

“C言語何でも質問掲示板” へ戻る