共用方式為


Full-Scene 抗鋸齒 (Direct3D 9)

全場景反鋸齒是指模糊場景中每個多邊形的邊緣,因為它在單一傳遞中點陣化:不需要第二次通過。 支援時,全場景反鋸齒只會影響三角形和三角形群組。 無法透過 Direct3D 服務對線條進行反鋸齒處理。 在 Direct3D 中,使用多重取樣技術實現在每個像素上的全螢幕抗鋸齒。 啟用多重取樣時,圖元的所有子取樣都會在一個階段更新,但用於涉及多個轉譯階段的其他效果時,應用程式可以指定只有某些子取樣會受到指定轉譯階段的影響。 這個後一種方法可讓您模擬動作模糊、景深焦點效果、反射模糊等等。

在這兩種情況下,針對每個圖元記錄的各種樣本會混合在一起,並輸出到畫面。 這能夠改善反鋸齒或其他效果的影像品質。

使用 IDirect3D9::CreateDevice 方法來建立裝置之前,您必須判斷是否支援全場景反鋸齒。 呼叫 IDirect3D9::CheckDeviceMultiSampleType 方法來執行此動作,如下列程式代碼範例所示。

/*
* The code below assumes that pD3D is a valid pointer 
*   to a IDirect3D9 interface.
*/

if( SUCCEEDED(pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT, 
                    D3DDEVTYPE_HAL , D3DFMT_R8G8B8, FALSE, 
                    D3DMULTISAMPLE_2_SAMPLES, NULL ) ) )
// Full-scene antialiasing is supported. Enable it here.

IDirect3D9::CheckDeviceMultiSampleType 接受的第一個參數是代表要查詢之顯示配接器的序數位。 此範例會使用 D3DADAPTER_DEFAULT 來指定主要顯示配接器。 第二個參數是來自 D3DDEVTYPE 列舉型別的值,指定裝置類型。 第三個參數會指定介面的格式。 第四個參數會告訴 Direct3D 是否要查詢全螢幕多重取樣(TRUE)或全景反鋸齒(FALSE)。 此範例會使用 FALSE 來通知 Direct3D 詢問關於完整場景抗鋸齒。 最後一個參數會指定您想要測試的多重取樣技術。 使用來自 D3DMULTISAMPLE_TYPE 列舉型別的值。 此範例會測試以查看是否支援兩個層級的多重取樣。

如果裝置支援您想要使用的多重取樣層級,下一個步驟是填入 D3DPRESENT_PARAMETERS 結構的適當成員來設定簡報參數,以建立多取樣轉譯介面。 之後,您可以建立裝置。 下列範例程式代碼示範如何使用多重取樣轉譯介面來設定裝置。

/*
* The example below assumes that pD3D is a valid pointer 
* to a IDirect3D9 interface, d3dDevice is a pointer to a 
* IDirect3DDevice9 interface, and hWnd is a valid handle
* to a window.
*/

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。

最後一個步驟是呼叫 IDirect3DDevice9::SetRenderState 方法,並將D3DRS_MULTISAMPLEANTIALIAS設定為 TRUE,以啟用多重取樣反鋸齒功能。 將此值設定為 TRUE之後,您所做的任何轉譯都會套用多重取樣。 視您要轉譯的內容而定,您可能想要啟用和停用多重取樣。

反鋸齒