ビューポートのスケーリング

ビューポートのスケーリング

ビューポート用の D3DVIEWPORT9 構造体の XYWidthHeight メンバに位置とサイズを指定して、レンダリング ターゲット サーフェイスのビューポートの位置と大きさを定義する。これらの値は、レンダリング ターゲット サーフェイスの左上角からのスクリーン座標である。

Microsoft® Direct3D® では、ビューポートの位置とサイズを使って頂点をスケーリングし、レンダリングするシーンをターゲット サーフェイス上の適切な位置に配置する。内部的には、Direct3D は、各頂点に適用する行列にこれらの値を挿入している。

行列

この行列は、ビューポートのサイズおよび指定の深度範囲に従って頂点をスケーリングし、その頂点をレンダリング ターゲット サーフェイスの適切な位置に平行移動する。また、この行列は、y が下方に増加する左上角のスクリーン原点を反映するために y 座標を反転する。この行列を適用した後も、頂点は同次である。つまり、頂点は依然として [x,y,z,w] 頂点として存在するので、ラスタライザに送る前に頂点を非同次にトランスフォームしなければならない。

  ビューポート スケーリング行列は、頂点をスケーリングする D3DVIEWPORT9 構造体の MinZ および MaxZ メンバを組み込んで深度範囲 [MinZ, MaxZ] を合わせる。これは、これらのメンバがクリッピングに使われていた旧リリースの Microsoft DirectX® のセマンティクスとは異なる。

  詳細については、「ビューポート矩形」および「クリッピング ボリューム」を参照すること。アプリケーションでは、通常、MinZ および MaxZ をそれぞれ 0.0 および 1.0 に設定して深度範囲全体へのレンダリングを実行する。ただし、別の値を設定して何らかのエフェクトを得ることもできる。両方の値を 0.0 に設定してすべてのオブジェクトを強制的にフォアグラウンドにレンダリングしたり、両方の値を 1.0 に設定してすべてのオブジェクトをバックグラウンドにレンダリングしたりできる。