ビュー座標変換

■カメラ変換

ビュー座標変換はワールド座標内に設置されたカメラの位置が
原点座標になるように計算を行います。
ビュー座標変換はカメラ座標座標変換ともよばれています。

■設定情報

変換には以下の情報に対して設定が必要です。
gmpg_0011

カメラ座標:
	カメラの位置座標
	
注視点座標:
	カメラがどこを見ているのかを明確にするための座標
	
カメラの上方向のベクトル:
	カメラの上方向のベクトル(ワールド座標でのベクトル)

上方向のベクトルはカメラを原点とした座標系を作成するために使用します。

■変換の流れ

gmpg_0012
上の図にあるようにカメラ座標変換はカメラを原点として扱い、
その過程で行われた計算結果をワールド座標に配置されている
全てのオブジェクトに反映します。

■カメラの座標軸作成

原点とするためにまずはカメラの座標軸を作成します。
カメラの座標軸を作成するためにはカメラの位置(座標)と注視点座標、
上方向のベクトルの情報が必要です。
座標軸作成の例としてカメラ座標(100, 100, 100)、注視点(250, 250, 250)、
上方向ベクトル(0, 1, 0)のカメラを原点とする座標軸の作成を行いたいと思います。

まず、注視点の座標からカメラ座標を引いてZ軸のベクトルとします。
これは単純に注視点の座標からカメラ座標を引いて出た結果をZ軸として使用します。

	gmpg_0021

次はカメラの上方向ベクトルとZ軸のベクトルの外積を求めてその結果をX軸とします。

	gmpg_0022

※外積の結果は二つのベクトルに対して直行している(垂直に交わる)ベクトルになります。

最後のY軸はX軸のベクトルとY軸のベクトルの外積を求めて出た値をY軸として使用します。
	
	gmpg_0023

なぜ上方向ベクトルをY軸として使用しないのかというと、このベクトルは
X軸とも、Z軸とも直行しているかどうか不明です。
座標軸はX、Y、Zのベクトルが垂直に交わっている必要があります。
なので、直行しているかどうか不明な上方向ベクトルは使えません。

■回転行列の作成

ワールド座標の座標軸であるX(1,0,0)、Y(0,1,0)、Z(0,0,1)のベクトルを
カメラの座標軸に変換する場合は、カメラ座標軸のベクトルが
そのまま回転行列として使用されます。

	gmpg_0024

■移動の値を求める

移動値はカメラ座標に変換された座標系を基準としなければいません。
この移動値は単純にカメラ座標がそのまま移動値になるのではなく、
カメラの座標軸とカメラ座標の内積を使用して移動値を算出します。
以下の図は内積による移動値算出と移動値の行列です。

	gmpg_0025
	gmpg_0026

■オブジェクトに反映

今まで作成してきた座標変換をまとめると以下の図のようになります。

	gmpg_0032

ただ、この行列はワールド座標上にカメラを設置するための行列なので
カメラを原点とするためにはこの行列を逆行列にする必要があります。

	gmpg_0028
カメラ座標の逆行列は以下の内容になります。

	gmpg_0027