SlideShare a Scribd company logo
1 of 253
Download to read offline
DirectX 12를 이용한 3D 게임 프로그래밍 입문
게임 개발 중심으로 익히는 대화식 컴퓨터 그래픽 프로그래밍
초판 1쇄 발행 2017년 05월 25일
지은이 프랭크 D. 루나 / 옮긴이 류광 / 펴낸이 김태헌
펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로7길 83 한빛미디어(주) IT출판부
전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124
등록 1999년 6월 24일 제10 – 1779호 / ISBN 978-89-6848-779-8 93000
총괄 전태호 / 책임편집 김창수 / 기획·편집 이복연
디자인 표지 최연희 조판 이경숙
영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 변지영 / 제작 박성우, 김정우
이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로
알려주십시오. 잘못된 책은 구입하신 서점에서 교환해드립니다. 책값은 뒤표지에 표시되어 있습니다.
한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr
INTRODUCTION TO 3D GAME PROGRAMMING WITH DIRECTX 12
Translation Copyright ©2017 by Hanbit Media, Inc.
Original Copyright ©2016 by MERCURY LEARNING AND INFORMATION LLC. All rights reserved.
이 책의 저작권은 대니홍 에이전시를 통한 저작권사와의 독점 계약으로 한빛미디어 (주)에 있습니다.
저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다.
지금 하지 않으면 할 수 없는 일이 있습니다.
책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요.
한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
iv
지은이 프랭크 D. 루나 Frank D. Luna
15년 넘게 대화식 3차원 그래픽 응용 프로그램을 프로그래밍해 왔다. DirectX에 관한 세 권의 베
스트셀러를 저술했으며, 3차원 의료 시각화와 3차원 건축 설계 소프트웨어, 그리고 게임 개발 분야
에서 일한 경력이 있다. 그는 캘리포니아 대학교 어바인(University of California, Irvine)에서
수학 학사 학위를 받았다.
옮긴이 류광
1996년부터 활동해온 프로그래밍 서적 전문 번역가로, Knuth 교수의 고전 『컴퓨터 프로그래밍의
예술』(The Art of Computer Programming) 시리즈를 비롯한 다양한 분야의 프로그래밍 서
적을 50권 번역했다. 게임 및 그래픽 프로그래밍 관련 번역서로는 본서의 전작인 『DirectX 11을
이용한 3D 게임 프로그래밍 입문』과 『Game Programming Gems』 시리즈, 『Game Engine
Gems』 시리즈, 『3D 게임 프로그래밍 & 컴퓨터 그래픽을 위한 수학』 1, 2판 등이 있다.
번역과 프로그래밍 외에 소프트웨어 문서화에도 관심이 많으며, 수많은 오픈소스 프로젝트들의
표준 문서 형식으로 쓰이는 DocBook의 국내 사용자 모임인 닥북 한국(http://docbook.kr/)의
일원이다.
현재 번역서 정보 사이트 occam’s Razor(http://occamsrazr.net/)와 Game Programming
Gems 시리즈를 비롯한 게임 개발서들의 독자 지원 및 논의 사이트 GpgStudy(http://www.
gpgstudy.com/)를 운영하고 있다.
지은이·옮긴이 소개
v
“게임 회사 기술 시험이나 면접에는 어떤 문제가 나오나요?”
게임 프로그래머 지망생들에게 가장 많이 받는 질문입니다. 이 책의 독자 대부분도 게임 클라이
언트 프로그래머 지망생일 겁니다. 이 질문에 제 경험을 바탕으로 답을 드리자면, 유니티나 언리얼
같은 상용 엔진의 기능에 대해서는 의외로 많이 묻지 않습니다. 대부분 회사는 그 대신 C++, 자료
구조와 알고리즘, 게임 수학, 그래픽스 프로그래밍 기초에 대해서 주로 물어봅니다. 심지어 유니티
로 개발하는 엔씨, 넥슨, 넷마블 같은 회사에서도 말이죠.
지금은 주로 상용 엔진으로 게임을 개발하는 시대라 DirectX 같은 저수준 API는 공부하지 않아
도 된다고 생각하실지 모릅니다. 하지만 그 생각은 틀렸다고 감히 말씀드립니다. 현업에서 신입 게
임 개발자에게 요구하는 능력은 여전히 C++, DirectX, OpenGL 같은 기초 지식입니다. 제가 참
여해 최근 출시한 시프트업의 <데스티니 차일드>도 C++와 DirectX/OpenGL로 자체 개발한 엔
진을 사용했습니다. 넷마블의 <모두의 마블>과 <세븐 나이츠>도 마찬가지입니다. 여전히 C++와
그래픽스 API는 중요합니다.
이 책은 DirectX 9 시절, 개발자 사이에서 ‘용책’이라 불리던 바이블 도서의 최신 개정판입니다.
단순히 DirectX 12 API만이 아닌, 벡터와 행렬 같은 필수 게임 수학, 가장 핵심인 3D 그래픽스
파이프라인, 파이프라인을 통한 3D 월드 구현 등 게임 프로그래머에게 꼭 필요한 내용을 두루 다룹
니다. DirectX 12 책이라기보다는 게임 그래픽스 프로그래밍의 바이블이라 할 수 있습니다.
이 책이 다루는 내용이 유명 게임 회사의 기술 시험과 면접 문제의 핵심입니다. 그리고 드래그&
드롭으로 쉽게 월드를 조작할 수 있는 상용 엔진의 원리를 제대로 배우고 싶다면 이 책이 현존 최고
라고 감히 말씀드립니다.
그럼 제가 게임 프로그래머 지망생들에게 자주 하는 말로 마무리할까 합니다.
“게임 프로그래머는 좋은 레이서에 머물러서는 안 된다. 차의 내부 구조와 작동 원리까지 아는 레
이서 겸 엔지니어가 되어야 한다.”
박민근, 경기 게임 아카데미 겸직 교수
(전) 시프트업 <데스티니 차일드> 엔진 프로그래머
추천사
vi
본서 『DirectX 12를 이용한 3D 게임 프로그래밍 입문』은 프랭크 D. 루나의 DirectX 입문서 시
리즈 최신작인 Introduction to 3D Game Programming with DirectX 12(Mercury
Learning, 2016)를 우리말로 옮긴 것입니다. 시리즈의 첫 권인 Introduction to 3D Game
Programming with DirectX 9.0(Wordware, 2003)은 2004년에 『DirectX 9를 이용한 3D
GAME 프로그래밍 입문』(최현호 옮김, 정보문화사)이라는 제목으로 번역서가 나왔는데, 앞표지에
용이 있어서 흔히 ‘용책’이라고 불렀고 게임 그래픽 프로그래밍에 입문하는 사람들에게 많은 사랑을
받았습니다. 이후 DirectX는 버전 10과 11을 거쳐 12에 이르렀고, 저자도 계속해서 책을 냈습니
다. 그중 DirectX 11에 관한 원서를 제가 번역했고(『DirectX 11을 이용한 3D 게임 프로그래밍
입문』, 한빛미디어, 2014), 이번에 또다시 DirectX 12 버전에 관한 번역서를 내게 되었습니다.
시리즈 첫 권이 나온 후 게임·그래픽 기술과 관련 프로그래밍 분야에 많은 변화가 있었는데, 이
글에서 한 가지 언급하고 싶은 것은 DirectX가 더 이상 게임 프로그래머의 필수 과목은 아니게 되
었다는 점입니다. 예전에는 게임 그래픽 프로그래머가 되려면 OpenGL과 DirectX 중 하나는 공
부하는 것이 당연하며, 미리 만들어진 게임 엔진을 사용한다고 해도 저수준 그래픽 라이브러리에 대
한 기본적인 소양은 갖추고 있어야 한다는 생각이 많았습니다. 그러나 이제는 게임 엔진들이 크게
발전해서 저수준 그래픽 라이브러리에 의존하지 않고도 게임을(그 수준이야 어떻든) 만들 수 있는
시대가 되었습니다. 이 이야기를 꺼낸 것은 DirectX 12를 배울 필요가 없다는 말을 하려는 것이 아
니라, 그런 시대임에도 DirectX 12를 공부하기로 한 독자들에게 찬사를 보내기 위한 것입니다. 잘
결심하셨습니다! 진부한 표현이지만, 뿌리 깊은 나무는 바람에 흔들리지 않아 꽃이 좋고 열매가 많
습니다. 이 책은 DirectX 12의 API 사용법은 물론이고 3차원 그래픽 프로그래밍을 이해하는 데
꼭 필요한 수학과 그 외 주요 개념들도 충실하게 설명하므로, 그런 결심을 실현하는 데 좋은 교과서
가 될 것입니다.
이전 권의 독자라면 앞의 찬사가 이전 권의 ‘옮긴이의 말’에도 나왔음을 기억할 것입니다. 앞에서
“시리즈”라고 표현하긴 했지만, 이 번역서 전체는, 사실 원서 자체도, 독자가 이전 권을 읽었다는 가
정을 전혀 두고 있지 않습니다. 이는 어쩌면 DirectX 자체의 성격과도 비슷합니다. DirectX를 개
옮긴이의 말
vii
발한 Microsoft는 원래 하위 호환성을 중요시하기로 유명하지만, 이상하게도 DirectX는 소스 코
드의 하위 호환성을 전혀 고려하지 않고 버전을 업그레이드해왔습니다. 극명한 예로, 인터페이스
이름에 아예 버전 번호가 박혀 있습니다(ID3D10Device, ID3D11Device, ID3D12Device 등).
그래픽 기술이 눈부신 속도로 발전하다 보니 하위 호환성에 발목을 잡히지 않기 위해 그런 선택을
한 것이 아닐까 합니다. 어쨌든, DirectX 12를 공부하기 위해 먼저 DirectX 11을 공부할 필요는
없으므로, 이 책을 공부하기 위해 이전 권을 읽을 필요는 없습니다.
한편, 이전 권 독자라면 DirectX 12에 새로 추가되거나 바뀐 부분만 찾아 읽고 싶은 생각도 들
텐데요. 앞에서 말했듯이 저자가 그런 점을 염두에 두고 책을 쓰지는 않았습니다. 이전 권과 내용이
같은 부분들이 없지는 않지만(특히 기초 수학 관련) 그런 부분들도 기존 문장을 많이 고치고 다듬
었으므로, 번역한 사람의 욕심으로는 가능하면 순서대로 모두 읽어 주시길 권합니다. 그래도 꼭 필
요하다면 ‘명령 대기열’이나 ‘명령 목록’이라는 단어가 자주 나오는 곳과 ‘서술자 뷰’, ‘서술자 테이블’
등 ‘서술자’라는 단어가 자주 나오는 곳에 집중하는 것이 한 방법일 것입니다. 더 나은 방법이 있다
면, 그리고 이 책에 대한 질문이나 의견, 또는 함께 논의하고 싶은 주제가 있다면 GpgStudy 사이
트(http://www.gpgstudy.com/)의 ‘GPG 카탈로그’를 통해서 함께 나누었으면 합니다. GPG 카
탈로그에는 정오표와 참고자료 링크 모음도 갖추어져 있습니다.
감사 인사로 이 글을 마무리하겠습니다. 전체적인 과정을 매끄럽게 진행해 주신 이복연 차장님을
비롯한, 이 책의 출판에 관여한 모든 분께 감사드립니다. 수학 공식이 많은 탓에 조판과 교정에 많은
어려움이 있었는데, 많은 분의 노력 덕분에 무사히 책이 나오게 되었습니다. 일일이 이름을 거론하
지 못해서 죄송합니다. 끝으로, 돋보기로 봐도 찾기 힘들었을 수많은 수식 조판 오류와 여러 오타,
오역을 잡아 준 아내 오현숙에게 감사와 사랑의 마음을 전합니다.
옮긴이 _ 류광
viii
Direct3D 12는 현세대 그래픽 하드웨어를 활용하는 고성능 3차원 그래픽 응용 프로그램을 다
양한 Windows 플랫폼(Windows 데스크톱, 모바일, Xbox One)에서 작성하기 위한 렌더
링 라이브러리이다. Direct3D는 하나의 저수준(low-level) 라이브러리인데, 여기서 ‘저수준’은
Direct3D의 API(application programming interface, 응용 프로그래밍 인터페이스)가 자
신이 제어하는 바탕 그래픽 하드웨어를 밀접하게 본뜬 것이라는 점에서 붙은 말이다. Direct3D는
주로 게임 업계에서 쓰인다. 게임 업계는 흔히 Direct3D를 기반으로 게임용 고수준 렌더링 엔진
을 구축한다. 그러나 고성능, 대화식(interactive, 상호작용적) 3차원 그래픽이 필요한 분야가 게
임 업계만은 아니다. 이를테면 의학, 과학 시각화와 건축물 내부 시연 등에도 그러한 그래픽이 필요
하다. 또한, 현세대의 그래픽 카드를 장착하고 출시되는 최근 PC들에서는 3차원 그래픽 응용 프로
그램이 아닌 프로그램들도 GPU(graphics processing unit, 그래픽 처리 장치)의 장점을 활용
해서 대량의 계산 작업을 그래픽 카드에 맡기기 시작했다. 그런 방식을 범용 GPU 계산(general
purpose GPU computing, GPGPU computing)이라고 부르는데, Direct3D 12는 범용
GPU 계산 프로그램을 작성하기 위한 계산 셰이더 API를 제공한다. 일반적으로 Direct3D 응용
프로그램은 네이티브 C++로 작성하지만, SharpDX 팀(http://sharpdx.org/)이 만드는 .NET
래퍼wrapper
를 이용하면 이 강력한 3D 그래픽 API를 관리되는(managed) 응용 프로그램에서도
사용할 수 있다.
이 책은 Direct3D 12를 이용한 게임 개발에 강조를 둔, 상호작용적인 컴퓨터 그래픽 프로그래
밍의 입문서이다. 이 책은 먼저 Direct3D와 셰이더 프로그래밍의 기초를 가르치고, 그것을 바탕으
로 삼아서 좀 더 고급의 응용 기법들로 나아간다. 이 책은 크게 세 부(part)로 구성되어 있다. 제1
부는 이 책 전반에 쓰이는 수학적 수단들을 설명한다. 제2부는 Direct3D의 초기화, 3차원 기하구
조 정의, 카메라 설정, 정점·픽셀·기하·계산 셰이더 작성, 조명, 텍스처 적용, 혼합, 스텐실 적용,
테셀레이션 등 Direct3D의 기본 과제들을 구현하는 방법을 보여 준다. 제3부는 Direct3D를 이용
해서 여러 가지 흥미로운 기법과 특수 효과를 구현하는 방법을 주로 다루는데, 이를테면 메시 다루
기, 지형 렌더링, 장면 안 물체 선택, 입자 시스템, 환경 매핑, 변위 매핑, 실시간 그림자, 주변광 차
서문
ix
폐 같은 기법과 효과가 나온다.
초보자라면 이 책을 처음부터 끝까지 차례로 읽는 것이 가장 바람직하다. 이 책의 장章
들은 난이
도가 점차 높아지도록 배치되어 있다. 중간에 독자가 맥락을 놓칠 정도로 난이도가 급상승하는 부분
은 없다. 대체로 각 장은 그 이전 장들에서 말한 기법과 개념을 사용한다. 따라서 독자가 현재 장의
내용을 충분히 숙지하고 다음 장으로 넘어가는 것이 중요하다. 경험 있는 독자라면 흥미가 가는 장
들만 골라서 읽어도 될 것이다.
마지막으로, 이 책을 다 읽고 나면 어떤 종류의 게임을 개발할 수 있게 될지 궁금한 독자도 있을
것이다. 그 질문에 대한 답을 얻는 가장 좋은 방법은 이 책을 빠르게 훑어보면서 어떤 종류의 예제
응용 프로그램들이 등장하는지 살펴보는 것이다. 그러면 이 책에서 배운 기법들과 독자 자신의 독창
성에 기초해서 개발할 수 있는 게임의 종류를 가늠해 볼 수 있을 것이다.
이 책의 대상 독자
이 책은 다음과 같은 세 부류의 독자들을 염두에 두고 기획되었다.
1.	 최신 버전의 Direct3D를 이용한 3차원 프로그래밍에 입문하고자 하는 중급 C++ 프로그래머.
2.	DirectX 이외의 API(이를테면 OpenGL)에 경험이 있으나 Direct3D 12는 처음인 3차원
그래픽 프로그래머.
3.	Direct3D의 최신 버전을 배우고자 하는 경험 있는 Direct3D 프로그래머.
미리 필요한 지식
우선, 이 책이 Direct3D 12와 셰이더 프로그래밍, 그리고 3D 게임 프로그래밍의 입문서임을 명심
할 필요가 있다. 이 책이 일반적인 컴퓨터 프로그래밍의 입문서는 아니다. 독자는 반드시 다음과 같
은 요건을 갖추어야 한다.
1.	적어도 고등학교 수준의 수학 지식: 이를테면 기하학, 삼각함수, 함수(프로그래밍이 아니라
수학의) 등.
x
2.	Visual Studio 활용 능력: 이를테면 프로젝트를 생성하거나, 프로젝트에 파일을 추가하거나,
링크할 외부 라이브러리를 지정하는 데 어려움이 없어야 한다.
3.	중급 이상의 C++ 및 자료구조 지식: 이를테면 포인터, 배열, 연산자 중복적재, 연결 목록
(linked list), 상속, 다형성 등에 익숙해야 한다.
4.	Win32 API를 이용한 Windows 프로그래밍에 익숙하면 좋지만 필수는 아니다. Win32 기
초가 부록 A에 나온다.
필수 개발 도구와 하드웨어
Direct3D 12 응용 프로그램을 개발하려면 다음과 같은 것들이 필요하다.
1.	 Windows 10
2.	Visual Studio 2015 이상
3.	Direct3D 12 지원 그래픽 카드. 이 책의 예제들은 GTX 760에서 시험되었다.
DirectX SDK 문서화 및 SDK 예제 활용
Direct3D는 방대한 API라서 이 한 권의 책으로 그 세부사항을 모두 다루는 것은 꿈도 꾸지 못할
일이다. 따라서, 이 책에 없는 추가 정보를 획득하려면 DirectX SDK 문서화를 활용하는 방법을
반드시 알아 두어야 한다. DirectX의 최신 문서화는 MSDN에 있다. URL은 다음과 같다.
	https://msdn.microsoft.com/en-us/library/windows/desktop/dn899121%
28v=vs.85%29.aspx
	 [그림 1]은 온라인 문서화의 한 모습이다.
DirectX 문서화는 단지 DirectX API의 모든 부분을 설명할 뿐이다. 따라서 참고문헌으로는 아
주 좋다. 그러나 깊은 내용까지 들어가지는 않으며, 독자가 특정한 사전 지식을 갖추고 있으리라고
가정하기 때문에, 학습용으로까지 아주 좋은 것은 아니다. 단, DirectX의 새 버전이 나올 때마다
xi
점차 나아지고 있긴 하다.
방금 말했듯이 MSDN의 온라인 문서화는 기본적으로 참고용으로 유용하다. 독자가 DirectX에
관련된 어떤 형식이나 함수, 이를테면 ID3D12Device::CreateCommittedResource라는 함수
를 알게 되었는데, 그 함수에 관한 좀 더 자세한 정보를 얻고 싶다고 하자. 온라인 문서화의 검색 기
능을 이용하면 특정 형식 또는 함수의 설명이 있는 페이지를 찾을 수 있다. [그림 2]는 예로 든 함수
를 설명하는 문서화 페이지의 모습이다.
참고:	 실제로 본문에는 추가적인 세부사항에 관해 DirectX 문서화를 참조하라는 경우가 종종 나온다.
그림 1 MSDN DirectX 문서화 중 Direct3D 12 Programming Guide.
xii
그림 2 특정 함수의 문서화 페이지.
또한, 다음 주소에서 제공하는 Direct3D 12 예제 프로그램들도 주목하기 바란다.
https://github.com/Microsoft/DirectX-Graphics-Samples
향후 이곳에 예제들이 더 올라올 것이다. 또한, NVIDIA나 AMD, Intel 웹사이트에서도
Direct3D 12 예제들을 보게 될 것이다.
명확함
코드를 효율적으로 작성하고 Direct3D 12 프로그래밍의 모범 관행들을 따르고자 하긴 했지만, 기
본적으로 필자가 이 책의 프로그램 예제들을 작성할 때 목표로 삼은 것은 Direct3D의 개념이나 그
xiii
래픽 프로그래밍 기법을 잘 보여주는 것이었다. 아주 최적화된 코드를 목표로 두고 예제들을 작성하
지는 않았으며, 그런 목표를 두고 코드를 짰다면 예제가 보여주고자 하는 개념이나 기법이 덜 명확
해졌을 것이다. 만일 예제 코드를 독자 자신의 프로젝트에 사용한다면 효율성을 높이는 쪽으로 코드
를 개선할 필요가 있음을 기억하기 바란다. 더 나아가서, Direct3D API에 초점을 두기 위해 필자
는 Direct3D를 바탕으로 한 최소한의 기반구조를 구축해서 모든 예제의 공통 프레임워크로 사용
했다. 그런데 ‘최소한’의 기반구조이다 보니, 보통은 자료 주도적(data-driven)인 방식으로 적용
해야 마땅한 수치들이나 설정 값들이 코드 자체에 박혀 있는 경우가 많다. 현업에서 대형 3차원 응
용 프로그램을 만들 때에는 Direct3D를 바탕으로 한 ‘렌더링 엔진’을 구현해야 하는 것이 일반적이
다. 그러나 이 책의 주제는 Direct3D API이지 렌더링 엔진의 설계가 아니다.
예제 프로그램과 웹 부록
이 책의 웹사이트(www.d3dcoder.net과 www.merclearning.com)는 독자가 이 책을 최대한 활
용하는 데 꼭 필요한 요소이다. 웹사이트는 이 책의 모든 예제의 전체 소스 코드와 프로젝트 파일들
(통칭해서 ‘웹 부록’)을 제공한다.* 한 DirectX 프로그램의 코드 전체를 책에 싣기에는 코드가 너
무 긴 경우가 많기 때문에, 이 책은 설명하는 내용과 관련이 깊은 코드 조각만 제시한다. 그렇지만,
학습을 위해서는 예제의 전체 코드도 살펴보길 강력히 권한다. (필자는 독자가 공부하기 쉽도록 예
제를 작고 집중된 형태로 만들고자 노력했다.) 일반적인 원칙으로, 한 장을 다 읽은 후 예제 코드를
어느 정도 시간을 들여 공부했다면, 독자가 스스로 그 예제를 구현할 수 있어야 한다. 사실 책과 예
제 코드를 참고삼아서 예제를 스스로 구현해 보는 일은 독자에게 좋은 훈련이 된다.
*  옮긴이  현재, 소스 코드 다운로드 링크를 따라가면 GitHub의 한 저장소(https://github.com/d3dcoder/d3d12book)에 도달한
다. GitHub에(그리고 버전 관리 시스템 Git에) 익숙하지 않은 독자라면 초록색 ‘Clone or download’ 버튼을 클릭한 후 ‘Download
ZIP’을 선택하면 된다. 일부 덩치 큰 자원 파일들은 ‘웹 부록(http://www.hanbit.co.kr/src/2779)’에만 있다는 점도 기억하기 바란다.
xiv
Visual Studio 2015에서 예제 프로젝트 설정
이 책의 예제들은 그냥 해당 프로젝트 파일(.vcxproj)이나 솔루션 파일(.sln)을 더블클릭하기만
하면 열린다. 여기서는 Visual Studio 2015(VS15)에서 책의 예제 응용 프로그램 프레임워크를
이용하는 프로젝트를 새로 만들어서 구축(빌드)하는 방법을 설명한다. 시연의 목적으로, 제6장의
상자 예제(‘Box’) 프로젝트를 다시 만들어서 빌드해 보겠다.
예제 소스 코드 내려받기
우선 책의 예제 소스 코드 전체를 내려받아서 독자의 하드 드라이브의 한 폴더에 복사한다. 이하의
논의에서는 그 폴더가 C:d3d12book이라고 가정하겠다. 이 소스 코드 폴더 안에는 장마다 폴더가
따로 있고, 각 폴더에는 해당 장의 예제 프로젝트들이 들어 있다. 또한, Common이라는 폴더도 주
목하기 바란다. 이 폴더에는 모든 예제 프로젝트에 쓰이는 공통의 소스 코드가 있다. 이제 소스 코드
폴더 안에 독자 자신의 예제 프로젝트들을 담을 새 폴더를 만들기 바란다. 이하의 논의에서는 새 폴
더가 C:d3d12bookMyDemos라고 가정하겠다. 이 폴더는 이후 독자가 이 책의 예제 프레임워크
에 기초해서 만드는 새 프로젝트들(지금 연습하는 것을 포함)을 담는 데 쓰인다.
참고:	 이러한 디렉터리 구조가 필수는 아니지만, 이 책의 모든 예제는 이러한 구조를 따른다. 추가적인 포함
(include) 경로를 설정하는 데 익숙한 독자라면 원하는 다른 장소에 독자의 예제 프로젝트들을 집어넣어
도 된다. 물론, Common 디렉터리의 소스 코드를 Visual Studio가 찾을 수 있도록 설정해 주어야 한다.
xv
Win32 프로젝트 만들기
우선 Visual Studio 2015를 띄우고 주 메뉴에서 파일  새로 만들기  프로젝트를 선택한다(그
림 3).
그러면 새 프로젝트 대화상자가 나타난다(그림 4). 왼쪽의 프로젝트 형식 트리 컨트롤에서
Visual C++  Win32를 선택하고, 오른쪽 창에서 Win32 프로젝트를 선택한다. 다음으로, 하단
입력 상자들에 적당한 프로젝트 이름(지금 예제에서는 MyD3D12Project)과 프로젝트 폴더를 저
장할 위치(지금 예제에서는 C:d3d12bookMyDemos)를 지정한다. 또한, 만일 솔루션용 디렉터
리 만들기 체크 상자가 체크되어 있으면 해제한다. 이제 확인 버튼을 클릭한다.
그러면 새로운 대화상자가 나타난다. 왼쪽에는 두 가지 선택이 있는데, 응용 프로그램 설정을 선
택하면 대화상자가 [그림 5]와 같은 모습이 된다. 혹시 Windows 응용 프로그램이 선택되어 있지
않으면 그것을 선택한다. ‘추가 옵션’에서는 빈 프로젝트 상자를 체크한다.* 이제 마침 버튼을 클릭
하면, 특별한 문제가 없는 한 새로운 빈 Win32 프로젝트가 생성된다. 그러나 DirectX 예제 프로
젝트를 구축하려면 아직 해야 할 일이 몇 가지 남아 있다.
그림 3 새 프로젝트 만들기.
* 옮긴이 Visual Studio 에디션이나 구성에 따라서는 SDL(Security Development Lifecycle) 관련 옵션이 나타날 수도 있으나,
책의 예제들과는 무관하므로 체크를 해제하면 된다.
xvi
그림 4 새 프로젝트 설정.
그림 5 응용 프로그램 설정.
xvii
DirectX 라이브러리 링크 설정
이 책의 예제들은 필수 라이브러리 파일들의 링크를 소스 코드 안에서 직접 설정한다. 좀 더 구체적
으로 말하면, Common/d3dApp.h에 다음과 같이 #pragma 지시문들이 있다.
// 필요한 d3d12 라이브러리들을 링크한다.
#pragma comment(lib, d3dcompiler.lib)
#pragma comment(lib, D3D12.lib)
#pragma comment(lib, dxgi.lib)
	 이렇게 하면 프로젝트 속성 페이지를 열고 ‘링커’ 설정으로 가서 의존성(종속성)들을 추가
하는 수고를 덜 수 있다. 예제나 시연용 응용 프로그램을 만들 때에는 이 정도 설정으로 충분
하다.
소스 코드 추가 및 프로젝트 빌드
이렇게 해서 프로젝트의 기본적인 설정이 끝났다. 이제 소스 코드 파일들을 프로젝트에 추가하
고 프로젝트를 빌드해 보자. 우선 “Box” 예제 프로젝트(d3d12bookChapter 6 Drawing in
Direct3DBox)에서 BoxApp.cpp와 Shaders 폴더를 지금 프로젝트 폴더에 복사한다.
	이제 다음과 같은 과정을 통해서 소스 코드 파일들을 프로젝트에 추가하고 프로젝트를 빌
드한다.
1.	솔루션 탐색기에서 프로젝트 이름을 오른쪽 클릭한 후 문맥 메뉴에서 추가  기존 항목…을 선
택하고, BoxApp.cpp를 프로젝트에 추가한다.
2.	솔루션 탐색기에서 프로젝트 이름을 오른쪽 클릭한 후 문맥 메뉴에서 추가  기존 항목…을 선
택하고, 이 책 예제 폴더의 Common 폴더에 있는 모든 .h/.cpp 파일을 프로젝트에 추가한다.
그러면 솔루션 탐색기가 [그림 6]과 같은 모습이 될 것이다.
xviii
그림 7 “Box” 예제의 실행 모습.
3. 솔루션 탐색기에서 프로젝트 이름을 오른쪽 클릭한 후 속성을 선택한다. 구성 속성  일반 탭
으로 가서, 대상 플랫폼 버전 속성에 10으로 시작하는 버전 번호가 선택되어 있는지 확인한다.
Windows 10용 프로그램을 만들려면 반드시 10.x를 선택해야 한다. 이제 확인을 클릭해서
대화상자를 닫는다.*
* 옮긴이 대상 플랫폼 버전 속성에 10으로 시작하는 버전 번호가 없다면(예를 들어 8.1만 있다면) Windows 플랫폼 SDK를 갱신해야
한다. 여러 가지 방법이 있겠지만, 아마도 웹에서 “Windows 10용 Windows SDK”를 검색해서 MSDN 사이트의 해당 다운로드 페이
지로 가는 것이 가장 간단한 방법일 것이다. 추가로, 지금 예제처럼 프로젝트를 새로 만드는 것이 아니라 웹 부록의 프로젝트를 그대로 열
어서 빌드하는 경우 대상 플랫폼 버전의 불일치 때문에 빌드가 실패할 수 있다. 그런 경우 대상 플랫폼 버전 속성을 독자의 시스템에 깔린
버전의 번호(물론 10으로 시작하는)로 변경하면 문제가 해결된다.
그림 6 “Box” 예제와 Commons 폴더의 파일
들을 복사한 후의 솔루션 탐색기의 모습.
xix
4.	소스 코드들이 프로젝트에 추가되었고 대상 플랫폼도 설정했으므로, 이제 프로젝트를 빌드할
준비가 끝났다. 주 메뉴에서 디버그  디버깅 시작을 선택하면 프로젝트가 컴파일, 링크, 실행
된다. 모든 것이 제대로 되었다면 [그림 7]과 같은 모습의 응용 프로그램이 나타날 것이다.
참고:	 Common 디렉터리의 코드 중 상당 부분은 이 책의 진행을 따라 점차 구축된 결과물이다. 따라서
지금 당장 그 코드를 모두 이해하려 들지는 말고, 대신 해당 코드를 다루는 장을 공부할 때 함께 살펴보길
권한다.
xx
CONTENTS
지은이·옮긴이 소개 ............................................................................................................
iv
추천사 ...............................................................................................................................
v
옮긴이의 말 .......................................................................................................................
vi
서문 ...............................................................................................................................
viii
PART I 기초 필수 수학
CHAPTER 1 벡터 대수 	 3
1.1 벡터 ...........................................................................................................................
3
1.1.1 벡터와 좌표계 ....................................................................................................
5
1.1.2 왼손잡이 좌표계 대 오른손잡이 좌표계 ...................................................................
7
1.1.3 기본적인 벡터 연산들 ..........................................................................................
7
1.2 길이와 단위벡터 ...........................................................................................................
9
1.3 내적 .........................................................................................................................
11
1.3.1 직교화 ............................................................................................................
13
1.4 외적 .........................................................................................................................
15
1.4.1 2차원 유사 외적 ...............................................................................................
17
1.4.2 외적을 이용한 직교화 ........................................................................................
17
1.5 점 ............................................................................................................................
18
1.6 DirectXMath 라이브러리의 벡터 ..................................................................................
20
1.6.1 벡터 형식들 .....................................................................................................
21
1.6.2 적재 및 저장 함수 .............................................................................................
23
1.6.3 매개변수 전달 ..................................................................................................
24
1.6.4 상수 벡터 ........................................................................................................
26
1.6.5 중복적재된 연산자들 .........................................................................................
27
xxi
1.6.6 기타 상수 및 함수 .............................................................................................
27
1.6.7 설정 함수 ........................................................................................................
28
1.6.8 벡터 함수들 .....................................................................................................
30
1.6.9 부동소수점 오차 ...............................................................................................
34
1.7 요약 .........................................................................................................................
36
1.8 연습문제 ...................................................................................................................
38
CHAPTER 2 행렬 대수 	 43
2.1 정의 .........................................................................................................................
43
2.2 행렬 곱셈 ..................................................................................................................
46
2.2.1 정의 ...............................................................................................................
46
2.2.2 벡터와 행렬의 곱셈 ...........................................................................................
47
2.2.3 결합법칙 .........................................................................................................
48
2.3 전치행렬 ...................................................................................................................
48
2.4 단위행렬 ...................................................................................................................
49
2.5 행렬식 ......................................................................................................................
50
2.5.1 소행렬 ............................................................................................................
51
2.5.2 행렬식의 정의 ..................................................................................................
51
2.6 딸림행렬 ...................................................................................................................
53
2.7 역행렬 ......................................................................................................................
54
2.8 DirectXMath의 행렬 ..................................................................................................
56
2.8.1 행렬 형식들 .....................................................................................................
56
2.8.2 행렬 함수 ........................................................................................................
59
2.8.3 DirectXMath 행렬 예제 프로그램 .......................................................................
60
2.9 요약 .........................................................................................................................
62
2.10 연습문제 .................................................................................................................
64
xxii
CONTENTS
CHAPTER 3 변환 	 67
3.1 선형변환 ...................................................................................................................
68
3.1.1 정의 ...............................................................................................................
68
3.1.2 행렬 표현 ........................................................................................................
69
3.1.3 비례 ...............................................................................................................
70
3.1.4 회전 ...............................................................................................................
72
3.2 아핀변환 ...................................................................................................................
75
3.2.1 동차좌표 .........................................................................................................
75
3.2.2 아핀변환의 정의와 행렬 표현 ..............................................................................
76
3.2.3 이동 ...............................................................................................................
76
3.2.4 비례와 회전을 위한 아핀변환 행렬들 ....................................................................
79
3.2.5 아핀변환 행렬의 기하학적 해석 ...........................................................................
79
3.3 변환들의 합성 ............................................................................................................
81
3.4 좌표 변경 변환 ...........................................................................................................
82
3.4.1 벡터 ...............................................................................................................
84
3.4.2 점 ...................................................................................................................
85
3.4.3 행렬 표현 ........................................................................................................
86
3.4.4 결합법칙과 좌표 변경 행렬 .................................................................................
86
3.4.5 역행렬과 좌표 변경 행렬 ....................................................................................
87
3.5 변환 행렬 대 좌표 변경 행렬 .........................................................................................
89
3.6 DirectXMath 라이브러리의 변환 관련 함수들 .................................................................
90
3.7 요약 .........................................................................................................................
91
3.8 연습문제 ...................................................................................................................
92
xxiii
PART II Direct3D의 기초
CHAPTER 4 Direct3D의 초기화 	 103
4.1 기본 지식 ................................................................................................................
104
4.1.1 Direct3D 12의 개요 .......................................................................................
104
4.1.2 COM ..........................................................................................................
105
4.1.3 텍스처 형식 ...................................................................................................
106
4.1.4 교환 사슬과 페이지 전환 ..................................................................................
108
4.1.5 깊이 버퍼링 ...................................................................................................
109
4.1.6 자원과 서술자 ................................................................................................
112
4.1.7 다중표본화의 이론 ..........................................................................................
115
4.1.8 Direct3D의 다중표본화 ...................................................................................
116
4.1.9 기능 수준 ......................................................................................................
118
4.1.10 DXGI(DirectX Graphics Infrastructure) ........................................................
119
4.1.11 기능 지원 점검 .............................................................................................
124
4.1.12 상주성 ........................................................................................................
126
4.2 CPU와 GPU의 상호작용 ...........................................................................................
127
4.2.1 명령 대기열과 명령 목록 ..................................................................................
127
4.2.2 CPU/GPU 동기화 .........................................................................................
132
4.2.3 자원 상태 전이 ...............................................................................................
135
4.2.4 명령 목록을 이용한 다중 스레드 활용 .................................................................
137
4.3 Direct3D의 초기화 ...................................................................................................
137
4.3.1 장치 생성 ......................................................................................................
138
4.3.2 울타리 생성과 서술자 크기 얻기 ........................................................................
140
4.3.3 4X MSAA 품질 수준 지원 점검 ........................................................................
141
4.3.4 명령 대기열과 명령 목록 생성 ...........................................................................
141
xxiv
CONTENTS
4.3.5 교환 사슬의 서술과 생성 ..................................................................................
142
4.3.6 서술자 힙 생성 ...............................................................................................
145
4.3.7 렌더 대상 뷰(RTV) 생성 ...................................................................................
146
4.3.8 깊이·스텐실 버퍼와 뷰 생성 .............................................................................
148
4.3.9 뷰포트 설정 ...................................................................................................
153
4.3.10 가위 직사각형 설정 .......................................................................................
155
4.4 시간 측정과 애니메이션 .............................................................................................
156
4.4.1 성능 타이머 ...................................................................................................
157
4.4.2 GameTimer 클래스 .......................................................................................
158
4.4.3 프레임 간 경과 시간 ........................................................................................
159
4.4.4 전체 시간 ......................................................................................................
162
4.5 예제 응용 프로그램 프레임워크 ...................................................................................
166
4.5.1 D3DApp 클래스 ............................................................................................
166
4.5.2 프레임워크 메서드가 아닌 메서드들 ...................................................................
170
4.5.3 프레임워크 메서드들 .......................................................................................
171
4.5.4 프레임 통계치 ................................................................................................
173
4.5.5 메시지 처리부 ................................................................................................
175
4.5.6 Direct3D 초기화 예제(‘Init Direct3D’) ...............................................................
178
4.6 Direct3D 응용 프로그램의 디버깅 ...............................................................................
183
4.7 요약 .......................................................................................................................
185
CHAPTER 5 렌더링 파이프라인 	 189
5.1 3차원의 환상 ...........................................................................................................
190
5.2 모형의 표현 .............................................................................................................
193
5.3 컴퓨터 색상의 기본 개념 ............................................................................................
194
5.3.1 색상 연산 ......................................................................................................
195
xxv
5.3.2 128비트 색상 ................................................................................................
196
5.3.3 32비트 색상 ..................................................................................................
197
5.4 렌더링 파이프라인의 개요 ..........................................................................................
199
5.5 입력 조립기 단계 ......................................................................................................
201
5.5.1 정점 .............................................................................................................
201
5.5.2 기본도형 위상구조 ..........................................................................................
202
5.5.3 색인 .............................................................................................................
206
5.6 정점 셰이더 단계 ......................................................................................................
209
5.6.1 국소 공간과 세계 공간 .....................................................................................
209
5.6.2 시야 공간 ......................................................................................................
214
5.6.3 투영과 동차 절단 공간 .....................................................................................
217
5.7 테셀레이션 단계들 ....................................................................................................
226
5.8 기하 셰이더 단계 ......................................................................................................
227
5.9 절단 .......................................................................................................................
228
5.10 래스터화 단계 ........................................................................................................
230
5.10.1 뷰포트 변환 .................................................................................................
230
5.10.2 후면 선별 ....................................................................................................
230
5.10.3 정점 특성의 보간 ..........................................................................................
232
5.11 픽셀 셰이더 단계 ....................................................................................................
234
5.12 출력 병합기 단계 ....................................................................................................
234
5.13 요약 .....................................................................................................................
235
5.14 연습문제 ...............................................................................................................
236
CHAPTER 6 Direct3D의 그리기 연산 	 241
6.1 정점과 입력 배치 ......................................................................................................
241
6.2 정점 버퍼 ................................................................................................................
246
xxvi
6.3 색인과 색인 버퍼 ......................................................................................................
253
6.4 예제 정점 셰이더 ......................................................................................................
257
6.4.1 입력 배치 서술과 입력 서명 연결 .......................................................................
261
6.5 예제 픽셀 셰이더 ......................................................................................................
264
6.6 상수 버퍼 ................................................................................................................
268
6.6.1 상수 버퍼의 생성 ............................................................................................
268
6.6.2 상수 버퍼의 갱신 ............................................................................................
270
6.6.3 업로드 버퍼 보조 클래스 ..................................................................................
271
6.6.4 상수 버퍼 서술자 ............................................................................................
275
6.6.5 루트 서명과 서술자 테이블 ...............................................................................
276
6.7 셰이더의 컴파일 .......................................................................................................
281
6.7.1 오프라인 컴파일 .............................................................................................
283
6.7.2 어셈블리 코드 생성 .........................................................................................
285
6.7.3 Visual Studio를 이용한 오프라인 셰이더 컴파일 .................................................
288
6.8 래스터화기 상태 .......................................................................................................
289
6.9 파이프라인 상태 객체 ................................................................................................
290
6.10 기하구조 보조 구조체 ..............................................................................................
295
6.11 상자 예제 ..............................................................................................................
297
6.12 요약 .....................................................................................................................
309
6.13 연습문제 ...............................................................................................................
311
CHAPTER 7 Direct3D의 그리기 연산 제2부 	 317
7.1 프레임 자원 .............................................................................................................
318
7.2 렌더 항목 ................................................................................................................
322
7.3 패스별 상수 버퍼 ......................................................................................................
323
CONTENTS
xxvii
7.4 도형 기하구조 ..........................................................................................................
327
7.4.1 원기둥 메시의 생성 .........................................................................................
329
7.4.2 구 메시의 생성 ...............................................................................................
334
7.4.3 측지구 메시의 생성 .........................................................................................
334
7.5 도형 예제 ................................................................................................................
338
7.5.1 정점 버퍼와 색인 버퍼 .....................................................................................
338
7.5.2 렌더 항목 ......................................................................................................
342
7.5.3 프레임 자원들과 상수 버퍼 뷰들 ........................................................................
345
7.5.4 장면 그리기 ...................................................................................................
348
7.6 루트 서명 추가 설명 ..................................................................................................
351
7.6.1 루트 매개변수 ................................................................................................
351
7.6.2 서술자 테이블 ................................................................................................
354
7.6.3 루트 서술자 ...................................................................................................
357
7.6.4 루트 상수 ......................................................................................................
357
7.6.5 좀 더 복잡한 루트 서명 예제 .............................................................................
359
7.6.6 루트 인수의 버전 적용 .....................................................................................
361
7.7 지형과 파도 예제 ......................................................................................................
362
7.7.1 격자 정점 생성 ...............................................................................................
363
7.7.2 격자 색인 생성 ...............................................................................................
365
7.7.3 높이 함수 적용 ...............................................................................................
366
7.7.4 루트 CBV .....................................................................................................
369
7.7.5 동적 정점 버퍼 ...............................................................................................
371
7.8 요약 .......................................................................................................................
374
7.9 연습문제 .................................................................................................................
375
xxviii
CHAPTER 8 조명 	 377
8.1 빛과 재질의 상호작용 ................................................................................................
378
8.2 법선 벡터 ................................................................................................................
380
8.2.1 법선 벡터의 계산 ............................................................................................
382
8.2.2 법선 벡터의 변환 ............................................................................................
384
8.3 조명의 주요 벡터 ......................................................................................................
386
8.4 람베르트 코사인 법칙 ................................................................................................
387
8.5 분산 조명 ................................................................................................................
388
8.6 주변 조명 ................................................................................................................
390
8.7 반영 조명 ................................................................................................................
391
8.7.1 프레넬 효과 ...................................................................................................
392
8.7.2 표면 거칠기 ...................................................................................................
394
8.8 조명 모형 정리 .........................................................................................................
397
8.9 재질의 구현 .............................................................................................................
399
8.10 평행광 ..................................................................................................................
404
8.11 점광 .....................................................................................................................
405
8.11.1 빛의 감쇠 ....................................................................................................
406
8.12 점적광 ..................................................................................................................
407
8.13 조명 구현 ..............................................................................................................
408
8.13.1 빛 구조체 ....................................................................................................
408
8.13.2 공통 보조 함수들 ..........................................................................................
410
8.13.3 지향광의 구현 ..............................................................................................
412
8.13.4 점광의 구현 .................................................................................................
413
8.13.5 점적광의 구현 ..............................................................................................
413
8.13.6 여러 빛의 누적 .............................................................................................
414
8.13.7 주 HLSL 파일 ..............................................................................................
416
CONTENTS
xxix
8.14 파도 조명 예제 .......................................................................................................
419
8.14.1 정점 형식 ....................................................................................................
420
8.14.2 법선 계산 ....................................................................................................
421
8.14.3 빛 방향의 갱신 .............................................................................................
423
8.14.4 루트 서명 갱신 .............................................................................................
424
8.15 요약 .....................................................................................................................
425
8.16 연습문제 ...............................................................................................................
426
CHAPTER 9 텍스처 적용 	 429
9.1 텍스처와 자원의 개괄 ................................................................................................
430
9.2 텍스처 좌표 .............................................................................................................
433
9.3 텍스처 자료 원본 ......................................................................................................
436
9.3.1 DDS의 개요 ..................................................................................................
436
9.3.2 DDS 파일 만들기 ...........................................................................................
438
9.4 텍스처 생성 및 활성화 ...............................................................................................
439
9.4.1 DDS 파일 불러오기 ........................................................................................
439
9.4.2 SRV 힙 .........................................................................................................
440
9.4.3 SRV 서술자 생성 ...........................................................................................
440
9.4.4 텍스처를 파이프라인에 묶기 .............................................................................
443
9.5 필터 .......................................................................................................................
446
9.5.1 확대 .............................................................................................................
446
9.5.2 축소 .............................................................................................................
448
9.5.3 비등방 필터링 ................................................................................................
449
9.6 텍스처 좌표 지정 모드 ...............................................................................................
450
9.7 표본추출기 객체 .......................................................................................................
453
9.7.1 표본추출기 생성 .............................................................................................
454
xxx
9.7.2 정적 표본추출기 .............................................................................................
457
9.8 셰이더에서 텍스처 표본 추출 ......................................................................................
460
9.9 나무 상자 예제 .........................................................................................................
461
9.9.1 텍스처 좌표의 지정 .........................................................................................
461
9.9.2 텍스처 생성 ...................................................................................................
462
9.9.3 텍스처 설정 ...................................................................................................
463
9.9.4 갱신된 HLSL .................................................................................................
464
9.10 텍스처 변환 ...........................................................................................................
467
9.11 텍스처 입힌 언덕과 파도 예제 ...................................................................................
468
9.11.1 격자 텍스처 좌표 생성 ...................................................................................
469
9.11.2 텍스처 타일링 ..............................................................................................
471
9.11.3 텍스처 애니메이션 ........................................................................................
471
9.12 요약 .....................................................................................................................
472
9.13 연습문제 ...............................................................................................................
473
CHAPTER 10 혼합 	 477
10.1 혼합 공식 ..............................................................................................................
478
10.2 혼합 연산 ..............................................................................................................
479
10.3 혼합 계수 ..............................................................................................................
481
10.4 혼합 상태 ..............................................................................................................
482
10.5 예제 .....................................................................................................................
486
10.5.1 색상 기록 금지 .............................................................................................
486
10.5.2 가산 혼합과 감산 혼합 ...................................................................................
487
10.5.3 승산 혼합 ....................................................................................................
487
10.5.4 투명도 ........................................................................................................
488
10.5.5 혼합과 깊이 버퍼 ..........................................................................................
489
CONTENTS
xxxi
10.6 알파 채널 ..............................................................................................................
490
10.7 픽셀 잘라내기 ........................................................................................................
491
10.8 안개 .....................................................................................................................
494
10.9 요약 .....................................................................................................................
501
10.10 연습문제 .............................................................................................................
502
CHAPTER 11 스텐실 적용 	 503
11.1 깊이·스텐실 버퍼의 자료 형식과 버퍼 지우기 ..............................................................
504
11.2 스텐실 판정 ...........................................................................................................
506
11.3 깊이·스텐실 상태의 서술 .........................................................................................
507
11.3.1 깊이 설정들 .................................................................................................
508
11.3.2 스텐실 설정들 ..............................................................................................
508
11.3.3 깊이·스텐실 상태의 생성 및 묶기 ...................................................................
511
11.4 평면거울 구현 ........................................................................................................
511
11.4.1 거울 예제의 개요 ..........................................................................................
512
11.4.2 거울 예제의 깊이·스텐실 상태 정의 ................................................................
515
11.4.3 장면 그리기 .................................................................................................
516
11.4.4 정점 감김 순서와 반사 ...................................................................................
518
11.5 평면 그림자의 구현 .................................................................................................
519
11.5.1 평행광 그림자 ..............................................................................................
520
11.5.2 점광 그림자 .................................................................................................
522
11.5.3 범용 그림자 행렬 ..........................................................................................
523
11.5.4 스텐실 버퍼를 이용한 이중 혼합 방지 ...............................................................
524
11.5.5 평면 그림자 구현 코드 ...................................................................................
525
11.6 요약 .....................................................................................................................
527
11.7 연습문제 ...............................................................................................................
527
xxxii
CHAPTER 12 기하 셰이더 	 535
12.1 기하 셰이더 프로그래밍 ...........................................................................................
536
12.2 나무 빌보드 예제 ....................................................................................................
543
12.2.1 개요 ...........................................................................................................
543
12.2.2 정점 구조체 .................................................................................................
545
12.2.3 HLSL 파일 ..................................................................................................
546
12.2.4 SV_PrimitiveID ...........................................................................................
551
12.3 텍스처 배열 ...........................................................................................................
553
12.3.1 개요 ...........................................................................................................
553
12.3.2 텍스처 배열의 표본 추출 ................................................................................
553
12.3.3 텍스처 배열의 적재 .......................................................................................
555
12.3.4 텍스처 부분자원 ...........................................................................................
556
12.4 알파-포괄도 변환 ...................................................................................................
557
12.5 요약 .....................................................................................................................
558
12.6 연습문제 ...............................................................................................................
560
CHAPTER 13 계산 셰이더 	 565
13.1 스레드와 스레드 그룹 ..............................................................................................
568
13.2 간단한 계산 셰이더 예제 ..........................................................................................
570
13.2.1 계산 셰이더 설정 ..........................................................................................
571
13.3 자료 입력 자원과 출력 자원 ......................................................................................
572
13.3.1 텍스처 입력 .................................................................................................
572
13.3.2 텍스처 출력과 순서 없는 접근 뷰(UAV) ............................................................
572
13.3.3 텍스처 색인화 및 표본 추출 ............................................................................
576
13.3.4 구조적 버퍼 자원 ..........................................................................................
579
CONTENTS
xxxiii
13.3.5 계산 셰이더의 결과를 시스템 메모리에 복사 .....................................................
582
13.4 스레드 식별 시스템 값 .............................................................................................
586
13.5 추가 버퍼와 소비 버퍼 .............................................................................................
588
13.6 공유 메모리와 동기화 ..............................................................................................
589
13.7 흐리기 예제 ...........................................................................................................
591
13.7.1 흐리기의 이론 ..............................................................................................
592
13.7.2 텍스처 대상 렌더링 기법 ................................................................................
595
13.7.3 흐리기 구현의 개요 .......................................................................................
598
13.7.4 계산 셰이더 프로그램 ....................................................................................
605
13.8 더 읽을거리 ...........................................................................................................
611
13.9 요약 .....................................................................................................................
612
13.10 연습문제 .............................................................................................................
614
CHAPTER 14 테셀레이션 단계들 	 621
14.1 테셀레이션 기본도형 위상구조 ..................................................................................
623
14.1.1 테셀레이션과 정점 셰이더 ..............................................................................
624
14.2 덮개 셰이더 ...........................................................................................................
624
14.2.1 상수 덮개 셰이더 ..........................................................................................
624
14.2.2 제어점 덮개 셰이더 .......................................................................................
627
14.3 테셀레이터 단계 .....................................................................................................
630
14.3.1 사각형 패치의 테셀레이션 예 ..........................................................................
630
14.3.2 삼각형 패치의 테셀레이션 예 ..........................................................................
631
14.4 영역 셰이더 ...........................................................................................................
631
14.5 사각형 하나의 테셀레이션 ........................................................................................
633
14.6 삼차 베지에 사각형 패치 ..........................................................................................
638
14.6.1 베지에 곡선 .................................................................................................
638
xxxiv
14.6.2 삼차 베지에 곡면 ..........................................................................................
641
14.6.3 삼차 베지에 곡면 평가 코드 ............................................................................
642
14.6.4 패치 기하구조의 정의 ....................................................................................
645
14.7 요약 .....................................................................................................................
647
14.8 연습문제 ...............................................................................................................
649
PART III 응용
CHAPTER 15 1인칭 카메라 구축과 동적 색인화 	 655
15.1 시야 변환 개괄 .......................................................................................................
656
15.2 카메라를 대표하는 Camera 클래스 ...........................................................................
657
15.3 주요 메서드 구현 ....................................................................................................
660
15.3.1 XMVECTOR를 돌려주는 메서드들 .................................................................
660
15.3.2 SetLens 메서드 ...........................................................................................
660
15.3.3 절두체 속성 유도 ..........................................................................................
661
15.3.4 카메라 변환 .................................................................................................
662
15.3.5 시야 행렬 구축 .............................................................................................
663
15.4 카메라 예제 해설 ....................................................................................................
665
15.5 동적 색인화 ...........................................................................................................
667
15.6 요약 .....................................................................................................................
675
15.7 연습문제 ...............................................................................................................
675
CONTENTS
xxxv
CHAPTER 16 인스턴싱과 절두체 선별 	 677
16.1 하드웨어 인스턴싱 ..................................................................................................
677
16.1.1 인스턴싱 방식으로 기하구조 그리기 .................................................................
678
16.1.2 인스턴스별 자료 ...........................................................................................
679
16.1.3 인스턴스 버퍼 생성 .......................................................................................
685
16.2 경계입체와 절두체 ..................................................................................................
688
16.2.1 DirectXMath의 충돌 라이브러리 ....................................................................
688
16.2.2 경계상자 .....................................................................................................
688
16.2.3 경계구 ........................................................................................................
693
16.2.4 절두체 ........................................................................................................
694
16.3 절두체 선별 ...........................................................................................................
701
16.4 요약 .....................................................................................................................
705
16.5 연습문제 ...............................................................................................................
706
CHAPTER 17 3차원 물체의 선택 	 709
17.1 화면에서 투영 창으로의 변환 ....................................................................................
711
17.2 세계 공간과 국소 공간의 선택 반직선 .........................................................................
715
17.3 반직선 대 메시 교차 판정 .........................................................................................
716
17.3.1 반직선 대 AABB 교차 판정 ............................................................................
718
17.3.2 반직선 대 구 교차 판정 ..................................................................................
719
17.3.3 반직선 대 삼각형 교차 판정 ............................................................................
720
17.4 예제 응용 프로그램 .................................................................................................
723
17.5 요약 .....................................................................................................................
724
17.6 연습문제 ...............................................................................................................
725
xxxvi
CHAPTER 18 입방체 매핑 	 727
18.1 입방체 매핑 ...........................................................................................................
727
18.2 환경 매핑 ..............................................................................................................
729
18.2.1 입방체 맵의 적재와 적용 ................................................................................
732
18.3 하늘에 텍스처 입히기 ..............................................................................................
733
18.4 물체의 주변 환경 반사 .............................................................................................
738
18.5 동적 입방체 맵 .......................................................................................................
742
18.5.1 동적 입방체 맵 보조 클래스 ............................................................................
743
18.5.2 입방체 맵 자원 생성 ......................................................................................
744
18.5.3 추가 서술자 힙 공간 ......................................................................................
745
18.5.4 서술자 구축 .................................................................................................
747
18.5.5 깊이 버퍼 구축 .............................................................................................
748
18.5.6 입방체 맵 뷰포트와 가위 직사각형 ...................................................................
749
18.5.7 입방체 맵 카메라 설정 ...................................................................................
750
18.5.8 장면을 입방체 맵에 그리기 .............................................................................
752
18.6 기하 셰이더를 이용한 동적 입방체 매핑 ......................................................................
756
18.7 요약 .....................................................................................................................
759
18.8 연습문제 ...............................................................................................................
760
CHAPTER 19 법선 매핑 	 763
19.1 동기 .....................................................................................................................
764
19.2 법선 맵 .................................................................................................................
765
19.3 텍스처 공간 또는 접공간 ..........................................................................................
767
19.4 정점 접공간 ...........................................................................................................
769
19.5 접공간과 물체 공간 사이의 변환 ................................................................................
770
CONTENTS
xxxvii
19.6 법선 매핑 셰이더 코드 .............................................................................................
772
19.7 요약 .....................................................................................................................
777
19.8 연습문제 ...............................................................................................................
777
CHAPTER 20 그림자 매핑 	 781
20.1 장면 깊이의 렌더링 .................................................................................................
781
20.2 직교투영 ...............................................................................................................
785
20.3 투영 텍스처 좌표 ....................................................................................................
787
20.3.1 코드 구현 ....................................................................................................
789
20.3.2 절두체 바깥의 점들 .......................................................................................
790
20.3.3 직교투영 .....................................................................................................
791
20.4 그림자 매핑 ...........................................................................................................
792
20.4.1 알고리즘 설명 ..............................................................................................
792
20.4.2 편향과 앨리어싱 ...........................................................................................
794
20.4.3 비율 근접 필터링(PCF) ..................................................................................
798
20.4.4 그림자 맵 구축 .............................................................................................
802
20.4.5 그림자 계수 .................................................................................................
808
20.4.6 그림자 맵 판정 .............................................................................................
810
20.4.7 그림자 맵의 시각화 .......................................................................................
811
20.5 큰 PCF 핵 ............................................................................................................
812
20.5.1 ddx 함수와 ddy 함수 ....................................................................................
812
20.5.2 큰 PCF 핵 문제의 해법 .................................................................................
813
20.5.3 큰 PCF 핵 문제의 또 다른 해법 ......................................................................
816
20.6 요약 .....................................................................................................................
818
20.7 연습문제 ...............................................................................................................
819
xxxviii
CHAPTER 21 주변광 차폐 	 821
21.1 반직선 투사를 통한 주변광 차폐 ................................................................................
822
21.2 화면 공간 주변광 차폐(SSAO) ..................................................................................
827
21.2.1 법선과 깊이 렌더링 패스 ................................................................................
827
21.2.2 주변광 차폐 패스 ..........................................................................................
829
21.2.3 흐리기 패스 .................................................................................................
840
21.2.4 주변광 차폐 맵의 적용 ...................................................................................
844
21.3 요약 .....................................................................................................................
846
21.4 연습문제 ...............................................................................................................
847
CHAPTER 22 사원수 	 849
22.1 복소수 개괄 ...........................................................................................................
850
22.1.1 정의 ...........................................................................................................
850
22.1.2 기하학적 해석 ..............................................................................................
851
22.1.3 극좌표 표현과 회전 .......................................................................................
852
22.2 사원수 대수학 ........................................................................................................
853
22.2.1 정의와 기본 연산 ..........................................................................................
853
22.2.2 특별한 곱들 .................................................................................................
855
22.2.3 사원수 연산의 성질 .......................................................................................
855
22.2.4 변환 ...........................................................................................................
856
22.2.5 켤레와 크기 .................................................................................................
856
22.2.6 역 ...............................................................................................................
858
22.2.7 극형식 ........................................................................................................
858
22.3 단위 사원수와 회전 .................................................................................................
860
22.3.1 회전 연산자 .................................................................................................
860
CONTENTS
xxxix
22.3.2 사원수 회전 연산자를 행렬로 변환 ...................................................................
862
22.3.3 행렬을 사원수 회전 연산자로 변환 ...................................................................
864
22.3.4 합성 ...........................................................................................................
866
22.4 사원수 보간 ...........................................................................................................
866
22.5 DirectXMath 라이브러리의 사원수 함수들 .................................................................
872
22.6 사원수 회전 예제 ....................................................................................................
873
22.7 요약 .....................................................................................................................
879
22.8 연습문제 ...............................................................................................................
880
CHAPTER 23 캐릭터 애니메이션 	 883
23.1 뼈대 좌표계들의 계통구조 ........................................................................................
884
23.1.1 수학적 정의 .................................................................................................
885
23.2 메시 스키닝 ...........................................................................................................
888
23.2.1 정의 ...........................................................................................................
888
23.2.2 뿌리 변환의 재정의 .......................................................................................
889
23.2.3 오프셋 변환 .................................................................................................
890
23.2.4 골격의 애니메이션 ........................................................................................
890
23.2.5 최종 변환 계산 .............................................................................................
893
23.3 정점 혼합 ..............................................................................................................
895
23.4 파일에서 애니메이션 자료 적재 .................................................................................
899
23.4.1 헤더 ...........................................................................................................
899
23.4.2 재질 목록 ....................................................................................................
900
23.4.3 부분집합 정의 ..............................................................................................
901
23.4.4 정점 및 삼각형 자료 ......................................................................................
902
23.4.5 뼈대 오프셋 변환 목록 ...................................................................................
902
23.4.6 골격 계통구조 ..............................................................................................
903
xl
23.4.7 애니메이션 자료 ...........................................................................................
903
23.4.8 M3DLoader 클래스 .....................................................................................
906
23.5 캐릭터 애니메이션 예제 ...........................................................................................
908
23.6 요약 .....................................................................................................................
911
23.7 연습문제 ...............................................................................................................
913
APPENDIX A Windows 프로그래밍 입문 	 915
A.1 개요 .......................................................................................................................
916
A.1.1 자원 .............................................................................................................
916
A.1.2 사건, 메시지 대기열, 메시지, 메시지 루프 ...........................................................
917
A.1.3 그래픽 사용자 인터페이스(GUI) ........................................................................
919
A.1.4 유니코드 .......................................................................................................
920
A.2 기본적인 Windows 응용 프로그램 .............................................................................
920
A.3 기본 Windows 응용 프로그램 설명 ............................................................................
925
A.3.1 헤더 포함, 전역 변수, 함수 선언 ........................................................................
925
A.3.2 WinMain 함수 ...............................................................................................
926
A.3.3 WNDCLASS 구조체와 창 클래스 등록 .............................................................
926
A.3.4 창의 생성과 표시 ............................................................................................
929
A.3.5 메시지 루프 ...................................................................................................
932
A.3.6 창 프로시저 ...................................................................................................
933
A.3.7 MessageBox 함수 ........................................................................................
935
A.4 더 나은 메시지 루프 ..................................................................................................
936
A.5 요약 .......................................................................................................................
937
A.6 연습문제 .................................................................................................................
938
CONTENTS
xli
APPENDIX B HLSL 레퍼런스 	 939
B.1 변수 형식 ................................................................................................................
939
B.1.1 스칼라 형식 ...................................................................................................
939
B.1.2 벡터 형식 ......................................................................................................
939
B.1.3 행렬 형식 ......................................................................................................
941
B.1.4 배열 .............................................................................................................
943
B.1.5 구조체 ..........................................................................................................
943
B.1.6 typedef 키워드 .............................................................................................
944
B.1.7 변수 선언 한정사 ............................................................................................
944
B.1.8 캐스팅 ..........................................................................................................
945
B.2 키워드와 연산자 .......................................................................................................
946
B.2.1 키워드 ..........................................................................................................
946
B.2.2 연산자 ..........................................................................................................
946
B.3 프로그램의 흐름 .......................................................................................................
948
B.4 함수 .......................................................................................................................
949
B.4.1 사용자 정의 함수 ............................................................................................
949
B.4.2 내장 함수 ......................................................................................................
951
B.4.3 상수 버퍼의 압축 및 채움 ................................................................................
954
APPENDIX C 해석기하학 주제 몇 가지 	 959
C.1 반직선, 선, 선분 .......................................................................................................
959
C.2 평행사변형 .............................................................................................................
960
C.3 삼각형 ...................................................................................................................
961
C.4 평면 ......................................................................................................................
962
C.4.1 DirectXMath 라이브러리의 평면 표현 ..............................................................
963
xlii
C.4.2 점과 평면의 공간 관계 ....................................................................................
964
C.4.3 평면의 구축 ...................................................................................................
965
C.4.4 평면의 정규화 ................................................................................................
966
C.4.5 평면의 변환 ...................................................................................................
966
C.4.6 주어진 점과 가장 가까운 평면의 점 ...................................................................
967
C.4.7 반직선과 평면의 교차 .....................................................................................
967
C.4.8 벡터의 반사 ...................................................................................................
968
C.4.9 점의 반사 ......................................................................................................
968
C.4.10 반사행렬 .....................................................................................................
968
C.5 연습문제 ................................................................................................................
970
APPENDIX D 연습문제 해답 모음 	 973
APPENDIX E 참고문헌 및 더 읽을 거리 	 975
찾아보기 ........................................................................................................................
981
CONTENTS
11.6 DirectXMath 라이브러리의 벡터
기초 필수 수학
Part I
“이 세상의 이치는 수학 지식 없이 알아낼 수 없다.”
로저 베이컨Roger Bacon
, Opus Majus part 4 Distinctia Prima cap 1, 1267.
비디오 게임들은 가상의 세계를 시뮬레이션하려고 한다. 그러나 본질적으로 컴퓨터는 수치를 처리하는 기
계이다. 따라서 어떻게 세상을 컴퓨터 안으로 옮겨올 것인가라는 문제가 제기된다. 그 답은, 세상과 세상에
있는 사물들 사이의 상호작용을 전부 수학적으로 서술한다는 것이다. 따라서 수학은 비디오 게임 개발에서
근본적인 역할을 차지한다.
	 기초 필수 과정에 해당하는 제1부에서는 이 책 전반에서 사용할 수학적 도구들을 소개한다. 주된 초점
은 이 책의 거의 모든 예제 프로그램에 쓰이는 도구들인 벡터와 좌표계, 행렬, 변환이다. 수학적 설명 외에,
DirectXMath 라이브러리의 관련 클래스들과 함수들도 예제와 함께 간략히 소개한다.
	 제1부는 단지 이 책의 나머지를 이해하는 데 필수적인 주제들만 다룰 뿐, 비디오 게임을 위한 수학을 완
전하고 상세하게 서술하는 것은 아님을 주의하기 바란다. 그러려면 책 한 권이 통째로 필요할 것이다. 비디
오 게임 수학에 대한 좀 더 완전한 참고서를 원하는 독자에게는 부록 E의 [Verth04]와 [Lengyel02]를 추
천한다.
•	제1장 벡터 대수: 컴퓨터 게임에서 쓰이는 가장 중요한 수학적 대상은 벡터일 것이다. 예를
들어 벡터는 위치, 변위, 방향, 속도, 힘을 나타내는 데 쓰인다. 제1장에서는 벡터와 벡터를
다루는 연산들을 공부한다.
•	제2장 행렬 대수: 행렬은 변환을 효율적이고도 간결하게 나타내는 수단을 제공한다. 제2장
에서는 행렬과 행렬에 대해 정의되는 연산들을 익힌다.
•	제3장 변환: 제3장은 근본적인 세 가지 기하 변환인 비례변환, 회전변환, 이동변환을 살펴
본다. 이 변환들은 3차원 공간에서 3차원 물체들을 조작하는 데 쓰인다. 또한, 제3장은 기
하구조를 나타내는 좌표를 한 좌표계에서 다른 좌표계로 바꾸는 데 쓰이는 좌표 변경 변환
도 설명한다.
Part I
기초 필수 수학
3
벡터는 현대적인 비디오 게임들의 공통 요소라 할 수 있는 컴퓨터 그래픽과 충돌 검출, 물리 시
뮬레이션에서 핵심적인 역할을 한다. 벡터에 대한 이번 장의 접근방식은 비공식적이고 실용적
이다. 3차원 게임·그래픽용 수학만을 전문적으로 다루는 책을 원하는 독자에게는 [Verth04]
를 권하겠다. 이 책의 거의 모든 예제 프로그램에서 쓰인다는 점에서 벡터는 아주 중요한 대상
이다.
목표
1.	 벡터의 기하학적 표현 방법과 수치적 표현 방법을 배운다.
2.	 벡터에 대해 정의되는 연산들과 그 연산들의 기하학적 응용 방법을 배운다.
3.	 DirectXMath 라이브러리의 벡터 관련 함수들과 클래스들에 익숙해진다.
1.1 벡터
벡터(vector, 방향량)는 크기와 방향을 모두 가진 수량(quantity)을 가리키는 말이다. 크
기(magnitude)와 방향(direction)을 모두 가진 수량을 좀 더 공식적으로 벡터값 수량
(vector-valued quantity)이라고 부른다. 벡터값 수량의 예로는 힘(force; 힘은 특정한 방
향과 세기로 가해지는데, 세기(strength)가 곧 크기이다), 변위變位
(displacement; 한 입자의
벡터 대수
CHAPTER 1
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기

More Related Content

What's hot

김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019devCAT Studio, NEXON
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremSeungmo Koo
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features SummaryChris Ohk
 
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들강 민우
 
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인승명 양
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다Lee Dustin
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법Chris Ohk
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)_ce
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들MinGeun Park
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019devCAT Studio, NEXON
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 

What's hot (20)

김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
 
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 

Similar to 『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기

20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)Dongho Kim
 
게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)Kiyoung Moon
 
[0602 박민근] direct2 d
[0602 박민근] direct2 d[0602 박민근] direct2 d
[0602 박민근] direct2 dMinGeun Park
 
에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~Lee Jungpyo
 
KGC 2007 소프트웨어 렌더러 개발
KGC 2007  소프트웨어 렌더러 개발KGC 2007  소프트웨어 렌더러 개발
KGC 2007 소프트웨어 렌더러 개발SeongWan Kim
 
(책 소개) 한 권으로 읽는 컴퓨터 구조와 프로그래밍
(책 소개) 한 권으로 읽는 컴퓨터 구조와 프로그래밍(책 소개) 한 권으로 읽는 컴퓨터 구조와 프로그래밍
(책 소개) 한 권으로 읽는 컴퓨터 구조와 프로그래밍Jay Park
 
1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법Taeung Ra
 
The hows and_whys_of_level_design_01
The hows and_whys_of_level_design_01The hows and_whys_of_level_design_01
The hows and_whys_of_level_design_01용태 이
 
[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법Sehyeon Nam
 
[0129 박민근] direct x2d
[0129 박민근] direct x2d[0129 박민근] direct x2d
[0129 박민근] direct x2dMinGeun Park
 
How to build Design System?
How to build Design System?How to build Design System?
How to build Design System?John Kim
 
The스프라이트
The스프라이트The스프라이트
The스프라이트Hong-Gi Joe
 
[0602 박민근] Direct2D
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D흥배 최
 
C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.해근 조
 
Igc2016 Technical Artist가 뭐하는 사람이에요?
Igc2016 Technical Artist가 뭐하는 사람이에요?Igc2016 Technical Artist가 뭐하는 사람이에요?
Igc2016 Technical Artist가 뭐하는 사람이에요?SangYun Yi
 
123D Design - 모델링 기초
123D Design - 모델링 기초123D Design - 모델링 기초
123D Design - 모델링 기초Circulus
 
UML 적절하게 사용하기
UML 적절하게 사용하기UML 적절하게 사용하기
UML 적절하게 사용하기종빈 오
 
[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer Graphics[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer GraphicsChris Ohk
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기수보 김
 
『임베디드 안드로이드』 - 미리보기
『임베디드 안드로이드』 - 미리보기『임베디드 안드로이드』 - 미리보기
『임베디드 안드로이드』 - 미리보기복연 이
 

Similar to 『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기 (20)

20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)
 
게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)게임프로그래머에게 배우는 C#1권(버전1)
게임프로그래머에게 배우는 C#1권(버전1)
 
[0602 박민근] direct2 d
[0602 박민근] direct2 d[0602 박민근] direct2 d
[0602 박민근] direct2 d
 
에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~에코노베이션 3차 세미나 교안 1st Edition.~
에코노베이션 3차 세미나 교안 1st Edition.~
 
KGC 2007 소프트웨어 렌더러 개발
KGC 2007  소프트웨어 렌더러 개발KGC 2007  소프트웨어 렌더러 개발
KGC 2007 소프트웨어 렌더러 개발
 
(책 소개) 한 권으로 읽는 컴퓨터 구조와 프로그래밍
(책 소개) 한 권으로 읽는 컴퓨터 구조와 프로그래밍(책 소개) 한 권으로 읽는 컴퓨터 구조와 프로그래밍
(책 소개) 한 권으로 읽는 컴퓨터 구조와 프로그래밍
 
1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법
 
The hows and_whys_of_level_design_01
The hows and_whys_of_level_design_01The hows and_whys_of_level_design_01
The hows and_whys_of_level_design_01
 
[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법[GPG스터디] 1.0 데이터 주도적 설계의 마법
[GPG스터디] 1.0 데이터 주도적 설계의 마법
 
[0129 박민근] direct x2d
[0129 박민근] direct x2d[0129 박민근] direct x2d
[0129 박민근] direct x2d
 
How to build Design System?
How to build Design System?How to build Design System?
How to build Design System?
 
The스프라이트
The스프라이트The스프라이트
The스프라이트
 
[0602 박민근] Direct2D
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D
 
C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.
 
Igc2016 Technical Artist가 뭐하는 사람이에요?
Igc2016 Technical Artist가 뭐하는 사람이에요?Igc2016 Technical Artist가 뭐하는 사람이에요?
Igc2016 Technical Artist가 뭐하는 사람이에요?
 
123D Design - 모델링 기초
123D Design - 모델링 기초123D Design - 모델링 기초
123D Design - 모델링 기초
 
UML 적절하게 사용하기
UML 적절하게 사용하기UML 적절하게 사용하기
UML 적절하게 사용하기
 
[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer Graphics[9XD] Introduction to Computer Graphics
[9XD] Introduction to Computer Graphics
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기
 
『임베디드 안드로이드』 - 미리보기
『임베디드 안드로이드』 - 미리보기『임베디드 안드로이드』 - 미리보기
『임베디드 안드로이드』 - 미리보기
 

More from 복연 이

​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기복연 이
 
​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기복연 이
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기복연 이
 
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기복연 이
 
『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기복연 이
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 
『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기복연 이
 
『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기복연 이
 
『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기복연 이
 
『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기복연 이
 
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기복연 이
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기복연 이
 
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기복연 이
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기복연 이
 
『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기복연 이
 
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기복연 이
 
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기복연 이
 
『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기복연 이
 
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기복연 이
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도복연 이
 

More from 복연 이 (20)

​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
 
​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기
 
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
 
『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기
 
『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기
 
『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기
 
『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기
 
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기
 
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기
 
『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기
 
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
 
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
 
『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기
 
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
 

『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기

  • 1.
  • 2.
  • 3.
  • 4. DirectX 12를 이용한 3D 게임 프로그래밍 입문 게임 개발 중심으로 익히는 대화식 컴퓨터 그래픽 프로그래밍 초판 1쇄 발행 2017년 05월 25일 지은이 프랭크 D. 루나 / 옮긴이 류광 / 펴낸이 김태헌 펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로7길 83 한빛미디어(주) IT출판부 전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124 등록 1999년 6월 24일 제10 – 1779호 / ISBN 978-89-6848-779-8 93000 총괄 전태호 / 책임편집 김창수 / 기획·편집 이복연 디자인 표지 최연희 조판 이경숙 영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 변지영 / 제작 박성우, 김정우 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로 알려주십시오. 잘못된 책은 구입하신 서점에서 교환해드립니다. 책값은 뒤표지에 표시되어 있습니다. 한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr INTRODUCTION TO 3D GAME PROGRAMMING WITH DIRECTX 12 Translation Copyright ©2017 by Hanbit Media, Inc. Original Copyright ©2016 by MERCURY LEARNING AND INFORMATION LLC. All rights reserved. 이 책의 저작권은 대니홍 에이전시를 통한 저작권사와의 독점 계약으로 한빛미디어 (주)에 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다. 지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요. 한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
  • 5.
  • 6. iv 지은이 프랭크 D. 루나 Frank D. Luna 15년 넘게 대화식 3차원 그래픽 응용 프로그램을 프로그래밍해 왔다. DirectX에 관한 세 권의 베 스트셀러를 저술했으며, 3차원 의료 시각화와 3차원 건축 설계 소프트웨어, 그리고 게임 개발 분야 에서 일한 경력이 있다. 그는 캘리포니아 대학교 어바인(University of California, Irvine)에서 수학 학사 학위를 받았다. 옮긴이 류광 1996년부터 활동해온 프로그래밍 서적 전문 번역가로, Knuth 교수의 고전 『컴퓨터 프로그래밍의 예술』(The Art of Computer Programming) 시리즈를 비롯한 다양한 분야의 프로그래밍 서 적을 50권 번역했다. 게임 및 그래픽 프로그래밍 관련 번역서로는 본서의 전작인 『DirectX 11을 이용한 3D 게임 프로그래밍 입문』과 『Game Programming Gems』 시리즈, 『Game Engine Gems』 시리즈, 『3D 게임 프로그래밍 & 컴퓨터 그래픽을 위한 수학』 1, 2판 등이 있다. 번역과 프로그래밍 외에 소프트웨어 문서화에도 관심이 많으며, 수많은 오픈소스 프로젝트들의 표준 문서 형식으로 쓰이는 DocBook의 국내 사용자 모임인 닥북 한국(http://docbook.kr/)의 일원이다. 현재 번역서 정보 사이트 occam’s Razor(http://occamsrazr.net/)와 Game Programming Gems 시리즈를 비롯한 게임 개발서들의 독자 지원 및 논의 사이트 GpgStudy(http://www. gpgstudy.com/)를 운영하고 있다. 지은이·옮긴이 소개
  • 7. v “게임 회사 기술 시험이나 면접에는 어떤 문제가 나오나요?” 게임 프로그래머 지망생들에게 가장 많이 받는 질문입니다. 이 책의 독자 대부분도 게임 클라이 언트 프로그래머 지망생일 겁니다. 이 질문에 제 경험을 바탕으로 답을 드리자면, 유니티나 언리얼 같은 상용 엔진의 기능에 대해서는 의외로 많이 묻지 않습니다. 대부분 회사는 그 대신 C++, 자료 구조와 알고리즘, 게임 수학, 그래픽스 프로그래밍 기초에 대해서 주로 물어봅니다. 심지어 유니티 로 개발하는 엔씨, 넥슨, 넷마블 같은 회사에서도 말이죠. 지금은 주로 상용 엔진으로 게임을 개발하는 시대라 DirectX 같은 저수준 API는 공부하지 않아 도 된다고 생각하실지 모릅니다. 하지만 그 생각은 틀렸다고 감히 말씀드립니다. 현업에서 신입 게 임 개발자에게 요구하는 능력은 여전히 C++, DirectX, OpenGL 같은 기초 지식입니다. 제가 참 여해 최근 출시한 시프트업의 <데스티니 차일드>도 C++와 DirectX/OpenGL로 자체 개발한 엔 진을 사용했습니다. 넷마블의 <모두의 마블>과 <세븐 나이츠>도 마찬가지입니다. 여전히 C++와 그래픽스 API는 중요합니다. 이 책은 DirectX 9 시절, 개발자 사이에서 ‘용책’이라 불리던 바이블 도서의 최신 개정판입니다. 단순히 DirectX 12 API만이 아닌, 벡터와 행렬 같은 필수 게임 수학, 가장 핵심인 3D 그래픽스 파이프라인, 파이프라인을 통한 3D 월드 구현 등 게임 프로그래머에게 꼭 필요한 내용을 두루 다룹 니다. DirectX 12 책이라기보다는 게임 그래픽스 프로그래밍의 바이블이라 할 수 있습니다. 이 책이 다루는 내용이 유명 게임 회사의 기술 시험과 면접 문제의 핵심입니다. 그리고 드래그& 드롭으로 쉽게 월드를 조작할 수 있는 상용 엔진의 원리를 제대로 배우고 싶다면 이 책이 현존 최고 라고 감히 말씀드립니다. 그럼 제가 게임 프로그래머 지망생들에게 자주 하는 말로 마무리할까 합니다. “게임 프로그래머는 좋은 레이서에 머물러서는 안 된다. 차의 내부 구조와 작동 원리까지 아는 레 이서 겸 엔지니어가 되어야 한다.” 박민근, 경기 게임 아카데미 겸직 교수 (전) 시프트업 <데스티니 차일드> 엔진 프로그래머 추천사
  • 8. vi 본서 『DirectX 12를 이용한 3D 게임 프로그래밍 입문』은 프랭크 D. 루나의 DirectX 입문서 시 리즈 최신작인 Introduction to 3D Game Programming with DirectX 12(Mercury Learning, 2016)를 우리말로 옮긴 것입니다. 시리즈의 첫 권인 Introduction to 3D Game Programming with DirectX 9.0(Wordware, 2003)은 2004년에 『DirectX 9를 이용한 3D GAME 프로그래밍 입문』(최현호 옮김, 정보문화사)이라는 제목으로 번역서가 나왔는데, 앞표지에 용이 있어서 흔히 ‘용책’이라고 불렀고 게임 그래픽 프로그래밍에 입문하는 사람들에게 많은 사랑을 받았습니다. 이후 DirectX는 버전 10과 11을 거쳐 12에 이르렀고, 저자도 계속해서 책을 냈습니 다. 그중 DirectX 11에 관한 원서를 제가 번역했고(『DirectX 11을 이용한 3D 게임 프로그래밍 입문』, 한빛미디어, 2014), 이번에 또다시 DirectX 12 버전에 관한 번역서를 내게 되었습니다. 시리즈 첫 권이 나온 후 게임·그래픽 기술과 관련 프로그래밍 분야에 많은 변화가 있었는데, 이 글에서 한 가지 언급하고 싶은 것은 DirectX가 더 이상 게임 프로그래머의 필수 과목은 아니게 되 었다는 점입니다. 예전에는 게임 그래픽 프로그래머가 되려면 OpenGL과 DirectX 중 하나는 공 부하는 것이 당연하며, 미리 만들어진 게임 엔진을 사용한다고 해도 저수준 그래픽 라이브러리에 대 한 기본적인 소양은 갖추고 있어야 한다는 생각이 많았습니다. 그러나 이제는 게임 엔진들이 크게 발전해서 저수준 그래픽 라이브러리에 의존하지 않고도 게임을(그 수준이야 어떻든) 만들 수 있는 시대가 되었습니다. 이 이야기를 꺼낸 것은 DirectX 12를 배울 필요가 없다는 말을 하려는 것이 아 니라, 그런 시대임에도 DirectX 12를 공부하기로 한 독자들에게 찬사를 보내기 위한 것입니다. 잘 결심하셨습니다! 진부한 표현이지만, 뿌리 깊은 나무는 바람에 흔들리지 않아 꽃이 좋고 열매가 많 습니다. 이 책은 DirectX 12의 API 사용법은 물론이고 3차원 그래픽 프로그래밍을 이해하는 데 꼭 필요한 수학과 그 외 주요 개념들도 충실하게 설명하므로, 그런 결심을 실현하는 데 좋은 교과서 가 될 것입니다. 이전 권의 독자라면 앞의 찬사가 이전 권의 ‘옮긴이의 말’에도 나왔음을 기억할 것입니다. 앞에서 “시리즈”라고 표현하긴 했지만, 이 번역서 전체는, 사실 원서 자체도, 독자가 이전 권을 읽었다는 가 정을 전혀 두고 있지 않습니다. 이는 어쩌면 DirectX 자체의 성격과도 비슷합니다. DirectX를 개 옮긴이의 말
  • 9. vii 발한 Microsoft는 원래 하위 호환성을 중요시하기로 유명하지만, 이상하게도 DirectX는 소스 코 드의 하위 호환성을 전혀 고려하지 않고 버전을 업그레이드해왔습니다. 극명한 예로, 인터페이스 이름에 아예 버전 번호가 박혀 있습니다(ID3D10Device, ID3D11Device, ID3D12Device 등). 그래픽 기술이 눈부신 속도로 발전하다 보니 하위 호환성에 발목을 잡히지 않기 위해 그런 선택을 한 것이 아닐까 합니다. 어쨌든, DirectX 12를 공부하기 위해 먼저 DirectX 11을 공부할 필요는 없으므로, 이 책을 공부하기 위해 이전 권을 읽을 필요는 없습니다. 한편, 이전 권 독자라면 DirectX 12에 새로 추가되거나 바뀐 부분만 찾아 읽고 싶은 생각도 들 텐데요. 앞에서 말했듯이 저자가 그런 점을 염두에 두고 책을 쓰지는 않았습니다. 이전 권과 내용이 같은 부분들이 없지는 않지만(특히 기초 수학 관련) 그런 부분들도 기존 문장을 많이 고치고 다듬 었으므로, 번역한 사람의 욕심으로는 가능하면 순서대로 모두 읽어 주시길 권합니다. 그래도 꼭 필 요하다면 ‘명령 대기열’이나 ‘명령 목록’이라는 단어가 자주 나오는 곳과 ‘서술자 뷰’, ‘서술자 테이블’ 등 ‘서술자’라는 단어가 자주 나오는 곳에 집중하는 것이 한 방법일 것입니다. 더 나은 방법이 있다 면, 그리고 이 책에 대한 질문이나 의견, 또는 함께 논의하고 싶은 주제가 있다면 GpgStudy 사이 트(http://www.gpgstudy.com/)의 ‘GPG 카탈로그’를 통해서 함께 나누었으면 합니다. GPG 카 탈로그에는 정오표와 참고자료 링크 모음도 갖추어져 있습니다. 감사 인사로 이 글을 마무리하겠습니다. 전체적인 과정을 매끄럽게 진행해 주신 이복연 차장님을 비롯한, 이 책의 출판에 관여한 모든 분께 감사드립니다. 수학 공식이 많은 탓에 조판과 교정에 많은 어려움이 있었는데, 많은 분의 노력 덕분에 무사히 책이 나오게 되었습니다. 일일이 이름을 거론하 지 못해서 죄송합니다. 끝으로, 돋보기로 봐도 찾기 힘들었을 수많은 수식 조판 오류와 여러 오타, 오역을 잡아 준 아내 오현숙에게 감사와 사랑의 마음을 전합니다. 옮긴이 _ 류광
  • 10. viii Direct3D 12는 현세대 그래픽 하드웨어를 활용하는 고성능 3차원 그래픽 응용 프로그램을 다 양한 Windows 플랫폼(Windows 데스크톱, 모바일, Xbox One)에서 작성하기 위한 렌더 링 라이브러리이다. Direct3D는 하나의 저수준(low-level) 라이브러리인데, 여기서 ‘저수준’은 Direct3D의 API(application programming interface, 응용 프로그래밍 인터페이스)가 자 신이 제어하는 바탕 그래픽 하드웨어를 밀접하게 본뜬 것이라는 점에서 붙은 말이다. Direct3D는 주로 게임 업계에서 쓰인다. 게임 업계는 흔히 Direct3D를 기반으로 게임용 고수준 렌더링 엔진 을 구축한다. 그러나 고성능, 대화식(interactive, 상호작용적) 3차원 그래픽이 필요한 분야가 게 임 업계만은 아니다. 이를테면 의학, 과학 시각화와 건축물 내부 시연 등에도 그러한 그래픽이 필요 하다. 또한, 현세대의 그래픽 카드를 장착하고 출시되는 최근 PC들에서는 3차원 그래픽 응용 프로 그램이 아닌 프로그램들도 GPU(graphics processing unit, 그래픽 처리 장치)의 장점을 활용 해서 대량의 계산 작업을 그래픽 카드에 맡기기 시작했다. 그런 방식을 범용 GPU 계산(general purpose GPU computing, GPGPU computing)이라고 부르는데, Direct3D 12는 범용 GPU 계산 프로그램을 작성하기 위한 계산 셰이더 API를 제공한다. 일반적으로 Direct3D 응용 프로그램은 네이티브 C++로 작성하지만, SharpDX 팀(http://sharpdx.org/)이 만드는 .NET 래퍼wrapper 를 이용하면 이 강력한 3D 그래픽 API를 관리되는(managed) 응용 프로그램에서도 사용할 수 있다. 이 책은 Direct3D 12를 이용한 게임 개발에 강조를 둔, 상호작용적인 컴퓨터 그래픽 프로그래 밍의 입문서이다. 이 책은 먼저 Direct3D와 셰이더 프로그래밍의 기초를 가르치고, 그것을 바탕으 로 삼아서 좀 더 고급의 응용 기법들로 나아간다. 이 책은 크게 세 부(part)로 구성되어 있다. 제1 부는 이 책 전반에 쓰이는 수학적 수단들을 설명한다. 제2부는 Direct3D의 초기화, 3차원 기하구 조 정의, 카메라 설정, 정점·픽셀·기하·계산 셰이더 작성, 조명, 텍스처 적용, 혼합, 스텐실 적용, 테셀레이션 등 Direct3D의 기본 과제들을 구현하는 방법을 보여 준다. 제3부는 Direct3D를 이용 해서 여러 가지 흥미로운 기법과 특수 효과를 구현하는 방법을 주로 다루는데, 이를테면 메시 다루 기, 지형 렌더링, 장면 안 물체 선택, 입자 시스템, 환경 매핑, 변위 매핑, 실시간 그림자, 주변광 차 서문
  • 11. ix 폐 같은 기법과 효과가 나온다. 초보자라면 이 책을 처음부터 끝까지 차례로 읽는 것이 가장 바람직하다. 이 책의 장章 들은 난이 도가 점차 높아지도록 배치되어 있다. 중간에 독자가 맥락을 놓칠 정도로 난이도가 급상승하는 부분 은 없다. 대체로 각 장은 그 이전 장들에서 말한 기법과 개념을 사용한다. 따라서 독자가 현재 장의 내용을 충분히 숙지하고 다음 장으로 넘어가는 것이 중요하다. 경험 있는 독자라면 흥미가 가는 장 들만 골라서 읽어도 될 것이다. 마지막으로, 이 책을 다 읽고 나면 어떤 종류의 게임을 개발할 수 있게 될지 궁금한 독자도 있을 것이다. 그 질문에 대한 답을 얻는 가장 좋은 방법은 이 책을 빠르게 훑어보면서 어떤 종류의 예제 응용 프로그램들이 등장하는지 살펴보는 것이다. 그러면 이 책에서 배운 기법들과 독자 자신의 독창 성에 기초해서 개발할 수 있는 게임의 종류를 가늠해 볼 수 있을 것이다. 이 책의 대상 독자 이 책은 다음과 같은 세 부류의 독자들을 염두에 두고 기획되었다. 1. 최신 버전의 Direct3D를 이용한 3차원 프로그래밍에 입문하고자 하는 중급 C++ 프로그래머. 2. DirectX 이외의 API(이를테면 OpenGL)에 경험이 있으나 Direct3D 12는 처음인 3차원 그래픽 프로그래머. 3. Direct3D의 최신 버전을 배우고자 하는 경험 있는 Direct3D 프로그래머. 미리 필요한 지식 우선, 이 책이 Direct3D 12와 셰이더 프로그래밍, 그리고 3D 게임 프로그래밍의 입문서임을 명심 할 필요가 있다. 이 책이 일반적인 컴퓨터 프로그래밍의 입문서는 아니다. 독자는 반드시 다음과 같 은 요건을 갖추어야 한다. 1. 적어도 고등학교 수준의 수학 지식: 이를테면 기하학, 삼각함수, 함수(프로그래밍이 아니라 수학의) 등.
  • 12. x 2. Visual Studio 활용 능력: 이를테면 프로젝트를 생성하거나, 프로젝트에 파일을 추가하거나, 링크할 외부 라이브러리를 지정하는 데 어려움이 없어야 한다. 3. 중급 이상의 C++ 및 자료구조 지식: 이를테면 포인터, 배열, 연산자 중복적재, 연결 목록 (linked list), 상속, 다형성 등에 익숙해야 한다. 4. Win32 API를 이용한 Windows 프로그래밍에 익숙하면 좋지만 필수는 아니다. Win32 기 초가 부록 A에 나온다. 필수 개발 도구와 하드웨어 Direct3D 12 응용 프로그램을 개발하려면 다음과 같은 것들이 필요하다. 1. Windows 10 2. Visual Studio 2015 이상 3. Direct3D 12 지원 그래픽 카드. 이 책의 예제들은 GTX 760에서 시험되었다. DirectX SDK 문서화 및 SDK 예제 활용 Direct3D는 방대한 API라서 이 한 권의 책으로 그 세부사항을 모두 다루는 것은 꿈도 꾸지 못할 일이다. 따라서, 이 책에 없는 추가 정보를 획득하려면 DirectX SDK 문서화를 활용하는 방법을 반드시 알아 두어야 한다. DirectX의 최신 문서화는 MSDN에 있다. URL은 다음과 같다. https://msdn.microsoft.com/en-us/library/windows/desktop/dn899121% 28v=vs.85%29.aspx [그림 1]은 온라인 문서화의 한 모습이다. DirectX 문서화는 단지 DirectX API의 모든 부분을 설명할 뿐이다. 따라서 참고문헌으로는 아 주 좋다. 그러나 깊은 내용까지 들어가지는 않으며, 독자가 특정한 사전 지식을 갖추고 있으리라고 가정하기 때문에, 학습용으로까지 아주 좋은 것은 아니다. 단, DirectX의 새 버전이 나올 때마다
  • 13. xi 점차 나아지고 있긴 하다. 방금 말했듯이 MSDN의 온라인 문서화는 기본적으로 참고용으로 유용하다. 독자가 DirectX에 관련된 어떤 형식이나 함수, 이를테면 ID3D12Device::CreateCommittedResource라는 함수 를 알게 되었는데, 그 함수에 관한 좀 더 자세한 정보를 얻고 싶다고 하자. 온라인 문서화의 검색 기 능을 이용하면 특정 형식 또는 함수의 설명이 있는 페이지를 찾을 수 있다. [그림 2]는 예로 든 함수 를 설명하는 문서화 페이지의 모습이다. 참고: 실제로 본문에는 추가적인 세부사항에 관해 DirectX 문서화를 참조하라는 경우가 종종 나온다. 그림 1 MSDN DirectX 문서화 중 Direct3D 12 Programming Guide.
  • 14. xii 그림 2 특정 함수의 문서화 페이지. 또한, 다음 주소에서 제공하는 Direct3D 12 예제 프로그램들도 주목하기 바란다. https://github.com/Microsoft/DirectX-Graphics-Samples 향후 이곳에 예제들이 더 올라올 것이다. 또한, NVIDIA나 AMD, Intel 웹사이트에서도 Direct3D 12 예제들을 보게 될 것이다. 명확함 코드를 효율적으로 작성하고 Direct3D 12 프로그래밍의 모범 관행들을 따르고자 하긴 했지만, 기 본적으로 필자가 이 책의 프로그램 예제들을 작성할 때 목표로 삼은 것은 Direct3D의 개념이나 그
  • 15. xiii 래픽 프로그래밍 기법을 잘 보여주는 것이었다. 아주 최적화된 코드를 목표로 두고 예제들을 작성하 지는 않았으며, 그런 목표를 두고 코드를 짰다면 예제가 보여주고자 하는 개념이나 기법이 덜 명확 해졌을 것이다. 만일 예제 코드를 독자 자신의 프로젝트에 사용한다면 효율성을 높이는 쪽으로 코드 를 개선할 필요가 있음을 기억하기 바란다. 더 나아가서, Direct3D API에 초점을 두기 위해 필자 는 Direct3D를 바탕으로 한 최소한의 기반구조를 구축해서 모든 예제의 공통 프레임워크로 사용 했다. 그런데 ‘최소한’의 기반구조이다 보니, 보통은 자료 주도적(data-driven)인 방식으로 적용 해야 마땅한 수치들이나 설정 값들이 코드 자체에 박혀 있는 경우가 많다. 현업에서 대형 3차원 응 용 프로그램을 만들 때에는 Direct3D를 바탕으로 한 ‘렌더링 엔진’을 구현해야 하는 것이 일반적이 다. 그러나 이 책의 주제는 Direct3D API이지 렌더링 엔진의 설계가 아니다. 예제 프로그램과 웹 부록 이 책의 웹사이트(www.d3dcoder.net과 www.merclearning.com)는 독자가 이 책을 최대한 활 용하는 데 꼭 필요한 요소이다. 웹사이트는 이 책의 모든 예제의 전체 소스 코드와 프로젝트 파일들 (통칭해서 ‘웹 부록’)을 제공한다.* 한 DirectX 프로그램의 코드 전체를 책에 싣기에는 코드가 너 무 긴 경우가 많기 때문에, 이 책은 설명하는 내용과 관련이 깊은 코드 조각만 제시한다. 그렇지만, 학습을 위해서는 예제의 전체 코드도 살펴보길 강력히 권한다. (필자는 독자가 공부하기 쉽도록 예 제를 작고 집중된 형태로 만들고자 노력했다.) 일반적인 원칙으로, 한 장을 다 읽은 후 예제 코드를 어느 정도 시간을 들여 공부했다면, 독자가 스스로 그 예제를 구현할 수 있어야 한다. 사실 책과 예 제 코드를 참고삼아서 예제를 스스로 구현해 보는 일은 독자에게 좋은 훈련이 된다. *  옮긴이  현재, 소스 코드 다운로드 링크를 따라가면 GitHub의 한 저장소(https://github.com/d3dcoder/d3d12book)에 도달한 다. GitHub에(그리고 버전 관리 시스템 Git에) 익숙하지 않은 독자라면 초록색 ‘Clone or download’ 버튼을 클릭한 후 ‘Download ZIP’을 선택하면 된다. 일부 덩치 큰 자원 파일들은 ‘웹 부록(http://www.hanbit.co.kr/src/2779)’에만 있다는 점도 기억하기 바란다.
  • 16. xiv Visual Studio 2015에서 예제 프로젝트 설정 이 책의 예제들은 그냥 해당 프로젝트 파일(.vcxproj)이나 솔루션 파일(.sln)을 더블클릭하기만 하면 열린다. 여기서는 Visual Studio 2015(VS15)에서 책의 예제 응용 프로그램 프레임워크를 이용하는 프로젝트를 새로 만들어서 구축(빌드)하는 방법을 설명한다. 시연의 목적으로, 제6장의 상자 예제(‘Box’) 프로젝트를 다시 만들어서 빌드해 보겠다. 예제 소스 코드 내려받기 우선 책의 예제 소스 코드 전체를 내려받아서 독자의 하드 드라이브의 한 폴더에 복사한다. 이하의 논의에서는 그 폴더가 C:d3d12book이라고 가정하겠다. 이 소스 코드 폴더 안에는 장마다 폴더가 따로 있고, 각 폴더에는 해당 장의 예제 프로젝트들이 들어 있다. 또한, Common이라는 폴더도 주 목하기 바란다. 이 폴더에는 모든 예제 프로젝트에 쓰이는 공통의 소스 코드가 있다. 이제 소스 코드 폴더 안에 독자 자신의 예제 프로젝트들을 담을 새 폴더를 만들기 바란다. 이하의 논의에서는 새 폴 더가 C:d3d12bookMyDemos라고 가정하겠다. 이 폴더는 이후 독자가 이 책의 예제 프레임워크 에 기초해서 만드는 새 프로젝트들(지금 연습하는 것을 포함)을 담는 데 쓰인다. 참고: 이러한 디렉터리 구조가 필수는 아니지만, 이 책의 모든 예제는 이러한 구조를 따른다. 추가적인 포함 (include) 경로를 설정하는 데 익숙한 독자라면 원하는 다른 장소에 독자의 예제 프로젝트들을 집어넣어 도 된다. 물론, Common 디렉터리의 소스 코드를 Visual Studio가 찾을 수 있도록 설정해 주어야 한다.
  • 17. xv Win32 프로젝트 만들기 우선 Visual Studio 2015를 띄우고 주 메뉴에서 파일 새로 만들기 프로젝트를 선택한다(그 림 3). 그러면 새 프로젝트 대화상자가 나타난다(그림 4). 왼쪽의 프로젝트 형식 트리 컨트롤에서 Visual C++ Win32를 선택하고, 오른쪽 창에서 Win32 프로젝트를 선택한다. 다음으로, 하단 입력 상자들에 적당한 프로젝트 이름(지금 예제에서는 MyD3D12Project)과 프로젝트 폴더를 저 장할 위치(지금 예제에서는 C:d3d12bookMyDemos)를 지정한다. 또한, 만일 솔루션용 디렉터 리 만들기 체크 상자가 체크되어 있으면 해제한다. 이제 확인 버튼을 클릭한다. 그러면 새로운 대화상자가 나타난다. 왼쪽에는 두 가지 선택이 있는데, 응용 프로그램 설정을 선 택하면 대화상자가 [그림 5]와 같은 모습이 된다. 혹시 Windows 응용 프로그램이 선택되어 있지 않으면 그것을 선택한다. ‘추가 옵션’에서는 빈 프로젝트 상자를 체크한다.* 이제 마침 버튼을 클릭 하면, 특별한 문제가 없는 한 새로운 빈 Win32 프로젝트가 생성된다. 그러나 DirectX 예제 프로 젝트를 구축하려면 아직 해야 할 일이 몇 가지 남아 있다. 그림 3 새 프로젝트 만들기. * 옮긴이 Visual Studio 에디션이나 구성에 따라서는 SDL(Security Development Lifecycle) 관련 옵션이 나타날 수도 있으나, 책의 예제들과는 무관하므로 체크를 해제하면 된다.
  • 18. xvi 그림 4 새 프로젝트 설정. 그림 5 응용 프로그램 설정.
  • 19. xvii DirectX 라이브러리 링크 설정 이 책의 예제들은 필수 라이브러리 파일들의 링크를 소스 코드 안에서 직접 설정한다. 좀 더 구체적 으로 말하면, Common/d3dApp.h에 다음과 같이 #pragma 지시문들이 있다. // 필요한 d3d12 라이브러리들을 링크한다. #pragma comment(lib, d3dcompiler.lib) #pragma comment(lib, D3D12.lib) #pragma comment(lib, dxgi.lib) 이렇게 하면 프로젝트 속성 페이지를 열고 ‘링커’ 설정으로 가서 의존성(종속성)들을 추가 하는 수고를 덜 수 있다. 예제나 시연용 응용 프로그램을 만들 때에는 이 정도 설정으로 충분 하다. 소스 코드 추가 및 프로젝트 빌드 이렇게 해서 프로젝트의 기본적인 설정이 끝났다. 이제 소스 코드 파일들을 프로젝트에 추가하 고 프로젝트를 빌드해 보자. 우선 “Box” 예제 프로젝트(d3d12bookChapter 6 Drawing in Direct3DBox)에서 BoxApp.cpp와 Shaders 폴더를 지금 프로젝트 폴더에 복사한다. 이제 다음과 같은 과정을 통해서 소스 코드 파일들을 프로젝트에 추가하고 프로젝트를 빌 드한다. 1. 솔루션 탐색기에서 프로젝트 이름을 오른쪽 클릭한 후 문맥 메뉴에서 추가 기존 항목…을 선 택하고, BoxApp.cpp를 프로젝트에 추가한다. 2. 솔루션 탐색기에서 프로젝트 이름을 오른쪽 클릭한 후 문맥 메뉴에서 추가 기존 항목…을 선 택하고, 이 책 예제 폴더의 Common 폴더에 있는 모든 .h/.cpp 파일을 프로젝트에 추가한다. 그러면 솔루션 탐색기가 [그림 6]과 같은 모습이 될 것이다.
  • 20. xviii 그림 7 “Box” 예제의 실행 모습. 3. 솔루션 탐색기에서 프로젝트 이름을 오른쪽 클릭한 후 속성을 선택한다. 구성 속성 일반 탭 으로 가서, 대상 플랫폼 버전 속성에 10으로 시작하는 버전 번호가 선택되어 있는지 확인한다. Windows 10용 프로그램을 만들려면 반드시 10.x를 선택해야 한다. 이제 확인을 클릭해서 대화상자를 닫는다.* * 옮긴이 대상 플랫폼 버전 속성에 10으로 시작하는 버전 번호가 없다면(예를 들어 8.1만 있다면) Windows 플랫폼 SDK를 갱신해야 한다. 여러 가지 방법이 있겠지만, 아마도 웹에서 “Windows 10용 Windows SDK”를 검색해서 MSDN 사이트의 해당 다운로드 페이 지로 가는 것이 가장 간단한 방법일 것이다. 추가로, 지금 예제처럼 프로젝트를 새로 만드는 것이 아니라 웹 부록의 프로젝트를 그대로 열 어서 빌드하는 경우 대상 플랫폼 버전의 불일치 때문에 빌드가 실패할 수 있다. 그런 경우 대상 플랫폼 버전 속성을 독자의 시스템에 깔린 버전의 번호(물론 10으로 시작하는)로 변경하면 문제가 해결된다. 그림 6 “Box” 예제와 Commons 폴더의 파일 들을 복사한 후의 솔루션 탐색기의 모습.
  • 21. xix 4. 소스 코드들이 프로젝트에 추가되었고 대상 플랫폼도 설정했으므로, 이제 프로젝트를 빌드할 준비가 끝났다. 주 메뉴에서 디버그 디버깅 시작을 선택하면 프로젝트가 컴파일, 링크, 실행 된다. 모든 것이 제대로 되었다면 [그림 7]과 같은 모습의 응용 프로그램이 나타날 것이다. 참고: Common 디렉터리의 코드 중 상당 부분은 이 책의 진행을 따라 점차 구축된 결과물이다. 따라서 지금 당장 그 코드를 모두 이해하려 들지는 말고, 대신 해당 코드를 다루는 장을 공부할 때 함께 살펴보길 권한다.
  • 22. xx CONTENTS 지은이·옮긴이 소개 ............................................................................................................ iv 추천사 ............................................................................................................................... v 옮긴이의 말 ....................................................................................................................... vi 서문 ............................................................................................................................... viii PART I 기초 필수 수학 CHAPTER 1 벡터 대수 3 1.1 벡터 ........................................................................................................................... 3 1.1.1 벡터와 좌표계 .................................................................................................... 5 1.1.2 왼손잡이 좌표계 대 오른손잡이 좌표계 ................................................................... 7 1.1.3 기본적인 벡터 연산들 .......................................................................................... 7 1.2 길이와 단위벡터 ........................................................................................................... 9 1.3 내적 ......................................................................................................................... 11 1.3.1 직교화 ............................................................................................................ 13 1.4 외적 ......................................................................................................................... 15 1.4.1 2차원 유사 외적 ............................................................................................... 17 1.4.2 외적을 이용한 직교화 ........................................................................................ 17 1.5 점 ............................................................................................................................ 18 1.6 DirectXMath 라이브러리의 벡터 .................................................................................. 20 1.6.1 벡터 형식들 ..................................................................................................... 21 1.6.2 적재 및 저장 함수 ............................................................................................. 23 1.6.3 매개변수 전달 .................................................................................................. 24 1.6.4 상수 벡터 ........................................................................................................ 26 1.6.5 중복적재된 연산자들 ......................................................................................... 27
  • 23. xxi 1.6.6 기타 상수 및 함수 ............................................................................................. 27 1.6.7 설정 함수 ........................................................................................................ 28 1.6.8 벡터 함수들 ..................................................................................................... 30 1.6.9 부동소수점 오차 ............................................................................................... 34 1.7 요약 ......................................................................................................................... 36 1.8 연습문제 ................................................................................................................... 38 CHAPTER 2 행렬 대수 43 2.1 정의 ......................................................................................................................... 43 2.2 행렬 곱셈 .................................................................................................................. 46 2.2.1 정의 ............................................................................................................... 46 2.2.2 벡터와 행렬의 곱셈 ........................................................................................... 47 2.2.3 결합법칙 ......................................................................................................... 48 2.3 전치행렬 ................................................................................................................... 48 2.4 단위행렬 ................................................................................................................... 49 2.5 행렬식 ...................................................................................................................... 50 2.5.1 소행렬 ............................................................................................................ 51 2.5.2 행렬식의 정의 .................................................................................................. 51 2.6 딸림행렬 ................................................................................................................... 53 2.7 역행렬 ...................................................................................................................... 54 2.8 DirectXMath의 행렬 .................................................................................................. 56 2.8.1 행렬 형식들 ..................................................................................................... 56 2.8.2 행렬 함수 ........................................................................................................ 59 2.8.3 DirectXMath 행렬 예제 프로그램 ....................................................................... 60 2.9 요약 ......................................................................................................................... 62 2.10 연습문제 ................................................................................................................. 64
  • 24. xxii CONTENTS CHAPTER 3 변환 67 3.1 선형변환 ................................................................................................................... 68 3.1.1 정의 ............................................................................................................... 68 3.1.2 행렬 표현 ........................................................................................................ 69 3.1.3 비례 ............................................................................................................... 70 3.1.4 회전 ............................................................................................................... 72 3.2 아핀변환 ................................................................................................................... 75 3.2.1 동차좌표 ......................................................................................................... 75 3.2.2 아핀변환의 정의와 행렬 표현 .............................................................................. 76 3.2.3 이동 ............................................................................................................... 76 3.2.4 비례와 회전을 위한 아핀변환 행렬들 .................................................................... 79 3.2.5 아핀변환 행렬의 기하학적 해석 ........................................................................... 79 3.3 변환들의 합성 ............................................................................................................ 81 3.4 좌표 변경 변환 ........................................................................................................... 82 3.4.1 벡터 ............................................................................................................... 84 3.4.2 점 ................................................................................................................... 85 3.4.3 행렬 표현 ........................................................................................................ 86 3.4.4 결합법칙과 좌표 변경 행렬 ................................................................................. 86 3.4.5 역행렬과 좌표 변경 행렬 .................................................................................... 87 3.5 변환 행렬 대 좌표 변경 행렬 ......................................................................................... 89 3.6 DirectXMath 라이브러리의 변환 관련 함수들 ................................................................. 90 3.7 요약 ......................................................................................................................... 91 3.8 연습문제 ................................................................................................................... 92
  • 25. xxiii PART II Direct3D의 기초 CHAPTER 4 Direct3D의 초기화 103 4.1 기본 지식 ................................................................................................................ 104 4.1.1 Direct3D 12의 개요 ....................................................................................... 104 4.1.2 COM .......................................................................................................... 105 4.1.3 텍스처 형식 ................................................................................................... 106 4.1.4 교환 사슬과 페이지 전환 .................................................................................. 108 4.1.5 깊이 버퍼링 ................................................................................................... 109 4.1.6 자원과 서술자 ................................................................................................ 112 4.1.7 다중표본화의 이론 .......................................................................................... 115 4.1.8 Direct3D의 다중표본화 ................................................................................... 116 4.1.9 기능 수준 ...................................................................................................... 118 4.1.10 DXGI(DirectX Graphics Infrastructure) ........................................................ 119 4.1.11 기능 지원 점검 ............................................................................................. 124 4.1.12 상주성 ........................................................................................................ 126 4.2 CPU와 GPU의 상호작용 ........................................................................................... 127 4.2.1 명령 대기열과 명령 목록 .................................................................................. 127 4.2.2 CPU/GPU 동기화 ......................................................................................... 132 4.2.3 자원 상태 전이 ............................................................................................... 135 4.2.4 명령 목록을 이용한 다중 스레드 활용 ................................................................. 137 4.3 Direct3D의 초기화 ................................................................................................... 137 4.3.1 장치 생성 ...................................................................................................... 138 4.3.2 울타리 생성과 서술자 크기 얻기 ........................................................................ 140 4.3.3 4X MSAA 품질 수준 지원 점검 ........................................................................ 141 4.3.4 명령 대기열과 명령 목록 생성 ........................................................................... 141
  • 26. xxiv CONTENTS 4.3.5 교환 사슬의 서술과 생성 .................................................................................. 142 4.3.6 서술자 힙 생성 ............................................................................................... 145 4.3.7 렌더 대상 뷰(RTV) 생성 ................................................................................... 146 4.3.8 깊이·스텐실 버퍼와 뷰 생성 ............................................................................. 148 4.3.9 뷰포트 설정 ................................................................................................... 153 4.3.10 가위 직사각형 설정 ....................................................................................... 155 4.4 시간 측정과 애니메이션 ............................................................................................. 156 4.4.1 성능 타이머 ................................................................................................... 157 4.4.2 GameTimer 클래스 ....................................................................................... 158 4.4.3 프레임 간 경과 시간 ........................................................................................ 159 4.4.4 전체 시간 ...................................................................................................... 162 4.5 예제 응용 프로그램 프레임워크 ................................................................................... 166 4.5.1 D3DApp 클래스 ............................................................................................ 166 4.5.2 프레임워크 메서드가 아닌 메서드들 ................................................................... 170 4.5.3 프레임워크 메서드들 ....................................................................................... 171 4.5.4 프레임 통계치 ................................................................................................ 173 4.5.5 메시지 처리부 ................................................................................................ 175 4.5.6 Direct3D 초기화 예제(‘Init Direct3D’) ............................................................... 178 4.6 Direct3D 응용 프로그램의 디버깅 ............................................................................... 183 4.7 요약 ....................................................................................................................... 185 CHAPTER 5 렌더링 파이프라인 189 5.1 3차원의 환상 ........................................................................................................... 190 5.2 모형의 표현 ............................................................................................................. 193 5.3 컴퓨터 색상의 기본 개념 ............................................................................................ 194 5.3.1 색상 연산 ...................................................................................................... 195
  • 27. xxv 5.3.2 128비트 색상 ................................................................................................ 196 5.3.3 32비트 색상 .................................................................................................. 197 5.4 렌더링 파이프라인의 개요 .......................................................................................... 199 5.5 입력 조립기 단계 ...................................................................................................... 201 5.5.1 정점 ............................................................................................................. 201 5.5.2 기본도형 위상구조 .......................................................................................... 202 5.5.3 색인 ............................................................................................................. 206 5.6 정점 셰이더 단계 ...................................................................................................... 209 5.6.1 국소 공간과 세계 공간 ..................................................................................... 209 5.6.2 시야 공간 ...................................................................................................... 214 5.6.3 투영과 동차 절단 공간 ..................................................................................... 217 5.7 테셀레이션 단계들 .................................................................................................... 226 5.8 기하 셰이더 단계 ...................................................................................................... 227 5.9 절단 ....................................................................................................................... 228 5.10 래스터화 단계 ........................................................................................................ 230 5.10.1 뷰포트 변환 ................................................................................................. 230 5.10.2 후면 선별 .................................................................................................... 230 5.10.3 정점 특성의 보간 .......................................................................................... 232 5.11 픽셀 셰이더 단계 .................................................................................................... 234 5.12 출력 병합기 단계 .................................................................................................... 234 5.13 요약 ..................................................................................................................... 235 5.14 연습문제 ............................................................................................................... 236 CHAPTER 6 Direct3D의 그리기 연산 241 6.1 정점과 입력 배치 ...................................................................................................... 241 6.2 정점 버퍼 ................................................................................................................ 246
  • 28. xxvi 6.3 색인과 색인 버퍼 ...................................................................................................... 253 6.4 예제 정점 셰이더 ...................................................................................................... 257 6.4.1 입력 배치 서술과 입력 서명 연결 ....................................................................... 261 6.5 예제 픽셀 셰이더 ...................................................................................................... 264 6.6 상수 버퍼 ................................................................................................................ 268 6.6.1 상수 버퍼의 생성 ............................................................................................ 268 6.6.2 상수 버퍼의 갱신 ............................................................................................ 270 6.6.3 업로드 버퍼 보조 클래스 .................................................................................. 271 6.6.4 상수 버퍼 서술자 ............................................................................................ 275 6.6.5 루트 서명과 서술자 테이블 ............................................................................... 276 6.7 셰이더의 컴파일 ....................................................................................................... 281 6.7.1 오프라인 컴파일 ............................................................................................. 283 6.7.2 어셈블리 코드 생성 ......................................................................................... 285 6.7.3 Visual Studio를 이용한 오프라인 셰이더 컴파일 ................................................. 288 6.8 래스터화기 상태 ....................................................................................................... 289 6.9 파이프라인 상태 객체 ................................................................................................ 290 6.10 기하구조 보조 구조체 .............................................................................................. 295 6.11 상자 예제 .............................................................................................................. 297 6.12 요약 ..................................................................................................................... 309 6.13 연습문제 ............................................................................................................... 311 CHAPTER 7 Direct3D의 그리기 연산 제2부 317 7.1 프레임 자원 ............................................................................................................. 318 7.2 렌더 항목 ................................................................................................................ 322 7.3 패스별 상수 버퍼 ...................................................................................................... 323 CONTENTS
  • 29. xxvii 7.4 도형 기하구조 .......................................................................................................... 327 7.4.1 원기둥 메시의 생성 ......................................................................................... 329 7.4.2 구 메시의 생성 ............................................................................................... 334 7.4.3 측지구 메시의 생성 ......................................................................................... 334 7.5 도형 예제 ................................................................................................................ 338 7.5.1 정점 버퍼와 색인 버퍼 ..................................................................................... 338 7.5.2 렌더 항목 ...................................................................................................... 342 7.5.3 프레임 자원들과 상수 버퍼 뷰들 ........................................................................ 345 7.5.4 장면 그리기 ................................................................................................... 348 7.6 루트 서명 추가 설명 .................................................................................................. 351 7.6.1 루트 매개변수 ................................................................................................ 351 7.6.2 서술자 테이블 ................................................................................................ 354 7.6.3 루트 서술자 ................................................................................................... 357 7.6.4 루트 상수 ...................................................................................................... 357 7.6.5 좀 더 복잡한 루트 서명 예제 ............................................................................. 359 7.6.6 루트 인수의 버전 적용 ..................................................................................... 361 7.7 지형과 파도 예제 ...................................................................................................... 362 7.7.1 격자 정점 생성 ............................................................................................... 363 7.7.2 격자 색인 생성 ............................................................................................... 365 7.7.3 높이 함수 적용 ............................................................................................... 366 7.7.4 루트 CBV ..................................................................................................... 369 7.7.5 동적 정점 버퍼 ............................................................................................... 371 7.8 요약 ....................................................................................................................... 374 7.9 연습문제 ................................................................................................................. 375
  • 30. xxviii CHAPTER 8 조명 377 8.1 빛과 재질의 상호작용 ................................................................................................ 378 8.2 법선 벡터 ................................................................................................................ 380 8.2.1 법선 벡터의 계산 ............................................................................................ 382 8.2.2 법선 벡터의 변환 ............................................................................................ 384 8.3 조명의 주요 벡터 ...................................................................................................... 386 8.4 람베르트 코사인 법칙 ................................................................................................ 387 8.5 분산 조명 ................................................................................................................ 388 8.6 주변 조명 ................................................................................................................ 390 8.7 반영 조명 ................................................................................................................ 391 8.7.1 프레넬 효과 ................................................................................................... 392 8.7.2 표면 거칠기 ................................................................................................... 394 8.8 조명 모형 정리 ......................................................................................................... 397 8.9 재질의 구현 ............................................................................................................. 399 8.10 평행광 .................................................................................................................. 404 8.11 점광 ..................................................................................................................... 405 8.11.1 빛의 감쇠 .................................................................................................... 406 8.12 점적광 .................................................................................................................. 407 8.13 조명 구현 .............................................................................................................. 408 8.13.1 빛 구조체 .................................................................................................... 408 8.13.2 공통 보조 함수들 .......................................................................................... 410 8.13.3 지향광의 구현 .............................................................................................. 412 8.13.4 점광의 구현 ................................................................................................. 413 8.13.5 점적광의 구현 .............................................................................................. 413 8.13.6 여러 빛의 누적 ............................................................................................. 414 8.13.7 주 HLSL 파일 .............................................................................................. 416 CONTENTS
  • 31. xxix 8.14 파도 조명 예제 ....................................................................................................... 419 8.14.1 정점 형식 .................................................................................................... 420 8.14.2 법선 계산 .................................................................................................... 421 8.14.3 빛 방향의 갱신 ............................................................................................. 423 8.14.4 루트 서명 갱신 ............................................................................................. 424 8.15 요약 ..................................................................................................................... 425 8.16 연습문제 ............................................................................................................... 426 CHAPTER 9 텍스처 적용 429 9.1 텍스처와 자원의 개괄 ................................................................................................ 430 9.2 텍스처 좌표 ............................................................................................................. 433 9.3 텍스처 자료 원본 ...................................................................................................... 436 9.3.1 DDS의 개요 .................................................................................................. 436 9.3.2 DDS 파일 만들기 ........................................................................................... 438 9.4 텍스처 생성 및 활성화 ............................................................................................... 439 9.4.1 DDS 파일 불러오기 ........................................................................................ 439 9.4.2 SRV 힙 ......................................................................................................... 440 9.4.3 SRV 서술자 생성 ........................................................................................... 440 9.4.4 텍스처를 파이프라인에 묶기 ............................................................................. 443 9.5 필터 ....................................................................................................................... 446 9.5.1 확대 ............................................................................................................. 446 9.5.2 축소 ............................................................................................................. 448 9.5.3 비등방 필터링 ................................................................................................ 449 9.6 텍스처 좌표 지정 모드 ............................................................................................... 450 9.7 표본추출기 객체 ....................................................................................................... 453 9.7.1 표본추출기 생성 ............................................................................................. 454
  • 32. xxx 9.7.2 정적 표본추출기 ............................................................................................. 457 9.8 셰이더에서 텍스처 표본 추출 ...................................................................................... 460 9.9 나무 상자 예제 ......................................................................................................... 461 9.9.1 텍스처 좌표의 지정 ......................................................................................... 461 9.9.2 텍스처 생성 ................................................................................................... 462 9.9.3 텍스처 설정 ................................................................................................... 463 9.9.4 갱신된 HLSL ................................................................................................. 464 9.10 텍스처 변환 ........................................................................................................... 467 9.11 텍스처 입힌 언덕과 파도 예제 ................................................................................... 468 9.11.1 격자 텍스처 좌표 생성 ................................................................................... 469 9.11.2 텍스처 타일링 .............................................................................................. 471 9.11.3 텍스처 애니메이션 ........................................................................................ 471 9.12 요약 ..................................................................................................................... 472 9.13 연습문제 ............................................................................................................... 473 CHAPTER 10 혼합 477 10.1 혼합 공식 .............................................................................................................. 478 10.2 혼합 연산 .............................................................................................................. 479 10.3 혼합 계수 .............................................................................................................. 481 10.4 혼합 상태 .............................................................................................................. 482 10.5 예제 ..................................................................................................................... 486 10.5.1 색상 기록 금지 ............................................................................................. 486 10.5.2 가산 혼합과 감산 혼합 ................................................................................... 487 10.5.3 승산 혼합 .................................................................................................... 487 10.5.4 투명도 ........................................................................................................ 488 10.5.5 혼합과 깊이 버퍼 .......................................................................................... 489 CONTENTS
  • 33. xxxi 10.6 알파 채널 .............................................................................................................. 490 10.7 픽셀 잘라내기 ........................................................................................................ 491 10.8 안개 ..................................................................................................................... 494 10.9 요약 ..................................................................................................................... 501 10.10 연습문제 ............................................................................................................. 502 CHAPTER 11 스텐실 적용 503 11.1 깊이·스텐실 버퍼의 자료 형식과 버퍼 지우기 .............................................................. 504 11.2 스텐실 판정 ........................................................................................................... 506 11.3 깊이·스텐실 상태의 서술 ......................................................................................... 507 11.3.1 깊이 설정들 ................................................................................................. 508 11.3.2 스텐실 설정들 .............................................................................................. 508 11.3.3 깊이·스텐실 상태의 생성 및 묶기 ................................................................... 511 11.4 평면거울 구현 ........................................................................................................ 511 11.4.1 거울 예제의 개요 .......................................................................................... 512 11.4.2 거울 예제의 깊이·스텐실 상태 정의 ................................................................ 515 11.4.3 장면 그리기 ................................................................................................. 516 11.4.4 정점 감김 순서와 반사 ................................................................................... 518 11.5 평면 그림자의 구현 ................................................................................................. 519 11.5.1 평행광 그림자 .............................................................................................. 520 11.5.2 점광 그림자 ................................................................................................. 522 11.5.3 범용 그림자 행렬 .......................................................................................... 523 11.5.4 스텐실 버퍼를 이용한 이중 혼합 방지 ............................................................... 524 11.5.5 평면 그림자 구현 코드 ................................................................................... 525 11.6 요약 ..................................................................................................................... 527 11.7 연습문제 ............................................................................................................... 527
  • 34. xxxii CHAPTER 12 기하 셰이더 535 12.1 기하 셰이더 프로그래밍 ........................................................................................... 536 12.2 나무 빌보드 예제 .................................................................................................... 543 12.2.1 개요 ........................................................................................................... 543 12.2.2 정점 구조체 ................................................................................................. 545 12.2.3 HLSL 파일 .................................................................................................. 546 12.2.4 SV_PrimitiveID ........................................................................................... 551 12.3 텍스처 배열 ........................................................................................................... 553 12.3.1 개요 ........................................................................................................... 553 12.3.2 텍스처 배열의 표본 추출 ................................................................................ 553 12.3.3 텍스처 배열의 적재 ....................................................................................... 555 12.3.4 텍스처 부분자원 ........................................................................................... 556 12.4 알파-포괄도 변환 ................................................................................................... 557 12.5 요약 ..................................................................................................................... 558 12.6 연습문제 ............................................................................................................... 560 CHAPTER 13 계산 셰이더 565 13.1 스레드와 스레드 그룹 .............................................................................................. 568 13.2 간단한 계산 셰이더 예제 .......................................................................................... 570 13.2.1 계산 셰이더 설정 .......................................................................................... 571 13.3 자료 입력 자원과 출력 자원 ...................................................................................... 572 13.3.1 텍스처 입력 ................................................................................................. 572 13.3.2 텍스처 출력과 순서 없는 접근 뷰(UAV) ............................................................ 572 13.3.3 텍스처 색인화 및 표본 추출 ............................................................................ 576 13.3.4 구조적 버퍼 자원 .......................................................................................... 579 CONTENTS
  • 35. xxxiii 13.3.5 계산 셰이더의 결과를 시스템 메모리에 복사 ..................................................... 582 13.4 스레드 식별 시스템 값 ............................................................................................. 586 13.5 추가 버퍼와 소비 버퍼 ............................................................................................. 588 13.6 공유 메모리와 동기화 .............................................................................................. 589 13.7 흐리기 예제 ........................................................................................................... 591 13.7.1 흐리기의 이론 .............................................................................................. 592 13.7.2 텍스처 대상 렌더링 기법 ................................................................................ 595 13.7.3 흐리기 구현의 개요 ....................................................................................... 598 13.7.4 계산 셰이더 프로그램 .................................................................................... 605 13.8 더 읽을거리 ........................................................................................................... 611 13.9 요약 ..................................................................................................................... 612 13.10 연습문제 ............................................................................................................. 614 CHAPTER 14 테셀레이션 단계들 621 14.1 테셀레이션 기본도형 위상구조 .................................................................................. 623 14.1.1 테셀레이션과 정점 셰이더 .............................................................................. 624 14.2 덮개 셰이더 ........................................................................................................... 624 14.2.1 상수 덮개 셰이더 .......................................................................................... 624 14.2.2 제어점 덮개 셰이더 ....................................................................................... 627 14.3 테셀레이터 단계 ..................................................................................................... 630 14.3.1 사각형 패치의 테셀레이션 예 .......................................................................... 630 14.3.2 삼각형 패치의 테셀레이션 예 .......................................................................... 631 14.4 영역 셰이더 ........................................................................................................... 631 14.5 사각형 하나의 테셀레이션 ........................................................................................ 633 14.6 삼차 베지에 사각형 패치 .......................................................................................... 638 14.6.1 베지에 곡선 ................................................................................................. 638
  • 36. xxxiv 14.6.2 삼차 베지에 곡면 .......................................................................................... 641 14.6.3 삼차 베지에 곡면 평가 코드 ............................................................................ 642 14.6.4 패치 기하구조의 정의 .................................................................................... 645 14.7 요약 ..................................................................................................................... 647 14.8 연습문제 ............................................................................................................... 649 PART III 응용 CHAPTER 15 1인칭 카메라 구축과 동적 색인화 655 15.1 시야 변환 개괄 ....................................................................................................... 656 15.2 카메라를 대표하는 Camera 클래스 ........................................................................... 657 15.3 주요 메서드 구현 .................................................................................................... 660 15.3.1 XMVECTOR를 돌려주는 메서드들 ................................................................. 660 15.3.2 SetLens 메서드 ........................................................................................... 660 15.3.3 절두체 속성 유도 .......................................................................................... 661 15.3.4 카메라 변환 ................................................................................................. 662 15.3.5 시야 행렬 구축 ............................................................................................. 663 15.4 카메라 예제 해설 .................................................................................................... 665 15.5 동적 색인화 ........................................................................................................... 667 15.6 요약 ..................................................................................................................... 675 15.7 연습문제 ............................................................................................................... 675 CONTENTS
  • 37. xxxv CHAPTER 16 인스턴싱과 절두체 선별 677 16.1 하드웨어 인스턴싱 .................................................................................................. 677 16.1.1 인스턴싱 방식으로 기하구조 그리기 ................................................................. 678 16.1.2 인스턴스별 자료 ........................................................................................... 679 16.1.3 인스턴스 버퍼 생성 ....................................................................................... 685 16.2 경계입체와 절두체 .................................................................................................. 688 16.2.1 DirectXMath의 충돌 라이브러리 .................................................................... 688 16.2.2 경계상자 ..................................................................................................... 688 16.2.3 경계구 ........................................................................................................ 693 16.2.4 절두체 ........................................................................................................ 694 16.3 절두체 선별 ........................................................................................................... 701 16.4 요약 ..................................................................................................................... 705 16.5 연습문제 ............................................................................................................... 706 CHAPTER 17 3차원 물체의 선택 709 17.1 화면에서 투영 창으로의 변환 .................................................................................... 711 17.2 세계 공간과 국소 공간의 선택 반직선 ......................................................................... 715 17.3 반직선 대 메시 교차 판정 ......................................................................................... 716 17.3.1 반직선 대 AABB 교차 판정 ............................................................................ 718 17.3.2 반직선 대 구 교차 판정 .................................................................................. 719 17.3.3 반직선 대 삼각형 교차 판정 ............................................................................ 720 17.4 예제 응용 프로그램 ................................................................................................. 723 17.5 요약 ..................................................................................................................... 724 17.6 연습문제 ............................................................................................................... 725
  • 38. xxxvi CHAPTER 18 입방체 매핑 727 18.1 입방체 매핑 ........................................................................................................... 727 18.2 환경 매핑 .............................................................................................................. 729 18.2.1 입방체 맵의 적재와 적용 ................................................................................ 732 18.3 하늘에 텍스처 입히기 .............................................................................................. 733 18.4 물체의 주변 환경 반사 ............................................................................................. 738 18.5 동적 입방체 맵 ....................................................................................................... 742 18.5.1 동적 입방체 맵 보조 클래스 ............................................................................ 743 18.5.2 입방체 맵 자원 생성 ...................................................................................... 744 18.5.3 추가 서술자 힙 공간 ...................................................................................... 745 18.5.4 서술자 구축 ................................................................................................. 747 18.5.5 깊이 버퍼 구축 ............................................................................................. 748 18.5.6 입방체 맵 뷰포트와 가위 직사각형 ................................................................... 749 18.5.7 입방체 맵 카메라 설정 ................................................................................... 750 18.5.8 장면을 입방체 맵에 그리기 ............................................................................. 752 18.6 기하 셰이더를 이용한 동적 입방체 매핑 ...................................................................... 756 18.7 요약 ..................................................................................................................... 759 18.8 연습문제 ............................................................................................................... 760 CHAPTER 19 법선 매핑 763 19.1 동기 ..................................................................................................................... 764 19.2 법선 맵 ................................................................................................................. 765 19.3 텍스처 공간 또는 접공간 .......................................................................................... 767 19.4 정점 접공간 ........................................................................................................... 769 19.5 접공간과 물체 공간 사이의 변환 ................................................................................ 770 CONTENTS
  • 39. xxxvii 19.6 법선 매핑 셰이더 코드 ............................................................................................. 772 19.7 요약 ..................................................................................................................... 777 19.8 연습문제 ............................................................................................................... 777 CHAPTER 20 그림자 매핑 781 20.1 장면 깊이의 렌더링 ................................................................................................. 781 20.2 직교투영 ............................................................................................................... 785 20.3 투영 텍스처 좌표 .................................................................................................... 787 20.3.1 코드 구현 .................................................................................................... 789 20.3.2 절두체 바깥의 점들 ....................................................................................... 790 20.3.3 직교투영 ..................................................................................................... 791 20.4 그림자 매핑 ........................................................................................................... 792 20.4.1 알고리즘 설명 .............................................................................................. 792 20.4.2 편향과 앨리어싱 ........................................................................................... 794 20.4.3 비율 근접 필터링(PCF) .................................................................................. 798 20.4.4 그림자 맵 구축 ............................................................................................. 802 20.4.5 그림자 계수 ................................................................................................. 808 20.4.6 그림자 맵 판정 ............................................................................................. 810 20.4.7 그림자 맵의 시각화 ....................................................................................... 811 20.5 큰 PCF 핵 ............................................................................................................ 812 20.5.1 ddx 함수와 ddy 함수 .................................................................................... 812 20.5.2 큰 PCF 핵 문제의 해법 ................................................................................. 813 20.5.3 큰 PCF 핵 문제의 또 다른 해법 ...................................................................... 816 20.6 요약 ..................................................................................................................... 818 20.7 연습문제 ............................................................................................................... 819
  • 40. xxxviii CHAPTER 21 주변광 차폐 821 21.1 반직선 투사를 통한 주변광 차폐 ................................................................................ 822 21.2 화면 공간 주변광 차폐(SSAO) .................................................................................. 827 21.2.1 법선과 깊이 렌더링 패스 ................................................................................ 827 21.2.2 주변광 차폐 패스 .......................................................................................... 829 21.2.3 흐리기 패스 ................................................................................................. 840 21.2.4 주변광 차폐 맵의 적용 ................................................................................... 844 21.3 요약 ..................................................................................................................... 846 21.4 연습문제 ............................................................................................................... 847 CHAPTER 22 사원수 849 22.1 복소수 개괄 ........................................................................................................... 850 22.1.1 정의 ........................................................................................................... 850 22.1.2 기하학적 해석 .............................................................................................. 851 22.1.3 극좌표 표현과 회전 ....................................................................................... 852 22.2 사원수 대수학 ........................................................................................................ 853 22.2.1 정의와 기본 연산 .......................................................................................... 853 22.2.2 특별한 곱들 ................................................................................................. 855 22.2.3 사원수 연산의 성질 ....................................................................................... 855 22.2.4 변환 ........................................................................................................... 856 22.2.5 켤레와 크기 ................................................................................................. 856 22.2.6 역 ............................................................................................................... 858 22.2.7 극형식 ........................................................................................................ 858 22.3 단위 사원수와 회전 ................................................................................................. 860 22.3.1 회전 연산자 ................................................................................................. 860 CONTENTS
  • 41. xxxix 22.3.2 사원수 회전 연산자를 행렬로 변환 ................................................................... 862 22.3.3 행렬을 사원수 회전 연산자로 변환 ................................................................... 864 22.3.4 합성 ........................................................................................................... 866 22.4 사원수 보간 ........................................................................................................... 866 22.5 DirectXMath 라이브러리의 사원수 함수들 ................................................................. 872 22.6 사원수 회전 예제 .................................................................................................... 873 22.7 요약 ..................................................................................................................... 879 22.8 연습문제 ............................................................................................................... 880 CHAPTER 23 캐릭터 애니메이션 883 23.1 뼈대 좌표계들의 계통구조 ........................................................................................ 884 23.1.1 수학적 정의 ................................................................................................. 885 23.2 메시 스키닝 ........................................................................................................... 888 23.2.1 정의 ........................................................................................................... 888 23.2.2 뿌리 변환의 재정의 ....................................................................................... 889 23.2.3 오프셋 변환 ................................................................................................. 890 23.2.4 골격의 애니메이션 ........................................................................................ 890 23.2.5 최종 변환 계산 ............................................................................................. 893 23.3 정점 혼합 .............................................................................................................. 895 23.4 파일에서 애니메이션 자료 적재 ................................................................................. 899 23.4.1 헤더 ........................................................................................................... 899 23.4.2 재질 목록 .................................................................................................... 900 23.4.3 부분집합 정의 .............................................................................................. 901 23.4.4 정점 및 삼각형 자료 ...................................................................................... 902 23.4.5 뼈대 오프셋 변환 목록 ................................................................................... 902 23.4.6 골격 계통구조 .............................................................................................. 903
  • 42. xl 23.4.7 애니메이션 자료 ........................................................................................... 903 23.4.8 M3DLoader 클래스 ..................................................................................... 906 23.5 캐릭터 애니메이션 예제 ........................................................................................... 908 23.6 요약 ..................................................................................................................... 911 23.7 연습문제 ............................................................................................................... 913 APPENDIX A Windows 프로그래밍 입문 915 A.1 개요 ....................................................................................................................... 916 A.1.1 자원 ............................................................................................................. 916 A.1.2 사건, 메시지 대기열, 메시지, 메시지 루프 ........................................................... 917 A.1.3 그래픽 사용자 인터페이스(GUI) ........................................................................ 919 A.1.4 유니코드 ....................................................................................................... 920 A.2 기본적인 Windows 응용 프로그램 ............................................................................. 920 A.3 기본 Windows 응용 프로그램 설명 ............................................................................ 925 A.3.1 헤더 포함, 전역 변수, 함수 선언 ........................................................................ 925 A.3.2 WinMain 함수 ............................................................................................... 926 A.3.3 WNDCLASS 구조체와 창 클래스 등록 ............................................................. 926 A.3.4 창의 생성과 표시 ............................................................................................ 929 A.3.5 메시지 루프 ................................................................................................... 932 A.3.6 창 프로시저 ................................................................................................... 933 A.3.7 MessageBox 함수 ........................................................................................ 935 A.4 더 나은 메시지 루프 .................................................................................................. 936 A.5 요약 ....................................................................................................................... 937 A.6 연습문제 ................................................................................................................. 938 CONTENTS
  • 43. xli APPENDIX B HLSL 레퍼런스 939 B.1 변수 형식 ................................................................................................................ 939 B.1.1 스칼라 형식 ................................................................................................... 939 B.1.2 벡터 형식 ...................................................................................................... 939 B.1.3 행렬 형식 ...................................................................................................... 941 B.1.4 배열 ............................................................................................................. 943 B.1.5 구조체 .......................................................................................................... 943 B.1.6 typedef 키워드 ............................................................................................. 944 B.1.7 변수 선언 한정사 ............................................................................................ 944 B.1.8 캐스팅 .......................................................................................................... 945 B.2 키워드와 연산자 ....................................................................................................... 946 B.2.1 키워드 .......................................................................................................... 946 B.2.2 연산자 .......................................................................................................... 946 B.3 프로그램의 흐름 ....................................................................................................... 948 B.4 함수 ....................................................................................................................... 949 B.4.1 사용자 정의 함수 ............................................................................................ 949 B.4.2 내장 함수 ...................................................................................................... 951 B.4.3 상수 버퍼의 압축 및 채움 ................................................................................ 954 APPENDIX C 해석기하학 주제 몇 가지 959 C.1 반직선, 선, 선분 ....................................................................................................... 959 C.2 평행사변형 ............................................................................................................. 960 C.3 삼각형 ................................................................................................................... 961 C.4 평면 ...................................................................................................................... 962 C.4.1 DirectXMath 라이브러리의 평면 표현 .............................................................. 963
  • 44. xlii C.4.2 점과 평면의 공간 관계 .................................................................................... 964 C.4.3 평면의 구축 ................................................................................................... 965 C.4.4 평면의 정규화 ................................................................................................ 966 C.4.5 평면의 변환 ................................................................................................... 966 C.4.6 주어진 점과 가장 가까운 평면의 점 ................................................................... 967 C.4.7 반직선과 평면의 교차 ..................................................................................... 967 C.4.8 벡터의 반사 ................................................................................................... 968 C.4.9 점의 반사 ...................................................................................................... 968 C.4.10 반사행렬 ..................................................................................................... 968 C.5 연습문제 ................................................................................................................ 970 APPENDIX D 연습문제 해답 모음 973 APPENDIX E 참고문헌 및 더 읽을 거리 975 찾아보기 ........................................................................................................................ 981 CONTENTS
  • 45. 11.6 DirectXMath 라이브러리의 벡터 기초 필수 수학 Part I “이 세상의 이치는 수학 지식 없이 알아낼 수 없다.” 로저 베이컨Roger Bacon , Opus Majus part 4 Distinctia Prima cap 1, 1267. 비디오 게임들은 가상의 세계를 시뮬레이션하려고 한다. 그러나 본질적으로 컴퓨터는 수치를 처리하는 기 계이다. 따라서 어떻게 세상을 컴퓨터 안으로 옮겨올 것인가라는 문제가 제기된다. 그 답은, 세상과 세상에 있는 사물들 사이의 상호작용을 전부 수학적으로 서술한다는 것이다. 따라서 수학은 비디오 게임 개발에서 근본적인 역할을 차지한다. 기초 필수 과정에 해당하는 제1부에서는 이 책 전반에서 사용할 수학적 도구들을 소개한다. 주된 초점 은 이 책의 거의 모든 예제 프로그램에 쓰이는 도구들인 벡터와 좌표계, 행렬, 변환이다. 수학적 설명 외에, DirectXMath 라이브러리의 관련 클래스들과 함수들도 예제와 함께 간략히 소개한다. 제1부는 단지 이 책의 나머지를 이해하는 데 필수적인 주제들만 다룰 뿐, 비디오 게임을 위한 수학을 완 전하고 상세하게 서술하는 것은 아님을 주의하기 바란다. 그러려면 책 한 권이 통째로 필요할 것이다. 비디 오 게임 수학에 대한 좀 더 완전한 참고서를 원하는 독자에게는 부록 E의 [Verth04]와 [Lengyel02]를 추 천한다.
  • 46. • 제1장 벡터 대수: 컴퓨터 게임에서 쓰이는 가장 중요한 수학적 대상은 벡터일 것이다. 예를 들어 벡터는 위치, 변위, 방향, 속도, 힘을 나타내는 데 쓰인다. 제1장에서는 벡터와 벡터를 다루는 연산들을 공부한다. • 제2장 행렬 대수: 행렬은 변환을 효율적이고도 간결하게 나타내는 수단을 제공한다. 제2장 에서는 행렬과 행렬에 대해 정의되는 연산들을 익힌다. • 제3장 변환: 제3장은 근본적인 세 가지 기하 변환인 비례변환, 회전변환, 이동변환을 살펴 본다. 이 변환들은 3차원 공간에서 3차원 물체들을 조작하는 데 쓰인다. 또한, 제3장은 기 하구조를 나타내는 좌표를 한 좌표계에서 다른 좌표계로 바꾸는 데 쓰이는 좌표 변경 변환 도 설명한다. Part I 기초 필수 수학
  • 47. 3 벡터는 현대적인 비디오 게임들의 공통 요소라 할 수 있는 컴퓨터 그래픽과 충돌 검출, 물리 시 뮬레이션에서 핵심적인 역할을 한다. 벡터에 대한 이번 장의 접근방식은 비공식적이고 실용적 이다. 3차원 게임·그래픽용 수학만을 전문적으로 다루는 책을 원하는 독자에게는 [Verth04] 를 권하겠다. 이 책의 거의 모든 예제 프로그램에서 쓰인다는 점에서 벡터는 아주 중요한 대상 이다. 목표 1. 벡터의 기하학적 표현 방법과 수치적 표현 방법을 배운다. 2. 벡터에 대해 정의되는 연산들과 그 연산들의 기하학적 응용 방법을 배운다. 3. DirectXMath 라이브러리의 벡터 관련 함수들과 클래스들에 익숙해진다. 1.1 벡터 벡터(vector, 방향량)는 크기와 방향을 모두 가진 수량(quantity)을 가리키는 말이다. 크 기(magnitude)와 방향(direction)을 모두 가진 수량을 좀 더 공식적으로 벡터값 수량 (vector-valued quantity)이라고 부른다. 벡터값 수량의 예로는 힘(force; 힘은 특정한 방 향과 세기로 가해지는데, 세기(strength)가 곧 크기이다), 변위變位 (displacement; 한 입자의 벡터 대수 CHAPTER 1