回転行列について

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

回転行列について

#1

投稿記事 by Masao » 13年前

http://dixq.net/forum/viewtopic.php?f=3&t=11273
上のトピックで質問していましたが、質問の仕方が悪かったので、
質問を変えてタイトルを変え新しく投稿させて頂きます。連投すみません。


今、XZ軸に長方形(XZ平面上の座標は(0,0),(2,0),(0,1),(1,2))があり、それをカメラに向けるための変換行列を作っています。
この変換において、
X軸の単位ベクトル(1,0,0)の変換後の座標を、(xaxis.x,xaxis.y,xaxis.z)とし、
Y軸の単位ベクトル(0,1,0)の変換後の座標を、(yaxis.x,yaxis.y,yaxis.z)とし、
Z軸の単位ベクトル(0,0,1)の変換後の座標を、(zaxis.x,zaxis.y,zaxis.z)とすると、
先の長方形にかけるべき行列は、

コード:

		float m2[]={
				 xaxis.x,yaxis.x,zaxis.x,0,
				 xaxis.y,yaxis.y,zaxis.y,0,
				 xaxis.z,yaxis.z,zaxis.z,0,
				 0,0,0,1
				};
であると認識しています。


yaxisをカメラが向いている方向の逆のベクトル、xaxisをカメラから見て右手方向のベクトル、zaxisをカメラから見て上方向のベクトル(それぞれ正規化済み)とし、実際にこの方針でプログラムを組んでみたものの、長方形の向きが予想とは違う結果になりました。
(長方形がカメラに対して固定になる、と予想していた。)

何か、私は勘違いしているのでしょうか・・・??あるいは、他に原因があるのでしょうか?

Masao
記事: 2
登録日時: 13年前
連絡を取る:

Re: 回転行列について

#2

投稿記事 by Masao » 13年前

すいません、自己解決しました。
http://www.sousakuba.com/Programming/d3d_camera.html

「カメラ座標変換の逆行列がビュー変換行列になります。」


先の行列の逆行列をかけたら出来ました!!
お騒がせいたしました。

コードはこんな感じです。

コード:

		Number3d forward = new Number3d(centerx-eyex,centery-eyey,centerz-eyez);
		Number3d up = new Number3d(upx,upy,upz);

		forward.normalize();

		Number3d side = Number3d.cross(up, forward);
		side.normalize();
		up.setAllFrom(Number3d.cross(forward,side));
		float m2[]={
				side.x,-forward.x,-up.x,0,
				 side.y,-forward.y,-up.y,0,
				 side.z,-forward.z,-up.z,0,
				 0,0,0,1
				};
		Matrix.invertM(camera_matrix, 0, m2, 0);

閉鎖

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