- SwapChain에서 생성된 후면 버퍼는 그대로 출력되는 것이 아닌 정보를 묘사하는 view를 통해 출력돱니다.
RTV(Render Target View)
- Render Target은 렌더링 작업의 결과를 저장하는 버퍼를 의미합니다.
- RTV는 Render Target에 대한 View를 나타내며, 후면 버퍼를 묘사합니다.
DSV(Depth Stencil View)
- DSV는 깊이 버퍼와 스텐실 버퍼에 대한 View를 나타냅니다.
- 깊이 버퍼는 카메라로부터의 거리를 저장합니다.
- 스텐실 버퍼는 렌더링 작업에 대한 부가적인 정보를 저장합니다.
- 즉, 3D 공간에서 물체들 간의 위치 관계를 파악해 겹친 물체 중 가까운 물체는 그대로 그려주고 먼 물체는 가려지도록 해줄 수 있습니다.
(+ 그림자 계산)
- Viewport는 실제 출력을 위한 화면 정보를 의미합니다.
- 주로 화면 크기가 변할 때 1번만 세팅하여 사용합니다.
- Render 단계는 크게 3가지로 나눌 수 있습니다.
1. 렌더를 위한 준비 작업 (Render Begin)
2. 실제 오브젝트 등.. 렌더
3. 최종 렌더링된 결과물 체출 (Render End)
void Game::Render()
{
// 렌더를 위한 준비 작업
RenderBegin();
// TODO : 렌더
// 최종 렌더 정보를 제출
RenderEnd();
}
void Game::RenderBegin()
{
// OutMerge단계에 RTV, DSV를 연결합니다.
_deviceContext->OMSetRenderTargets(1, _renderTargetView.GetAddressOf(), _depthStencilView.Get());
// 매 프레임 초기화합니다.
_deviceContext->ClearRenderTargetView(_renderTargetView.Get(), reinterpret_cast<const float*>(&Colors::Blue));
_deviceContext->ClearDepthStencilView(_depthStencilView.Get(), D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);
// ViewPort를 연결합니다.
_deviceContext->RSSetViewports(1, &_viewport);
}
void Game::RenderEnd()
{
// 그려진 버퍼를 전면 버퍼에 제출(출력)합니다.
// * Present() : 후면 버퍼의 내용을 전면 버퍼에 복사
HRESULT hr = _swapChain->Present(1, 0);
CHECK(hr);
}