Microsoft DirectX 8.0 (C++) |
フルシーン アンチエイリアシングとは、シーン内の各ポリゴンのエッジをシングル パスでラスタライズしてぼかすことを指す。2 つ目のパスは必要ない。フルシーン アンチエイリアシングは、サポートされている場合は三角形および三角形のグループにのみ影響する。Microsoft® Direct3D® サービスを使用して線にアンチエイリアシングを適用することはできない。Direct3D では、フルシーン アンチエイリアシングを実行するには、各ピクセルにマルチサンプリングを使用する。マルチサンプリングが有効な場合、ピクセルのすべてのサブサンプルが 1 つのパスで更新されるが、複数のレンダリング パスを含むほかのエフェクトに使用される場合は、アプリケーションでサブサンプルの一部だけが指定のレンダリング パスに影響を受けるよう指定できる。この後者のアプローチによって、モーション ブラー、フィールド フォーカス エフェクトの深度、反射ブラーなどをシミュレートすることができる。
どちらの場合も、ピクセルごとに記録されたさまざまなサンプルがブレンドされ、スクリーンに出力される。このようなアプローチを使用すると、アンチエイリアシングやほかのエフェクトのイメージ品質が向上する。
IDirect3D8::CreateDevice でデバイスを作成する前に、フルシーン アンチエイリアシングがサポートされているかどうかを調べる必要がある。調べるには、IDirect3D8::CheckDeviceMultiSampleType メソッドを呼び出す。次のコードに例を示す。
/* * このコードでは、pD3D は IDirect3D8 インターフェイスへの * 有効なポインタであると仮定している。 */ if( SUCCEEDED(pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL , D3DFMT_R8G8B8, FALSE, D3DMULTISAMPLE_2_SAMPLES ) ) ) // フルシーン アンチエイリアシングがサポートされている。ここで有効にする。
CheckDeviceMultiSampleType が受け取る第 1 パラメータは、問い合わせるディスプレイ アダプタを示す序数である。この例では、D3DADAPTER_DEFAULT を使用してプライマリ ディスプレイ アダプタを指定する。第 2 パラメータは D3DDEVTYPE 列挙型の値で、デバイスの種類を指定する。第 3 パラメータには、サーフェスのフォーマットを指定する。第 4 パラメータは、フルウィンドウ マルチサンプリング (TRUE) またはフルスクリーン アンチエイリアシング (FALSE) を問い合わせるかどうかを Direct3D に知らせる。この例では FALSE を使用して、フルシーン アンチエイリアシングについて問い合わせることを Direct3D に指示している。最後のパラメータには、テストするマルチサンプリング テクニックを指定する。D3DMULTISAMPLE_TYPE 列挙型の値を使用する。この例では、2 つのレベルのマルチサンプリングがサポートされているかどうかをテストする。
デバイスが使用したい 2 つのレベルのマルチサンプリングをサポートしている場合、次の手順は、マルチサンプルのレンダリング サーフェスを作成するために、D3DPRESENT_PARAMETERS 構造体の適切なメンバにデータを設定して、プレゼンテーション パラメータを設定することである。設定した後は、デバイスを作成することができる。次のサンプル コードは、マルチサンプリングのレンダリング サーフェスでデバイスを設定する方法を示している。
/* * この例では、pD3D は IDirect3D8 インターフェイスへの有効なポインタであり、 * d3dDevice は IDirect3DDevice8 インターフェイスへのポインタ、 * hWnd はウィンドウへの * 有効なハンドルであると仮定している。 */ D3DPRESENT_PARAMETER d3dPP ZeroMemory( &d3dPP, sizeof( d3dPP ) ); d3dPP.Windowed = FALSE d3dPP.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dPP.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES; pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3dDevice)
注 マルチサンプリングを使用するには、D3DPRESENT_PARAMETER の SwapEffect メンバを D3DSWAPEFFECT_DISCARD に設定する必要がある。
最後の手順は、IDirect3DDevice8::SetRenderState メソッドを呼び出して D3DRS_MULTISAMPLEANTIALIAS を TRUE に設定することによって、マルチサンプリングのアンチエイリアシングを有効にすることである。この値に TRUE を設定した後は、レンダリングには必ずマルチサンプリングが適用される。レンダリング対象に応じて、マルチサンプリングの有効/無効を切り替えることもできる。