1. Direct3D Stencil
1.1 Stencil
1.1.1 Stencil Buffer
- 스텐실 버퍼는 어떤 특수 효과를 내는데 사용할 수 있는 화면 밖 버퍼
- 스텐실 버퍼는 후면 버퍼, 깊이 버퍼와 해상도가 같으며, 스텐실 버퍼의 픽셀은 후면 버퍼 & 깊이 버퍼 픽셀과 대응
- 스텐실 버퍼를 지정한 경우 스텐실 버퍼는 깊이 버퍼에 부착
- 포스터나 판화에 쓰이는 스텐실의 용도와 같음, 특정 픽셀 단편들이 후면 버퍼에 기록되지 못하게 만드는 데 쓰임
- 거울을 구현할 때 물체가 반사된 이미지를 거울의 평면에 그려야 함
- 거울 테두리 바깥까지 반사상이 그려져서는 안됨
1.1.2 Depth & Stencil Buffer
- Depth & Stencil Buffer를 생성할 때 특정한 자료 형식을 지정할 필요가 있음
DXGI_FORMAT_D32_FL0AT_S8X24_UINT; DXGI_FORMAT_D24_UNORM_S8_UINT;
- 매 프레임의 시작에서 깨끗이 지워야 함
void ID3DllDeviceContext::ClearDepthStencilView;
1.1.3 Stencil Test
- 스텐실 버퍼를 이용하면 후면 버퍼의 특정 영역으로의 렌더링을 방지
- 주어진 한 픽셀을 후면 버퍼에 기록할 것인지 아닌지를 스텐실 버퍼에 근거해서 판정하는 것
- 스텐실 적용이 활성화된 경우 스텐실 판정은 픽셀이 래스터화되는 과정에서 일어남(OM)
- 두 피연산자를 응용 프로그램이 지정한 비교 연산자로 비교하는 것
- 응용 프로그램이 정의한 스텐실 기준 값 & 응용 프로그램이 정의한 마스킹 값을 비트별 논리곱으로 결합
- 스텐실 버퍼에 이미 있던 해당 픽셀의 값 & 응용 프로그램이 정의한 마스킹 값을 비트별 논리곱으로 결합
if(StencilRef & StencilReadMask (비교 연산자) Value & StencilReadMask);
- 비교 연산자를 사용할 수 있는 함수의 종류가 구조체로 지정
typedef enum D3D11_COMPARISON_FUNC;
1.1.4 Stencil Interface
- 스텐실 인터페이스를 생성하기 전 밑의 구조체를 채워 사용
typedef struct D3D11_DEPTH_STENCIL_DESC;
- 위의 구조체를 채워 다음 함수를 호출하여 인터페이스를 가리키는 포인터를 얻음
HRESULT ID3D11Device::CreateDepthStencilState;
- 인터페이스의 포인터를 얻고 이후 Depth & Stencil 상태를 출력 병합기(OM) 단계에 묶음
void ID3D11DeviceContext::OMSetDepthStencilState;
'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글
[Direct11] 24. Direct3D Geometry Shader (0) | 2023.06.20 |
---|---|
[Direct11] 23. EX App Program - Mirror (0) | 2023.06.19 |
[Direct11] 21. EX App Program - Fog System (1) | 2023.06.17 |
[Direct11] 20. Direct3D Blending - Blending System (0) | 2023.06.17 |
[Direct11] 19. Direct3D Blending (0) | 2023.06.17 |