Aracılığıyla paylaş


Full-Scene Antialiasing (Direct3D 9)

Tam sahne antialiasing, tek bir geçişte rasterleştirildiğinden sahnedeki her çokgenin kenarlarını bulanıklaştırmayı ifade eder; ikinci geçiş gerekmez. Tam sahne antialiasing, desteklendiğinde yalnızca üçgenleri ve üçgen gruplarını etkiler. Direct3D hizmetleri kullanılarak çizgiler pürüzsüz hale getirilemez. Direct3D'de her pikselde çoklu örnekleme kullanılarak tam sahne antialiasing gerçekleştirilir. Çok örnekli örnekleme etkinleştirildiğinde, bir pikselin tüm alt örneklemeleri tek bir geçişte güncelleştirilir, ancak birden çok işleme geçişi içeren diğer efektler için kullanıldığında, uygulama belirli bir işleme geçişinin yalnızca bazı alt örneklerden etkileneceğini belirtebilir. Bu ikinci yaklaşım hareket bulanıklığı, alan derinliği odak efektleri, yansıma bulanıklığı vb. benzetimini sağlar.

Her iki durumda da, her piksel için kaydedilen çeşitli örnekler birlikte karıştırılır ve ekrana çıkış yapılır. Bu, antialiasing veya diğer efektlerin gelişmiş görüntü kalitesini sağlar.

IDirect3D9::CreateDevice yöntemiyle bir cihaz oluşturmadan önce, tam sahne antialiasing'in desteklenip desteklenmediğini belirlemeniz gerekir. Aşağıdaki kod örneğinde gösterildiği gibi IDirect3D9::CheckDeviceMultiSampleType yöntemini çağırarak bunu yapın.

/*
* 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 metodunun kabul ettiği ilk parametre, sorgulanacak olan görüntü bağdaştırıcısını belirten bir sıra numarasıdır. Bu örnek, birincil görüntü bağdaştırıcısını belirtmek için D3DADAPTER_DEFAULT kullanır. İkinci parametre, cihaz türünü belirten D3DDEVTYPE numaralandırılmış türünden bir değerdir. Üçüncü parametre, yüzeyin biçimini belirtir. Dördüncü parametre, Direct3D'nin tam pencere çoklu örnekleme (TRUE) veya tam sahne kenar yumuşatma (FALSE) hakkında bilgi isteyip istemediğini belirtir. Bu örnek, Direct3D'ye tam sahne antialiasing sorgusu yaptığını belirtmek için FALSE kullanır. Son parametre, test etmek istediğiniz çok örnekli tekniği belirtir. D3DMULTISAMPLE_TYPE numaralandırılmış türünden bir değer kullanın. Bu örnek, iki çoklu örnekleme düzeyinin desteklenip desteklenmediğini test eder.

Cihaz kullanmak istediğiniz çok örnekli örnekleme düzeyini destekliyorsa, bir sonraki adım çok örnekli bir işleme yüzeyi oluşturmak için D3DPRESENT_PARAMETERS yapısının uygun üyelerini doldurarak sunu parametrelerini ayarlamaktır. Bundan sonra cihazı oluşturabilirsiniz. Aşağıdaki örnek kodda çok örnekli işleme yüzeyi olan bir cihazın nasıl ayarlanacağı gösterilmektedir.

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

Birden çok örneklem kullanmak için D3DPRESENT_PARAMETER'nin SwapEffect üyesi D3DSWAPEFFECT_DISCARD olarak ayarlanmalıdır.

Son adım, IDirect3DDevice9::SetRenderState yöntemini çağırarak ve D3DRS_MULTISAMPLEANTIALIAS'ı TRUEolarak ayarlayarak çok örnekli kenar yumuşatmayı etkinleştirmektir. Bu değeri TRUE olarak ayarladıktan sonra, yaptığınız her işlemeye birden çok örnekleme uygulanır. Ne işlediğinize bağlı olarak çok örneklemeyi etkinleştirmek ve devre dışı bırakmak isteyebilirsiniz.

Antialiasing