Platform SDK: DirectX

クリップ面の有効/無効

[C++]

クリップ面は、IDirect3DDevice7::SetClipPlane メソッドを呼び出しても自動的には有効にならないので注意する必要がある。デバイスに現在設定されているクリップ面を有効または無効にするには、D3DRENDERSTATE_CLIPPLANEENABLE レンダリング ステートを使用する。このレンダリング ステートは DWORD 値を受け取る。最下位ビットから始まる各ビットがクリップ面に対応する。1 ビットが設定されるとクリップ面が有効になり、このビットがクリアされるとそのクリップ面が無効になる。値については、ビット 0 はインデックス 0 のクリップ面を有効および無効にし、ビット 1 はインデックス 1 のクリップ面を制御する、という順でビット 31 まである (Direct3D では一度に最大 32 個の平面でクリッピングが可能であるが、デバイスでそれが可能かどうかはまちまちである)。このようなセマンティクスにより、アプリケーションでは 1 回の呼び出しであらゆるクリップ面を有効または無効にできる。

d3dtypes.h ヘッダー ファイルには D3DCLIPPLANEn マクロが定義されている。このマクロは、D3DRENDERSTATE_CLIPPLANEENABLE レンダリング ステートの値として組み合わせて渡すことができる値のパターンを作成する。次の C++ コードでは、このマクロを使用する。

// この例では、pd3dDevice 変数は IDirect3DDevice7 インターフェイスへの
// 有効なポインタである。

// クリップ面の 0 および 1 を有効にする。
// その他すべてのユーザー定義クリップ面は無効であるとする。
pd3dDevice->SetRenderState( D3DRENDERSTATE_CLIPPLANEENABLE, 
D3DCLIPPLANE0 | D3DCLIPPLANE1);
[Visual Basic]

クリップ面は、Direct3DDevice7.SetClipPlane メソッドを呼び出しても自動的には有効にならないので注意する必要がある。デバイスに現在設定されているクリップ面を有効または無効にするには、D3DRENDERSTATE_CLIPPLANEENABLE レンダリング ステートを使用する。このレンダリング ステートの値は、CONST_D3DCLIPPLANEFLAGS 列挙からの値である。この列挙からの値の組み合わせを指定すると、対応するクリップ面が有効になり、これらの値を省略すると、対応するクリップ面が無効になる (D3DCPF_DISABLEALL を使用すると、すべてのクリップ面が無効になる)。このようなセマンティクスにより、アプリケーションでは 1 回の呼び出しであらゆるクリップ面を有効または無効にできる。

次の Visual Basic コードは、このメソッドの使用方法を示す。

' この例では、d3dDevice 変数は Direct3DDevice7 オブジェクトへの
' 有効な参照である。

' クリップ面の 0 および 1 を有効にする。
' その他すべてのユーザー定義クリップ面は無効であるとする。
Call d3dDevice.SetRenderState(D3DRENDERSTATE_CLIPPLANEENABLE, _ 
(D3DCPF_ENABLEPLANE0 Or D3DCPF_ENABLEPLANE1))