ビュー変換

"ビュー変換" は、ビューアーをワールド空間に配置し、頂点をカメラ空間に変換します。 カメラ空間では、カメラつまりビューアーは原点に位置し、Z 軸の正方向を向いています。 ビュー行列は、ワールド内のオブジェクトを、カメラの位置 (カメラ空間の原点) と方向を中心として再配置します。 Direct3D では左手座標系が使われるため、z はシーンの奥へ向かうのが正方向となります。

ビュー行列を作成する方法は数多くあります。 どの場合も、カメラにはワールド空間での論理的な位置と方向があり、シーン内のモデルに適用されるビュー行列を作成する開始点として使われます。 ビュー行列は、オブジェクトに平行移動と回転を適用し、カメラを原点とするカメラ空間に配置します。 ビュー行列を作成する方法の 1 つとして、平行移動行列と各軸に対する回転行列を結合する方法があります。 この方法では、次の一般的な行列方程式が適用されます。

ビュー変換の方程式

この式では、V は作成されるビュー行列、T はワールド内のオブジェクトを再配置する平行移動行列、Rₓ ~ Rz はオブジェクトを x 軸、y 軸、z 軸周りに回転させる回転行列を表します。 平行移動行列と回転行列は、ワールド空間でのカメラの論理的な位置と方向に基づきます。 つまり、ワールド内でのカメラの論理的な位置を <10,20,100> とすると、平行移動行列の目的は、オブジェクトを x 軸に沿って -10 単位、y 軸に沿って -20 単位、z 軸に沿って -100 単位移動させることになります。 この式の回転行列は、カメラの方向を基準として、カメラ空間の軸がワールド空間からどの程度ずれた角度に回転されるかを表します。 たとえば、先ほどのカメラが真下を向いているとすると、次の図に示すように、その z 軸はワールド空間の z 軸から 90 度 (π/2 ラジアン) ずれることになります。

カメラのビュー空間をワールド空間と比較した図

回転行列は、大きさが同じで方向が逆の回転をシーン内のモデルに適用します。 このカメラのビュー行列には、x 軸を中心とした -90 度の回転が含まれています。 回転行列は平行移動行列と結合され、シーン内のオブジェクトの上部がカメラに面するように、オブジェクトの位置と方向を調整するビュー行列が作成されます。これにより、カメラがモデルを上から見下ろすような構図が作り出されます。

ビュー行列の設定

Direct3D は、ワールド行列とビュー行列を使っていくつかの内部データ構造を構成します。 新しいワールド行列またはビュー行列を設定するたびに、関連付けられた内部構造がシステムによって再計算されます。 これらの行列を頻繁に設定すると、計算に時間を要することになります。 必要な計算回数を最小限に抑えるには、ワールド行列とビュー行列を連結して 1 つのワールド ビュー行列を作成し、それをワールド行列として設定した後、ビュー行列を単位元に設定します。 このとき、必要に応じてワールド行列を変更、連結、リセットできるように、個々のワールド行列とビュー行列のキャッシュ コピーを保持しておくことをお勧めします。

変換