2009年06月19日

3D CGにおける行列の豆知識

内積・外積の話をしたついでに、行列の豆知識的なことを書いておきます。Direct3Dの行ベクトルに合わせているので、OpenGL等で列ベクトルを扱う場合は、行と列を入れ替えてください。

基底ベクトルを並べた物が回転行列になる

回転行列というのは、変換後の座標系の基底ベクトルをそのまま並べたものになります。Direct3Dで使う行ベクトルの場合は、行列の各行が基底ベクトルになります。

matrix

この性質は非常に便利で、ある方向を向かせるための回転行列は、その方向ベクトルとそれに直行するベクトルを用意してあげれば簡単に作ることができます。また、逆に姿勢行列から向きを表すベクトルが欲しいときは、行列の成分を抜き出すだけで得ることができます。一般的にZ軸の正の方向を正面として扱うので、そのようなオブジェクトの向きは姿勢行列の3行目と等しくなります。

正規直行行列は転置すると逆行列になる

正規直行基底からなる行列を、正規直行行列(あるいは単に直行行列)と言います。正規直行基底とは、長さが1でお互いに直行している基底のことです。回転行列は正規直行行列になります。

一般的に逆行列を求めるのは面倒な計算で、必ずしも逆行列が存在するとも限りません。しかし、正規直行行列では転置するだけで必ず逆行列になるので、非常に簡単に求まります。

スケーリングやせん断変形、並行移動などの回転以外の変換が混じっていると正規直行ではなくなるので、姿勢を行列で持つ場合はそれらと回転成分とは分けておいた方が便利です。

左から行列を掛けるとローカル座標系での変換になる

姿勢を行列で保持している場合に、姿勢行列に対して左から変換行列を掛けると、ローカル座標系での変換になります。逆に右から掛けると、グローバル座標系での変換になります。

例えば飛行機の機首上げ(ピッチアップ)は、第三者から見れば飛行機の姿勢によって回転軸が変わりますが、その飛行機からすれば常に同じ方向の回転です。このような回転はローカル座標系で処理すると簡単になります。

VIEW行列は世界を動かす

3D CGではWORLD、VIEW、PROJECTIONという三段変換をよく使います。概念的にはワールド行列はオブジェクトの位置を表し、ビュー行列はカメラの位置を表しています。

しかし、実際のビュー行列の中身というのはこの考え方とは全くの逆で、カメラは動かずに世界を動かしてカメラに合わせるという変換をします。ワールド行列の感覚でビュー行列を作ると逆になってしまうので注意が必要です。

タグ:代数幾何
2009年06月19日 【プログラミング】 | コメント(0) |

この記事へのトラックバック
この記事へのコメント

コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。