Microsoft DirectX 8.0 (Visual Basic)

フルシーン アンチエイリアシング

フルシーン アンチエイリアシングとは、シーン内の各ポリゴンのエッジをシングル パスでラスタライズしてぼかすことを指す。2 つ目のパスは必要ない。フルシーン アンチエイリアシングは、サポートされている場合は三角形および三角形のグループにのみ影響する。Microsoft® Direct3D® サービスを使用して線にアンチエイリアシングを適用することはできない。Direct3D では、フルシーン アンチエイリアシングを実行するには、各ピクセルにマルチサンプリングを使用する。マルチサンプリングが有効な場合、ピクセルのすべてのサブサンプルが 1 つのパスで更新されるが、複数のレンダリング パスを含むほかのエフェクトに使用される場合は、アプリケーションでサブサンプルの一部だけが指定のレンダリング パスに影響を受けるよう指定できる。この後者のアプローチによって、モーション ブラー、フィールド フォーカス エフェクトの深度、反射ブラーなどをシミュレートすることができる。

どちらの場合も、ピクセルごとに記録されたさまざまなサンプルがブレンドされ、スクリーンに出力される。このようなアプローチを使用すると、アンチエイリアシングやほかのエフェクトのイメージ品質が向上する。

Direct3D8.CreateDevice メソッドでデバイスを作成する前に、フルシーン アンチエイリアシングがサポートされているかどうかを調べる必要がある。このためには、Direct3D8.CheckDeviceMultiSampleType メソッドを呼び出す。次のコードに例を示す。

'
' このコードでは、D3D は Direct3D8 オブジェクトへの
' 有効なポインタであると仮定している。
'

D3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT,
                                 D3DDEVTYPE_HAL , D3DFMT_R8G8B8,
                                 FALSE, D3DMULTISAMPLE_2_SAMPLES ) ) )

CheckDeviceMultiSampleType が受け取る第 1 パラメータは、問い合わせるディスプレイ アダプタを示す序数である。この例では、D3DADAPTER_DEFAULT を使用してプライマリ ディスプレイ アダプタを指定する。第 2 パラメータは CONST_D3DDEVTYPE 列挙型の値で、デバイスの種類を指定する。第 3 パラメータには、サーフェスのフォーマットを指定する。第 4 パラメータは、フルウィンドウ マルチサンプリング (TRUE) またはフルスクリーン アンチエイリアシング (FALSE) を問い合わせるかどうかを Direct3D に知らせる。この例では FALSE を使用して、フルシーン アンチエイリアシングについて問い合わせることを Direct3D に指示している。最後のパラメータは、テストするマルチサンプリング手法を指定する。CONST_D3DMULTISAMPLE_TYPE 列挙型の値を使用する。この例では、2 つのレベルのマルチサンプリングがサポートされているかどうかをテストする。

デバイスが使用したい 2 つのレベルのマルチサンプリングをサポートしている場合、次の手順は、マルチサンプルのレンダリング サーフェスを作成するために、D3DPRESENT_PARAMETERS 構造体の適切なメンバにデータを設定して、プレゼンテーション パラメータを設定することである。設定した後は、デバイスを作成することができる。次のサンプル コードは、マルチサンプリングのレンダリング サーフェスでデバイスを設定する方法を示している。

'
' 以下のコードでは、pD3D は有効な Direct3D8 オブジェクトであり、
' D3DDevice は有効な Direct3DDevice8 オブジェクトであると仮定している。
'

Dim d3dpp As D3DPRESENT_PARAMETER
d3dpp.Windowed = FALSE
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD
d3dpp.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES
Set D3DDevice = pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                   D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp )

  マルチサンプリングを使用するには、D3DPRESENT_PARAMETER の SwapEffect メンバを D3DSWAPEFFECT_DISCARD に設定する必要がある。

最後の手順は、Direct3DDevice8.SetRenderState メソッドを呼び出して D3DRS_MULTISAMPLEANTIALIAS を TRUE に設定することによって、マルチサンプリングのアンチエイリアシングを有効にすることである。この値に TRUE を設定した後は、レンダリングには必ずマルチサンプリングが適用される。シーンにレンダリングする対象に応じて、マルチサンプリングの有効/無効を切り替えることもできる。