Full-Scene Antialiasing (Direct3D 9)

Antialias adegan penuh mengacu pada pengaburan tepi setiap poligon di adegan karena dirasterisasi dalam satu pass; tidak diperlukan pass kedua. Antialias adegan penuh, jika didukung, hanya memengaruhi segitiga dan kelompok segitiga. Garis tidak dapat diantisipasi dengan menggunakan layanan Direct3D. Antialias adegan penuh dilakukan di Direct3D dengan menggunakan multisampling pada setiap piksel. Saat multisampling diaktifkan, semua subsampel piksel diperbarui dalam satu pass tetapi ketika digunakan untuk efek lain yang melibatkan beberapa pass penyajian, aplikasi dapat menentukan bahwa hanya beberapa subsampel yang akan dipengaruhi oleh kode penyajian tertentu. Pendekatan terakhir ini memungkinkan simulasi buram gerakan, efek fokus kedalaman bidang, pantulan kabur, dan sebagainya.

Dalam kedua kasus, berbagai sampel yang direkam untuk setiap piksel digabungkan dan output ke layar. Ini memungkinkan peningkatan kualitas gambar antialias atau efek lainnya.

Sebelum membuat perangkat dengan metode IDirect3D9::CreateDevice , Anda perlu menentukan apakah antialiasing adegan penuh didukung. Lakukan ini dengan memanggil metode IDirect3D9::CheckDeviceMultiSampleType seperti yang ditunjukkan pada contoh kode di bawah ini.

/*
* 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.

Parameter pertama yang diterima IDirect3D9::CheckDeviceMultiSampleType adalah angka ordinal yang menunjukkan adaptor tampilan untuk kueri. Sampel ini menggunakan D3DADAPTER_DEFAULT untuk menentukan adaptor tampilan utama. Parameter kedua adalah nilai dari jenis enumerasi D3DDEVTYPE , yang menentukan jenis perangkat. Parameter ketiga menentukan format permukaan. Parameter keempat memberi tahu Direct3D apakah akan menanyakan tentang multisampling berjendela penuh (TRUE) atau antialias adegan penuh (FALSE). Sampel ini menggunakan FALSE untuk memberi tahu Direct3D bahwa ia menanyakan tentang antialias adegan penuh. Parameter terakhir menentukan teknik multisampling yang ingin Anda uji. Gunakan nilai dari jenis D3DMULTISAMPLE_TYPE yang dijumlahkan. Sampel ini menguji untuk melihat apakah dua tingkat multisampling didukung.

Jika perangkat mendukung tingkat multisampling yang ingin Anda gunakan, langkah selanjutnya adalah mengatur parameter presentasi dengan mengisi anggota struktur D3DPRESENT_PARAMETERS yang sesuai untuk membuat permukaan penyajian multisample. Setelah itu, Anda dapat membuat perangkat. Kode sampel di bawah ini menunjukkan cara menyiapkan perangkat dengan permukaan render multisampling.

/*
* 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)

Untuk menggunakan multisampling, anggota SwapEffect dari D3DPRESENT_PARAMETER harus diatur ke D3DSWAPEFFECT_DISCARD.

Langkah terakhir adalah mengaktifkan antialias multisampling dengan memanggil metode IDirect3DDevice9::SetRenderState dan mengatur D3DRS_MULTISAMPLEANTIALIAS ke TRUE. Setelah mengatur nilai ini ke TRUE, setiap penyajian yang Anda lakukan akan memiliki multisampling yang diterapkan padanya. Anda mungkin ingin mengaktifkan dan menonaktifkan multisampling, tergantung pada apa yang Anda render.

Antialias