ビューポートとクリッピングViewports and clipping

"ビューポート" とは、3D シーンが投影される 2 次元 (2D) の矩形です。A viewport is a two-dimensional (2D) rectangle into which a 3D scene is projected. Direct3D では、この四角形は Direct3D サーフェス内の座標として存在し、システムによってレンダー ターゲットとして使われます。In Direct3D, the rectangle exists as coordinates within a Direct3D surface that the system uses as a rendering target. 射影変換は、頂点をビューポートで使われる座標系に変換します。The projection transformation converts vertices into the coordinate system used for the viewport. ビューポートは、シーンがレンダリングされるレンダー ターゲット サーフェス上の深度値の範囲 (通常は 0.0 ~ 1.0) を指定するためにも使われます。A viewport is also used to specify the range of depth values on a render-target surface into which a scene will be rendered (usually 0.0 to 1.0).

The Viewing Frustum

視錐台とは、ビューポートのカメラに対して相対的に配置された、シーン内の 3D ボリュームです。A viewing frustum is 3D volume in a scene positioned relative to the viewport's camera. カメラ空間から画面にモデルがどのように投影されるかは、このボリュームの形に影響されます。The shape of the volume affects how models are projected from camera space onto the screen. 最も一般的な種類の投影である透視投影では、カメラの近くにあるオブジェクトを、離れた位置のオブジェクトよりも大きく表示します。The most common type of projection, a perspective projection, is responsible for making objects near the camera appear bigger than objects in the distance. 透視ビューの場合、視錐台は先端にカメラのある四角錐と考えることができます。これを図で表すと次のようになります。For perspective viewing, the viewing frustum can be visualized as a pyramid, with the camera positioned at the tip as shown in the following illustration. この四角錐は、前方および後方のクリッピング面と交差します。This pyramid is intersected by a front and back clipping plane. 四角錐を前方と後方のクリッピング面で切り取ったボリュームが、視錐台です。The volume within the pyramid between the front and back clipping planes is the viewing frustum. オブジェクトは、このボリュームの内部にある場合にのみ表示されます。Objects are visible only when they are in this volume.

視錐台と前方および後方のクリッピング面を表した図

暗い部屋に立って正方形の窓から外を眺めたところを想像すると、視錐台のイメージがよくわかります。If you imagine that you are standing in a dark room and looking through a square window, you are visualizing a viewing frustum. この例では、前方のクリッピング面は窓であり、後方のクリッピング面は視界を最終的に遮るものになります。たとえば、道路の向こうにある高層ビルや、遠くに見える山並みの場合もあれば、何もない場合もあります。In this analogy, the near clipping plane is the window, and the back clipping plane is whatever finally interrupts your view - the skyscraper across the street, the mountains in the distance, or nothing at all. 四角錐の窓から視界を遮るものまでの間を切り取った内部はすべて見渡すことができ、それ以外の部分は何も見えません。You can see everything inside the truncated pyramid that starts at the window and ends with whatever interrupts your view, and you can see nothing else.

視錐台は、fov (視野) と、z 座標で指定される前方クリッピング面と後方クリッピング面の間の距離によって定義されます。これを次の図に示します。The viewing frustum is defined by fov (field of view) and by the distances of the front and back clipping planes, specified in z-coordinates, as shown in the following diagram.

視錐台の図

この図において変数 D は、カメラから、ジオメトリ パイプラインの直前の部分 (ビュー変換) で定義された空間の原点までの距離を表します。In this diagram, the variable D is the distance from the camera to the origin of the space that was defined in the last part of the geometry pipeline - the viewing transformation. この空間の周りに視錐台の限界を設定します。This is the space around which you arrange the limits of your viewing frustum. この変数 D が射影行列の構築時にどのように使われるかについては、「射影変換」をご覧ください。For information about how this D variable is used to build the projection matrix, see the Projection transform

Viewport の四角形Viewport Rectangle

ビューポート構造体には、シーンのレンダリング先となるレンダー ターゲット サーフェスの領域を定義する 4 つのメンバー (X、Y、Width、Height) が含まれています。A viewport struct contains four members (X, Y, Width, Height) that define the area of the render-target surface into which a scene will be rendered. これらの値は、次の図に示すように、出力先の四角形、つまりビューポート矩形に対応します。These values correspond to the destination rectangle, or viewport rectangle, as shown in the following diagram.

ビューポート矩形の図

X、Y、Width、Height の各メンバーに指定する値は、レンダー ターゲット サーフェスの左上隅を基準とした相対的なスクリーン座標です。The values you specify for the X, Y, Width, Height members are screen coordinates relative to the upper-left corner of the render-target surface. 構造体には他に、シーンがレンダリングされる深度範囲を示す 2 つのメンバー (MinZ と MaxZ) も定義されています。The structure defines two additional members (MinZ and MaxZ) that indicate the depth-ranges into which the scene will be rendered.

