[DX11] View (RTV, DSV)

LeeTaes·2024년 1월 4일
0

DirectX

목록 보기
3/9

View


  • SwapChain에서 생성된 후면 버퍼는 그대로 출력되는 것이 아닌 정보를 묘사하는 view를 통해 출력돱니다.
  • RTV(Render Target View)
    - Render Target은 렌더링 작업의 결과를 저장하는 버퍼를 의미합니다.
    - RTV는 Render Target에 대한 View를 나타내며, 후면 버퍼를 묘사합니다.

  • DSV(Depth Stencil View)
    - DSV는 깊이 버퍼와 스텐실 버퍼에 대한 View를 나타냅니다.
    - 깊이 버퍼는 카메라로부터의 거리를 저장합니다.
    - 스텐실 버퍼는 렌더링 작업에 대한 부가적인 정보를 저장합니다.
    - 즉, 3D 공간에서 물체들 간의 위치 관계를 파악해 겹친 물체 중 가까운 물체는 그대로 그려주고 먼 물체는 가려지도록 해줄 수 있습니다.
    (+ 그림자 계산)

Viewport & Render


  • 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);
}
profile
클라이언트 프로그래머 지망생

0개의 댓글