ビュー変換View transform

"ビュー変換" は、ビューアーをワールド空間に配置し、頂点をカメラ空間に変換します。A view transform locates the viewer in world space, transforming vertices into camera space. カメラ空間では、カメラつまりビューアーは原点に位置し、Z 軸の正方向を向いています。In camera space, the camera, or viewer, is at the origin, looking in the positive z-direction. ビュー行列は、ワールド内のオブジェクトを、カメラの位置 (カメラ空間の原点) と方向を中心として再配置します。The view matrix relocates the objects in the world around a camera's position - the origin of camera space - and orientation. Direct3D では左手座標系が使われるため、z はシーンの奥へ向かうのが正方向となります。Direct3D uses a left-handed coordinate system, so z is positive into a scene.

ビュー行列を作成する方法は数多くあります。There are many ways to create a view matrix. どの場合も、カメラにはワールド空間での論理的な位置と方向があり、シーン内のモデルに適用されるビュー行列を作成する開始点として使われます。In all cases, the camera has some logical position and orientation in world space that is used as a starting point to create a view matrix that will be applied to the models in a scene. ビュー行列は、オブジェクトに平行移動と回転を適用し、カメラを原点とするカメラ空間に配置します。The view matrix translates and rotates objects to place them in camera space, where the camera is at the origin. ビュー行列を作成する方法の 1 つとして、平行移動行列と各軸に対する回転行列を結合する方法があります。One way to create a view matrix is to combine a translation matrix with rotation matrices for each axis. この方法では、次の一般的な行列方程式が適用されます。In this approach, the following general matrix equation applies.

ビュー変換の方程式

この式では、V は作成されるビュー行列、T はワールド内のオブジェクトを再配置する平行移動行列、Rₓ ~ Rz はオブジェクトを x 軸、y 軸、z 軸周りに回転させる回転行列を表します。In this formula, V is the view matrix being created, T is a translation matrix that repositions objects in the world, and Rₓ through Rz are rotation matrices that rotate objects along the x-, y-, and z-axis. 平行移動行列と回転行列は、ワールド空間でのカメラの論理的な位置と方向に基づきます。The translation and rotation matrices are based on the camera's logical position and orientation in world space. つまり、ワールド内でのカメラの論理的な位置を <10,20,100> とすると、平行移動行列の目的は、オブジェクトを x 軸に沿って -10 単位、y 軸に沿って -20 単位、z 軸に沿って -100 単位移動させることになります。So, if the camera's logical position in the world is <10,20,100>, the aim of the translation matrix is to move objects -10 units along the x-axis, -20 units along the y-axis, and -100 units along the z-axis. この式の回転行列は、カメラの方向を基準として、カメラ空間の軸がワールド空間からどの程度ずれた角度に回転されるかを表します。The rotation matrices in the formula are based on the camera's orientation, in terms of how much the axes of camera space are rotated out of alignment with world space. たとえば、先ほどのカメラが真下を向いているとすると、次の図に示すように、その z 軸はワールド空間の z 軸から 90 度 (π/2 ラジアン) ずれることになります。For example, if the camera mentioned earlier is pointing straight down, its z-axis is 90 degrees (pi/2 radians) out of alignment with the z-axis of world space, as shown in the following illustration.

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

回転行列は、大きさが同じで方向が逆の回転をシーン内のモデルに適用します。The rotation matrices apply rotations of equal, but opposite, magnitude to the models in the scene. このカメラのビュー行列には、x 軸を中心とした -90 度の回転が含まれています。The view matrix for this camera includes a rotation of -90 degrees around the x-axis. 回転行列は平行移動行列と結合され、シーン内のオブジェクトの上部がカメラに面するように、オブジェクトの位置と方向を調整するビュー行列が作成されます。これにより、カメラがモデルを上から見下ろすような構図が作り出されます。The rotation matrix is combined with the translation matrix to create a view matrix that adjusts the position and orientation of the objects in the scene so that their top is facing the camera, giving the appearance that the camera is above the model.

ビュー行列の設定Setting Up a View Matrix

Direct3D は、ワールド行列とビュー行列を使っていくつかの内部データ構造を構成します。Direct3D uses the world and view matrices to configure several internal data structures. 新しいワールド行列またはビュー行列を設定するたびに、関連付けられた内部構造がシステムによって再計算されます。Each time you set a new world or view matrix, the system recalculates the associated internal structures. これらの行列を頻繁に設定すると、計算に時間を要することになります。Setting these matrices frequently is computationally time-consuming. 必要な計算回数を最小限に抑えるには、ワールド行列とビュー行列を連結して 1 つのワールド ビュー行列を作成し、それをワールド行列として設定した後、ビュー行列を単位元に設定します。You can minimize the number of required calculations by concatenating your world and view matrices into a world-view matrix that you set as the world matrix, and then setting the view matrix to the identity. このとき、必要に応じてワールド行列を変更、連結、リセットできるように、個々のワールド行列とビュー行列のキャッシュ コピーを保持しておくことをお勧めします。Keep cached copies of individual world and view matrices that you can modify, concatenate, and reset the world matrix as needed.

関連トピックRelated topics

変換Transforms