Direct3D では、ビューポートのクリッピング ボリュームの範囲として、X は -1.0 ~ 1.0、Y は 1.0 ~ -1.0 を想定しています。これらは、過去のアプリケーションで最もよく使われた設定です。Direct3D assumes that the viewport clipping volume ranges from -1.0 to 1.0 in X, and from 1.0 to -1.0 in Y. These were the settings used most often by applications in the past. クリッピングの前に射影変換を使うことで、ビューポートの縦横比を調整できます。You can adjust the viewport aspect ratio before clipping using the projection transform.

  されおよび MaxZ シーンのレンダリング先の深さの範囲を示すためし、クリッピングは使用されません。Note   MinZ and MaxZ indicate the depth-ranges into which the scene will be rendered and are not used for clipping. ほとんどのアプリケーションでは、システムが深度バッファー内の深度値の範囲全体をレンダリングできるように、これらの値を 0.0 と 1.0 に設定します。Most applications will set these values to 0.0 and 1.0, to enable the system to render to the entire range of depth values in the depth buffer. 場合によっては、他の深度範囲を使って特殊効果を実現することもできます。In some cases, you can achieve special effects by using other depth ranges. たとえば、ゲームのヘッドアップ ディスプレイをレンダリングする場合、両方の値を 0.0 に設定すると、シーン内のオブジェクトを強制的に前面にレンダリングできます。または、両方を 1.0 に設定すると、常に背面に置く必要のあるオブジェクトをレンダリングできます。For instance, to render a heads-up display in a game, you can set both values to 0.0 to force the system to render objects in a scene in the foreground, or you might set them both to 1.0 to render an object that should always be in the background.

 

ビューポート構造体の X、Y、Width、Height の各メンバーで使われる寸法は、レンダー ターゲット サーフェス上のビューポートの位置とサイズを定義します。The dimensions used in the X, Y, Width, Height members of a viewport struct define the location and dimensions of the viewport on the render-target surface. これらの値は、サーフェスの左上隅を基準とした相対的なスクリーン座標を示します。These values are in screen coordinates, relative to the upper-left corner of the surface.

Direct3D は、ビューポートの位置とサイズを使って頂点をスケーリングし、レンダリングするシーンをターゲット サーフェス上の適切な位置に配置します。Direct3D uses the viewport location and dimensions to scale the vertices to fit a rendered scene into the appropriate location on the target surface. Direct3D の内部では、これらの値が次の行列に挿入され、各頂点に適用されます。Internally, Direct3D inserts these values into the following matrix that is applied to each vertex.

各頂点に適用される行列

この行列は、ビューポートのサイズと指定の深度範囲に従って頂点をスケーリングし、レンダー ターゲット サーフェスの適切な位置に平行移動します。This matrix scales vertices according to the viewport dimensions and desired depth range and translates them to the appropriate location on the render-target surface. また、この行列は、左上隅のスクリーン原点から y を下方へ増やした位置を反映するように y 軸を反転します。The matrix also flips the y-coordinate to reflect a screen origin at the top-left corner with y increasing downward. この行列を適用、頂点は同種でも - は、まだ存在するいるとしたら[x、y、z、w]頂点 - とそれらはラスタライザーに送信される前に、の非同種の座標に変換する必要があります。After this matrix is applied, vertices are still homogeneous - that is, they still exist as [x,y,z,w] vertices - and they must be converted to non-homogeneous coordinates before being sent to the rasterizer.

  アプリケーション通常に設定されおよび MaxZ 0.0 と 1.0 それぞれに、システム全体の深さの範囲を表示するためにします。Note   Applications typically set MinZ and MaxZ to 0.0 and 1.0 respectively to cause the system to render to the entire depth range. ただし、他の値を使って特定の効果を得ることもできます。However, you can use other values to achieve certain affects. たとえば、両方の値を 0.0 に設定してすべてのオブジェクトを強制的に前面に配置したり、両方を 1.0 に設定してすべてのオブジェクトを背面にレンダリングしたりできます。For example, you might set both values to 0.0 to force all objects into the foreground, or set both to 1.0 to render all objects into the background.

 

ビューポートのクリアClearing a Viewport

ビューポートをクリアすると、レンダー ターゲット サーフェス上のビューポート矩形の内容がリセットされます。Clearing the viewport resets the contents of the viewport rectangle on the render-target surface. さらに、深度バッファー サーフェスとステンシル バッファー サーフェスの矩形もクリアできます。It can also clear the rectangle in the depth and stencil buffer surfaces.

クリッピングのビューポートを設定します。Set Up the Viewport for Clipping

射影行列の結果によって、次のように射影空間のクリッピング ボリュームが決まります。The results of the projection matrix determine the clipping volume in projection space as:

-wc<= xc<= wc-wc<= xc<= wc

-wc<= yc<= wc-wc<= yc<= wc

0 <= zc<= wc0 <= zc<= wc

x、y、z、w は、射影変換が適用された後の頂点の座標を表します。Where: x, y, z, and w represent the vertex coordinates after the projection transformation is applied. クリッピングが有効な場合 (既定の動作)、x、y、z の各要素がこれらの範囲外にある頂点はすべてクリッピングされます。Any vertices that have an x-, y-, or z-component outside these ranges are clipped, if clipping is enabled (the default behavior).

関連トピックRelated topics

座標系とジオメトリCoordinate systems and geometry