クリッピング ボリューム

クリッピング ボリューム

射影行列の結果によって、射影空間でのクリッピング ボリュームが決まる。Microsoft® Direct3D® では、射影空間でのクリッピング ボリュームを次のように定義する。

クリッピング ボリューム

前の公式で、XYZW は射影トランスフォームを適用した後の頂点座標を表す。クリッピングが有効な場合 (デフォルト設定)、これらの範囲外に x、y、z 成分を持つ頂点がクリッピングされる。

頂点バッファを除き、アプリケーションでは、D3DRENDERSTATETYPE 列挙型レンダリング ステートを使ってクリッピングを有効または無効にする。頂点バッファのクリッピング情報は処理中に生成される。 詳細については、「固定機能頂点処理」および「プログラマブルな頂点処理」を参照すること。

Direct3D は頂点バッファのプリミティブのトランスフォーム済み頂点をクリッピングしない。 ただし、IDirect3DDevice9::ProcessVertices によるものは除く。独自のトランスフォームを実行する際に、Direct3D でクリッピングを行う必要がある場合は、頂点バッファを使うべきではない。この場合、アプリケーションがデータをトラバースしてトランスフォームし、Direct3D が再度データをトラバースしてクリッピングした後、ドライバがデータをレンダリングするので、効率的ではない。したがって、アプリケーションがデータをトランスフォームする場合は、データのクリッピングも行うべきである。

クリッピングが必要なトランスフォーム前のライティング済み頂点 (TL 頂点) をデバイスが 受け取ると、頂点はその rhw とビューポートの情報を使ってクリッピング空間に逆にトランスフォームされる。その後でクリッピングが実行される。この TL 頂点をクリッピングするための逆トランスフォームは、すべてのデバイスで実行できるわけではない。

D3DPMISCCAPS_CLIPTLVERTS デバイス能力は、デバイスが TL 頂点をクリッピングできるかどうかを示す。この能力が設定されていない場合は、レンダリングするデバイスに送る TL 頂点をアプリケーションでクリッピングする必要がある。ソフトウェア頂点処理モード (デバイス自体をソフトウェア頂点処理モードで作成するか、ミックス モードとして作成した頂点処理デバイスを、D3DRS_SOFTWAREVERTEXPROCESSING レンダリング ステートを使ってソフトウェア頂点処理モードに切り替える) では、デバイスは常に TL 頂点をクリッピングできる。