3DCGの座標系の紹介

投稿日:

はじめに

こんにちは!

今日は、3DCGにかかせない座標系の話をするよ!


座標系の種類

では、オブジェクトから画面まで、どのような座標系があるか紹介します。
.

座標系一覧

呼び方が変わりますが、細かく分けると次のような流れになっています。
各々の変換とよばれている部分が行列を掛け算することに相当します。
座標はベクトルとし、このベクトルに座標を掛け算して、次の座標系へ移動していきます。
この手法は、アフィン変換と呼ばれています。
より具体的に話すと、3Dの座標のベクトルは[x, y, z, 1]の4点を持ち、ここに4×4行列を掛け算していく処理です。
なぜ3Dの座標なのに、4つの値をもっているかというと、移動のアフィン変換をするときに必要となるためです。
.
1. オブジェクト座標系・ローカル座標系・モデル座標系
. ↓(ワールドトランスフォーム・モデリング変換)
2. ワールド座標系・グローバル座標系
. ↓(ビュートランスフォーム・視野変換・ビューイング変換)
3. 視点座標系・カメラ座標系
. ↓(プロジェクショントランスフォーム・投影変換・射影トランスフォーム)
4. クリッピング座標系・クリップ座標系
. ↓(遠近除算)
5. 正規化デバイス座標系
. ↓(ビューポート変換)
6. ウインドウ座標系・スクリーン座標系
.

1. ローカル座標系

描写したいオブジェクト自身が開始点[0, 0, 0]となる座標系です。
ボーンとか持つ場合はさらに細かい座標系があります。
絵を見せれば一発なのですが、そこはググってください。
.

2. ワールド座標系

世界の座標です。この世界の中にいろいろなモデルが設置されます。
表示させたいオブジェクト座標の全てのオブジェクトを一度この世界に配置させます。
ワールド座標への変換をワールドトランスフォームと呼びます。
この変換に必要な行列は、オブジェクトの座標と回転情報から作成します。
DirectXでは、D3DXMatrixScaling, D3DXMatrixRotation, D3DXMatrixTranslation
OpenGLでは、glMatrixMode(GL_MODELVIEW)にてglScale、glRotate、glTranslate
.

3. カメラ座標系

カメラの前に世界が広がっている仮定した座標系です。
カメラの視点の座標を[0,0,0]とする変換です。
カメラ座標系への変換をビュートランスフォームと呼びます。
この変換に必要な行列は、カメラの座標とカメラが注視している座標から作成します。
DirectXでは、D3DXMatrixLookAtLH
OpenGLでは、gluLookAt
.

4. クリッピング座標系

近くのものは大きく、遠くのものは小さくなる空間です。
実際には、近くのものは大きく、遠くのものは小さくする透視変換と
近くのものも、遠くのものも同じ大きさにする正射影変換の2種類があります。
透視変換では、目の前にある木の本数は少なく、遠くの山のほうたくさんの木が見えることとなります。
この近くが小さく、遠くのほうが大きい台形の形が見える体積=視体積を、視錐台(しすいだい)と呼びます。
この変換を、プロジェクショントランスフォームと呼びます。
DirectXでは、D3DXMatrixPerspective
OpenGLでは、glMatrixMode(GL_PROJECTION)にてgluPerspective
.

5. 正規化デバイス座標系

プロジェクショントランスフォームは、行列を掛けただけですが、この行列を掛けた後の座標ベクトル(x, y, z, w)にたいして、
(x/w, y/w, z/w)とwで割った後の座標系です。
この計算は行列の掛け算(アフィン変換)で計算できないため、
プロジェクショントランスフォームの中でwに遠くのものを小さくするといった情報をつめこみ、wで割るというのを単独で処理をさせます。
なお、wで割ることで歪むのですが、逆にwで掛け算すれば元の値にもどること示します。
すこし脱線しますが、テクスチャマッピングする際は、
このwの値を保持して計算を行わないと、昔の3Dゲームの壁や床のテクスチャのような歪み方をします。
これをパースペクティブコレクトと呼ばれます。
.

6. スクリーン座標系

実際にウィンドウなどに表示させるための変換です。
表示させる画面の横サイズ、縦サイズから計算させます。
DirectXでは、SetViewport
OpenGLでは、glViewport


さいごに

今回は、様々な座標系があることを説明しました。

ローカル座標系から、ワールド座標系、カメラ座標系へは直感的でわかりやすいのですが、
クリッピング座標系、正規化デバイス座標系、スクリーン座標系については、なんとなく理解しているだけで、
実際の内部の変換はどのようになっているか、あんまり知らない方も多いかと思います。

次回は、その変換の話にふみこんで解説していきたいですねー。
なお、「その70 完全ホワイトボックスなパースペクティブ射影変換行列」が
とても参考になりますので、気になる方はみると良いです!

ではまた!

広告

コメントをどうぞ(承認された後に公開されます。メールアドレスの記入は自由ですが、記入した場合でも一般公開されることはありません)

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中