본문 바로가기
IT 기술/Direct3D

Direct3D 초기화 작업(깊아 버퍼 뷰) part3_16일차

by 썬's 2023. 1. 26.

안녕하세요 보글리아입니다.

저번 시간에는 렌더 대상 뷰를 설정해 봤는데요

이번 시간에는 이전 시간에 이어 깊이 버퍼 뷰를 생성하고 이러한 뷰를 출력 병합기 단계에 묶는 작업을 하겠습니다.

여기서 출력 병합기 단계는 향후 배울 파이프라인의 단계 중 하나인 OM단계입니다.

※제 수업은 이전주차에서 배운 개념을 재차 설명하지 않습니다※

※본 내용에 들어가기 전 용어정의부터 하겠습니다※


용어정의

  • 메서드 : 클래스 내부에 정의된 함수로 함수의 유의어로 보면 됩니다.
  • 텍스처 : 이미지로 보시면 됩니다.
  • 텍셀 : 하나의 텍스처가 있을 때, 이 텍스처를 구성하는 단위. 즉 하나의 픽셀이거나 아니면 다수의 픽셀을 가리킴

1. 깊이 버퍼 뷰 생성

Direct3D에서 깊이 버퍼를 이제 생성해 보겠습니다. 깊이 버퍼는 간단히 말해 2d 텍스처가 있으면 이 텍스처의 픽셀마다 깊이 정보를 다르게 주는 것을 말합니다. 2차원 텍스처를 생성하는 구조체는 D3D11_TEXTURE2D_DESC이고 ID3D11Device::CreateTexture2D 메서드를 호출해야 합니다.

 

먼저 D3D11_TEXTURE2D_DESC구조체 안에는 어떤 멤버 변수가 있는지 보겠습니다.

자 그리고 하나씩 뜯어보겠습니다.

typedef struct D3D11_TEXTURE2D_DESC
{
  UINT Width;
  UINT Height;
  UINT MipLevels;
  UINT ArraySize;
  DXGI_FORMAT Format;
  DXGI_SAMPLE_DESC SampleDesc;
  D3D11_USAGE Usage;
  UINT BindFlags;
  UINT CPUAccessFlags;
  UINT MiscFlags;
}D3D11_TEXTURE2D_DESC;
  1. Width : 이는 텍셀의 폭, 즉 가로길이입니다.
  2. Height : 이는 텍셀의 높이, 즉 세로길이입니다.
  3. MipLevels : 이는 향후 배울 주제인 밈맵 수준의 개수로, 일단은 하나만 있으면 됩니다.
  4. ArraySize : 텍스처 배열의 텍스처 개수로 깊이 버퍼는 하나만 있으면 됩니다.
  5. Format : 텍셀의 형식을 설정합니다. DXGI_FORMAT 값들 중 하나를 정하시면 됩니다. 이러한 값들은 11일 차를 참고해 주시기 바랍니다.
  6. SampleDesc : 다중 표본 개수와 품질 수준을 설정합니다.
  7. Usage : 텍스처 용도를 설정합니다. 마찬가지로 D3D11_USAGE 값들 중 하나를 정하시면 됩니다. 
  8. BindFlags : 자원을 파이프라인에 어떻게 묶을 것인지 설정합니다. 깊이 버퍼는 D3D11_BIND_DEPTH_STENCIL 플래그를 사용합니다. 
  9. CPUAccessFalgs : 자원에 CPU가 접근하는 방식을 결정합니다.
  10. MiscFlags : 기타 옵션으로 깊이 버퍼에는 사용하지 않기 때문에 0으로 설정합니다.

2. 뷰를 출력 병합기 단계(OM)에 묶기

Direct3D에서 후면 버퍼와 깊이 버퍼에 대한 뷰를 설정했다면, 이제 이 뷰를 파이프라인의 OM 단계에 묶어야 합니다.

이 과정을 거쳐야 비로서 후면 버퍼와 깊어 버퍼에 출력할 자원이 적용됩니다.

뷰를 OM 단계에 묶는 과정은 매우 간단합니다. 예를 들어 제가 임의로 exDevice라는 자원을 만들었다고 하겠습니다.

  • exDevice->OMSetRenderTargets(렌더 대상 개수, 렌더 대상 뷰, 깊이 뷰) 
  • 첫 번째 매개변수 : 묶고자 하는 렌더 대상 개수로 보통 하나만 지정하기 때문에 1로 설정
  • 두 번째 매개변수 : 파이프라인에 묶을 렌더 대상 뷰들을 가리키는 포인터들을 담은 배열의 첫 원소를 가리키는 포인터
  • 세 번째 매개변수 : 파이프라인에 묶을 깊이 뷰를 가리키는 포인터

오늘은 깊이 버퍼 뷰와 지금까지 설정한 뷰들을 OM 단계에 묶는 것을 해봤습니다.

다음 시간에는 뷰포트를 설정하는 법에 대해 배워보도록 하겠습니다.

긴 글 읽으시느라 고생 많으셨습니다~~

댓글