-
목표
- DirectX 11을 이용하여 간단한 기본 어플리케이션을 만들어 본다
- 윈도우와 디바이스를 셋업해본다
-
참고 소스
- DirectX11 Sample - Tutorial 1: Direct3D Basics
-
사전 준비
- 기본 윈도우 프로그램을 작성한다
- DX 10 샘플중 튜터리얼 0번에 있는것을 사용
- 파일 첨부
-
Direct3D 11 디바이스 셋업
- 3D 렌더링을 하기 위한 기본 필수 과정
-
먼저 세가지 오브젝트를 만들어야 한다
- device
-
immediate context
- DX11에 새로 추가된 오브젝트
- swap chain
-
기본적인 셋업 및 오브젝트 생성 순서
- 1) 3D 디바이스와 Swap Chain을 생성한다
- 2) Swap Chain에서 백버퍼를 가져온다(2D Texture)
- 3) 백버퍼에 실제 렌더링할 '렌더 타겟 뷰'를 생성하여 바인딩 시킨다
- 4) 뷰포트를 생성한다
- 5) 매 프레임마다 위에서 생성한 렌더 타겟뷰에 게임 화면을 렌더링한다
- 6) Swap Chain을 이용하여 디바이스에 화면을 그린다
- Swap Chain -> Back Buffer -> Render Target View
- 전체 그림
-
3D 디바이스와 Swap Chain 생성하기
- Feature Level (http://vsts2010.net/118)
- 게임 화면은 프론트 버퍼와 백퍼로 2개의 버퍼로 이루어진다
- 프론트 버퍼는 우리가 건드릴 수 없고, 우선 백버퍼에 화면을 렌더링한다
- 기본적으로 이 2개의 버퍼가 서로 바뀌면서 게임 화면이 그려진다(Flip)
- 참고 이미지
- http://vsts2010.net/115
- 백버퍼를 생성한다
-
BackBufferUsage
- 백퍼러를 어떤 용도로 사용할지
-
OutputWindow
- 어떤 윈도우에 표시할지
-
SampleDesc
- 멀티 샘플링을 사용할 것인가?
- Count = 1, Quality = 0 으로 설정하면 사용하지 않는다는 의미
-
렌더 타겟뷰 생성하기
- DX11의 리소스뷰의 한 타입이다
- 리소스 뷰는 그래픽스 파이프라인의 리소스에 바운딩된다
- 그래픽 파이프라인의 리소스는 타입이 없는 원시 데이터인데 이것을 편의성을 위해 리소스뷰에 연결하여 사용하는 것이다
- http://vsts2010.net/124
- 렌더 타겟 뷰는 Swap Chain의 백버퍼를 렌더 타겟처럼 사용하기 위해서 바운딩한다.
- Swap Chain의 백퍼버를 가져와서, 백버퍼에 바운딩해서 생성한다
- 렌더 타겟으로 설정한다
-
뷰포트 설정하기
- 뷰포트 크기와 깊이값의 범위를 설정한다
- DX9에서는 뷰포트를 설정하지 않으면 기본적으로 렌더 타겟과 같은 사이즈로 생성된다
- DX11에서는 기본적으로 생성되지 않는다
- 화면 가장 왼쪽 상단을 0, 0 으로 설정하고 렌더타겟과 같은 넓이와 높이로 지정한다
-
메시지 루프를 수정한다
- DX9와 같다
- 일반 윈도우 메시지 루프는 메시지 큐에 메시지가 들어오기 전까지는 작동하지 않는다
- 하지만 게임은 입력이 없어서 매 프레임마다 자동으로 업데이트되어야 한다
- 메시지 루프를 수정해서 메시지가 들어오지 않아도 매프레임마다 Render를 호출하도록 한다
-
렌더링 코드
- 생성한 렌더 타겟뷰를 클리어한다
- Swap Chain을 디바이스에 그린다
- 정확히는 Swap Chain의 백버퍼를 화면에 그리는것이다
- 지금 튜터리얼은 아무것도 그리지 않는다