Microsoft DirectX 8.0 (C++) |
エッジ アンチエイリアシングでは、シーンをレンダリングした後、オブジェクトの凸状シルエットを再レンダリングして、線にアンチエイリアシングする。システムは辺を再描画し、ぼかして、不自然な効果を減らす。
まず、IDirect3DDevice8::GetDeviceCaps メソッドを呼び出して、Microsoft® Direct3D® デバイスがアンチエイリアシングをサポートしているかどうかを調べる。デバイスがエッジ アンチエイリアシングをサポートしている場合は、GetDeviceCaps が D3DCAPS8 構造体の D3DPRASTERCAPS_ANTIALIASEDGES 能力フラグを TRUE に設定する。
デバイスがアンチエイリアシングをサポートしている場合は、D3DRS_EDGEANTIALIAS レンダリング ステートを TRUE に設定する。次のコードに例を示す。
d3dDevice->SetRenderState( D3DRS_EDGEANTIALIAS, TRUE );
次に、IDirect3DDevice8::DrawPrimitive、および D3DPT_LINESTRIP または D3DPT_LINELIST プリミティブ タイプのいずれかを使用して、シーン内のエッジのみ再描画する。エッジ アンチエイリアシングの動作は、線以外のプリミティブについては定義されていないため、アンチエイリアシングが完了したら、D3DRS_EDGEANTIALIAS を FALSE に設定して機能を確実に無効にする。
シーンの中のすべてのエッジを再描画すると、大きな不自然な効果を生じさせずに済むが、計算量が膨大になる。また、この方法ではどのエッジをアンチエイリアシングするべきか判断が困難なこともある。再描画するのにもっとも重要なエッジは、非常に異なる色の領域の間のエッジ (たとえば影のエッジ)、または非常に異なるマテリアルの間の境界である。ほぼ同じ色の 2 つのポリゴンの間のエッジをアンチエイリアシングすることに意味はないが、計算量は膨大である。このような理由により、現在のハードウェアがフルシーン アンチエイリアシングをサポートしているのであれば、これが好ましいことが多い。詳細については、「フルシーン アンチエイリアシング」を参照すること。