DirectX Graphics 프로그래밍 가이드 고도의 주제 픽셀 파이프라인 스텐실 버퍼 테크닉   [목차열람] [주소복사] [슬롯비우기]
스텐실 버퍼 테크닉
 
Microsoft DirectX 9.0

스텐실 버퍼 테크닉


스텐실 버퍼를 사용하면, 애플리케이션은 화면의 픽셀을 마스크 할 수 있다. 이 마스크는, 픽셀을 드로잉(Drawing) 할지 어떨지를 제어한다. 여기에서는, 빈번하게 사용되는 다음의 이펙트에 대해 설명한다.

스텐실 버퍼는, 렌더링 타겟 표면의 픽셀 단위의 드로잉(Drawing)를 유효 또는 무효로 한다. 이 버퍼의 가장 기본적인 레벨에서는, 애플리케이션이 렌더링 한 화면의 부분을 마스크로 가리는 것이 가능하게 되어, 그 화면이 표시되지 않는다. 애플리케이션은 디졸브, 데칼, 아웃 라이닝등의 특수 효과를 위해서(때문에) 스텐실 버퍼를 사용하는 것이 많다.

스텐실 버퍼 정보는, z 버퍼 데이터에 파묻히고 있다. IDirect3D9::CheckDeviceFormat 메서드를 사용해, 하드웨어가 스텐실 버퍼를 지원 하고 있을지 어떨지를 조사할 수가 있다. 다음 코드에 예를 나타낸다.

// Reject devices that cannot perform 8-bit stencil buffering.  
// The following example assumes that pCaps is a valid pointer 
// to an initialized D3DCAPS9 structure.  

if( FAILED( m_pD3D->CheckDeviceFormat( pCaps->AdapterOrdinal,
                                       pCaps->DeviceType,  
                                       Format,  
                                       D3DUSAGE_DEPTHSTENCIL, 
                                       D3DRTYPE_SURFACE,
                                       D3DFMT_D24S8 ) ) )
        return E_FAIL;

IDirect3D9::CheckDeviceFormat 는, 해당하는 장치의 능력에 근거해, 생성 하는 장치를 선택할 수 있다. 이 경우, 8 비트의 스텐실 버퍼를 지원 하지 않는 장치는 거부된다. 이것은 IDirect3D9::CheckDeviceFormat 로 사용할 수 있는 방법의 1 개에 지나지 않는다. 더 자세한 정보는, 「하드웨어 지원의 판정」을 참조할것.

스텐실 버퍼의 동작

Microsoft® Direct3D® 는, 스텐실 버퍼의 내용을 픽셀 단위로 조사한다. 스텐실 버퍼의 대응하는 값, 스텐실 참조값, 스텐실 마스크값을 사용해, 타겟 표면의 각 픽셀에 대한 테스트를 실시한다. 테스트에 패스 하면, Direct3D 는 액션을 실행한다. 이 테스트는 다음의 스텝에서 실행된다.

  1. 스텐실 참조값과 스텐실 마스크의 비트적 (AND) 연산을 실행한다.
  2. 현재 픽셀에 대한 스텐실 버퍼값과 스텐실 마스크의 비트적 (AND) 연산을 실행한다.
  3. 비교 함수를 사용해, 스텝 1 으로 스텝 2 의 결과를 비교한다.

이러한 스텝을 다음의 예로 가리킨다.

(StencilRef & StencilMask) CompFunc (StencilBufferValue & StencilMask)

여기서,StencilBufferValue 는, 현재 픽셀에 대한 스텐실 버퍼의 내용이다. 이 코드에서는, ampersand(&) (&) 기호는 비트적 (AND) 연산을 나타내고 있다. StencilMask 는 스텐실 마스크,StencilRef 는 스텐실 참조값을 나타내고 있다. CompFunc 는 비교 함수이다.

이 스텐실 테스트에 패스 하면, 현재 픽셀은 타겟 표면에 기입해지지만, 실패했을 경우는 무시된다. 디폴트의 비교 처리에서는, 각 비트 연산의 결과에 관계없이, 픽셀이 써진다 (D3DCMP_ALWAYS). 이 동작을 변경하려면 , 목적의 비교 함수를 지정하는 D3DCMPFUNC 열거형의 멤버를 건네주어,D3DRS_STENCILFUNC 렌더링 스테이트의 값을 변경한다.

애플리케이션에서는, 스텐실 버퍼의 처리를 커스터마이즈 할 수 있다. 애플리케이션에서는, 비교 함수, 스텐실 마스크, 스텐실 참조값을 설정할 수 있다. 또, 스텐실 테스트에 패스했을 경우 또는 실패했을 경우에 실행하는 Direct3D 의 처리를 제어할 수도 있다. 더 자세한 정보는, 「스텐실 버퍼 스테이트」를 참조할것.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP