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로 설정하면 모든 렌더링에 다중 샘플링이 적용됩니다. 렌더링하는 항목에 따라 다중 샘플링을 사용하도록 설정하고 사용하지 않도록 설정할 수 있습니다.

앤티앨리어싱