다음을 통해 공유


알파 테스트 상태(Direct3D 9)

C++ 애플리케이션은 알파 테스트를 사용하여 픽셀이 렌더링 대상 화면에 기록되는 시기를 제어할 수 있습니다. 애플리케이션은 D3DRS_ALPHATESTENABLE 렌더링 상태를 사용하여 알파 테스트 함수에 따라 각 픽셀을 테스트하도록 현재 Direct3D 디바이스를 설정합니다. 테스트가 성공하면 픽셀이 표면에 기록됩니다. 그렇지 않은 경우 Direct3D는 픽셀을 무시합니다. D3DRS_ALPHAFUNC 렌더링 상태로 알파 테스트 함수를 선택합니다. 애플리케이션은 D3DRS_ALPHAREF 렌더링 상태를 사용하여 비교할 모든 픽셀에 대한 참조 알파 값을 설정할 수 있습니다.

알파 테스트의 가장 일반적인 용도는 거의 투명한 개체를 래스터화할 때 성능을 향상시키는 것입니다. 래스터화되는 색 데이터가 지정된 픽셀(D3DPCMPCAPS_GREATEREQUAL)의 색보다 불투명한 경우 픽셀이 기록됩니다. 그렇지 않으면 래스터라이저는 픽셀을 모두 무시하고 두 색을 혼합하는 데 필요한 처리를 저장합니다. 다음 코드 예제에서는 지정된 비교 함수가 지원되는지 확인하고, 지원되는 경우 렌더링 중에 성능을 향상시키는 데 필요한 비교 함수 매개 변수를 설정합니다.

// This code example assumes that pCaps is a
// D3DCAPS9 structure that was filled with a 
// previous call to IDirect3D9::GetDeviceCaps.

if (pCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL)
{
    dev->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);
    dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); 
    dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
}

// If the comparison is not supported, render anyway. 
// The only drawback is no performance gain.

모든 하드웨어가 모든 알파 테스트 기능을 지원하는 것은 아닙니다. IDirect3D9::GetDeviceCaps 메서드를 호출하여 디바이스 기능을 검사 수 있습니다. 디바이스 기능을 검색한 후 원하는 비교 함수에 연결된 D3DCAPS9 구조체의 AlphaCmpCaps 멤버를 검사. AlphaCmpCaps 멤버에 D3DPCMPCAPS_ALWAYS 기능만 포함되거나 D3DPCMPCAPS_NEVER 기능만 포함된 경우 드라이버는 알파 테스트를 지원하지 않습니다.

렌더링 상태