DirectX Graphics 프로그래밍 가이드 고도의 주제 픽셀 파이프라인 anti-aliasing 풀 신 anti-aliasing   [목차열람] [주소복사] [슬롯비우기]
풀 신 anti-aliasing
 
Microsoft DirectX 9.0

풀 신 anti-aliasing


풀 신 anti-aliasing은 장면(scene)내의 각 다각형의 엣지를 싱글 패스로 rasterize 해 애매하게 하는 것을 가리킨다. 2 번째의 패스는 필요없다. 풀 신 anti-aliasing가 지원 되고 있는 경우, 삼각형 및 삼각형의 그룹에만 영향을 준다. Microsoft® Direct3D® 서비스에서는, 라인의 anti-aliasing는 실행할 수 없다. Direct3D 에서는, 풀 신 anti-aliasing를 실행하려면 , 각 픽셀에 멀티 샘플링을 사용한다. 멀티 샘플링이 유효한 경우, 픽셀의 모든 서브 샘플이 1 살의 패스로 갱신되지만, 복수의 렌더링 패스를 포함한 다른 이펙트에 사용되는 경우는, 애플리케이션으로 서브 샘플의 일부만이 지정의 렌더링 패스에 영향을 받도록(듯이) 지정할 수 있다. 이 후자의 어프로치에 의해, 모션블러, 필드 포커스 이펙트의 깊이, 반사 브라등을 시뮬레이트 할 수가 있다.

어느 쪽의 경우도, 픽셀 마다 기록된 다양한 샘플이 블렌드 되어 스크린에 출력된다. 이러한 어프로치를 사용하면 anti-aliasing나 다른 이펙트의 이미지 품질이 향상한다.

IDirect3D9::CreateDevice 메서드로 장치를 생성 하기 전에, 풀 신 anti-aliasing가 지원 되고 있는지 조사할 필요가 있다. 이 때문에는,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 가 받는 제 1 인수는, 문의하는 디스플레이 어댑터를 나타내는 서수이다. 이 예에서는, D3DADAPTER_DEFAULT 를 사용해 1차 디스플레이 어댑터를 지정한다. 제 2 인수는 D3DDEVTYPE 열거형의 값으로, 장치의 종류를 지정한다. 제 3 인수에는, 표면의 포맷을 지정한다. 제 4 인수는, 풀 윈도우 멀티 샘플링 (TRUE) 또는 풀 스크린 anti-aliasing (FALSE)를 문의할지 어떨지를 Direct3D 에 알린다. 이 예에서는 FALSE 를 사용해, 풀 신 anti-aliasing에 대해 문의하는 것을 Direct3D 에 지시하고 있다. 마지막 인수에는, 테스트하는 멀티 샘플링 테크닉을 지정한다. D3DMULTISAMPLE_TYPE 열거형의 값을 사용한다. 이 예에서는, 2 개의 레벨의 멀티 샘플링이 지원 되고 있는지 테스트한다.

장치를 사용하고 싶은 2 개의 레벨의 멀티 샘플링을 지원 하고 있는 경우, 다음의 순서는, 멀티 샘플의 렌더링 표면을 생성 하기 위해서,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 로 설정하는 것에 의해, 멀티 샘플링의 anti-aliasing를 유효하게 하는 것이다. 이 값에 TRUE 를 설정한 후는, 렌더링에는 반드시 멀티 샘플링이 적용된다. 렌더링 대상으로 응해, 멀티 샘플링의 유효/무효를 바꿀 수도 있다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP