개발하는 리프터 꽃게맨입니다.

[DX11 물방울책 요약 정리] 머리말 본문

컴퓨터 그래픽스/DirectX 11

[DX11 물방울책 요약 정리] 머리말

파워꽃게맨 2024. 9. 5. 14:17

서론

Direct3D 11은 (이하 DX11) Windows 플랫폼에서 최신 그래픽 하드웨어(GPU)를 사용하여 3D 그래픽을 작성하기 위한 렌더링 라이브러리이다. DX11은 그래픽 하드웨어를 밀접하게 다루는 API라는 점에서 저수준 라이브러리다. DX11는 주로 게임 산업에 사용되며, DX11 API를 사용하여 높은 수준의 렌더링 엔진을 구축한다. 그러나 의료, 과학 시각화, 건축 등에서도 고성능 대화형 3D그래픽을 위해서 사용할 수 있다.

 

또한, 최신 PC들이 현대적인 그래픽 카드를 장착함에 따라, non-3D 프로그램에서도 GPU를 활용하여 복잡한 계산들을 그래픽 카드로 분산시키기 시작했다. 이를 일반 목적 GPU 컴퓨팅이라고 하며, DX11 은 일반 목적 GPU 프로그램 작성을 위한 compute shader API 를 제공한다.

 

DX11은 보통 native C++에서 프로그래밍되지만, .NET 래퍼도 존재한다.

 

이 책은 DX11을 사용하여 게임 개발에 중점을 두고 대화형 컴퓨터 그래픽 프로그래밍에 대한 소개를 제공한다.

이 책은 DX11과 셰이더 프로그래밍의 기본을 가르치며, 이후 독자는 더 고급 기술을 배울 준비를 하게 된다.

 

이 책은 3가지 주요 부분으로 나뉘어 있다.

 

Part 1은 수학적 도구를 설명한다.

Part 2는 DX11 초기화, 3D 기하학 정의, 카메라 설정, Vertex Shader, Pixel Shader, Geometry Shader, Compute Shader, 조명, 텍스처, 블렌딩, 스텐실, tessellation 등의 기본 작업을 구현하는 방법을 보여준다.

Part 3는 주로 DX11을 적용하여 메쉬 작업, 지형 렌더링, 피킹, 파티클 시스템, 환경 맵핑, 노멀 매핑, displacement 매핑, 실시간 그림자, 그리고 ambient occlusion 등 다양한  흥미로운 기술 및 특수 효과를 구현한다.

 

관심 독자

1. 최신 버전의 DX11을 사용한 3D 프로그래밍에 입문하고자 하는 중급 C++ 프로그래머

2. DX가 아닌 다른 API를 사용해 본 경험이 있는 3D 프로그래머로서 DX11에 입문하고자 하는 사람들

3. DX9 및 DX11에 경험이 있는 프로그래머로서 최신 버전의 DX3D를 배우고자 하는 사람들

 

사전 요구사항

이 책은 DX11, 셰이더 프로그래밍 및 3D 게임 프로그래밍에 대한 입문서이지 일반 컴퓨터 프로그래밍 입문서가 아다. 독자는 다음과 같은 사전 요구사항을 충족해야 한다.

 

1. 고등학교 수준의 수학 (대수학, 삼각법, 함수 등...)

2. Visual Studio 사용 능력

3. 중급 수준의 C++ 및 데이터 구조 기술 (포인터, 배열, 연산자 오버로딩, 연결 리스트, 상속 및 다형성..)

4. Win32 API를 사용한 Windows 프로그래밍에 익숙하다면 도움이 되지만, 필수는 아님

 

필수 개발 도구 및 하드웨어

DX11 응용 프로그램을 개발하려면 DX11 SDK가 필요하다.

해당 책은 2010년 6월 DX11 SDK를 사용한다.

 

DX11은 DX11을 지원하는 하드웨어가 필요하다.

 

D3DX 라이브러리 사용

DirectX는 7.0 버전 이후부터 D3DX(Direct3D Extension) 라이브러리와 함께 제공되었다.

 

이 라이브러리는 수학 연산, 텍스처 및 이미지 연산, 메쉬 연산, 셰이더 연산과 같은 일반적인 3D 그래픽 관련 작업을 간소화하는 함수, 클래스 및 인터페이스 집합을 제공한다.

 

즉, D3DX는 직접 구현하기 번거로운 많은 기능들을 포함하고 있다.

 

이 책에서는 더 흥미로운 내용에 집중할 수 있도록 D3DX 라이브러리를 사용한다.

 

예를 들어, 다양한 이미지 포맷(.bmp, .jpeg)을 Direct3D 텍스처 인터페이스로 로드하는 방법을 설명하는 데 페이지를 할애하는 대신, D3DX 함수 D3DXCreateTextureFromFile을 한 번 호출하는 것으로 해결할 수 있다.

 

다시 말해, D3DX는 생산성을 더 높혀준다.

 

D3DX를 사용하는 다른 이유들

1. D3DX는 범용적이며 다양한 유형의 3D 애플리케이션에 사용할 수 있다.

2. D3DX는 기존 기능만큼 빠르다.

3. 다른 개발자들도 D3DX를 사용한다. 따라서 D3DX를 사용하지 않더라도, D3DX를 사용하는 코드를 읽을 수 있도록 D3DX에 익숙해지는 것이 좋다.

4. D3DX는 철저히 테스트되었다. 또한, DirectX의 각 버전에서 더 개선되고 기능이 풍부해졌다.

 

DirectX SDK 문서 및 SDK 샘플 사용

Direct3D는 방대한 API이며, 이 한 권의 책에서 모든 세부 사항을 다룰 수는 없다.

그러므로 확장된 정보를 얻기 위해서는 DirectX SDK 문서를 사용하는 방법을 배우는 것이 필수적이다. DirectX SDK에 있는 windows_graphics.chm 파일을 실행하여 C++ DirectX 온라인 문서를 실행할 수 있다.

 

문서는 DirectX API의 거의 모든 부분을 다루고 있어 참고 자료로 유용하지만, 문서가 깊이 있는 내용을 다루지 않거나 사전 지식을 가정하기 때문에 최고의 학습 도구는 아니다.

 

해당 책의 샘플 코드는 성능이 아닌 명확성을 염두에 두고 작성되었다. 그렇기에 많은 샘플들이 비효율적으로 구현되어 있을 수 있으며, 샘플 코드를 사용하는 경우 더 나은 효율성을 위해 다시 작업해야할 수 있다는 점을 염두해야 한다.

 

이하 프로젝트 생성 및 링킹 과정 생략