Game Programming in C++ (OpenGL과 SDL을 활용한 3D 게임 개발)

Game Programming in C++ (OpenGL과 SDL을 활용한 3D 게임 개발)

$47.67
Description
C++는 게임 개발을 선도하는 주요 스튜디오에서 핵심 언어로 사용한다. C++는 여러 코드 기반에서 사용되기 때문에 이들 스튜디오는 게임을 유지보수하거나 개선할 때 C++를 사용한다.
이 책은 C++로 3D 비디오 게임을 프로그래밍하는 데 현실적이고 실용적인 접근을 제공한다. USC 산자이 마드하브의 게임 프로그래밍 과정을 바탕으로 한 이 책은 쉽고 재밌으며, 직접 실습할 수 있어서 실용적이고 완벽하다.
저자

산자이마드하브

(SanjayMadhav)
서던캘리포니아대학교(USC)의선임강사로,2008년부터프로그래밍과비디오게임프로그래밍을가르친다.
USC이전에일렉트로닉아츠(ElectronicArts),네버소프트(Neversoft),판데믹스튜디오(PandemicStudios)에서비디오게임개발자를위한프로그래머로서일했다.게임<메달오브아너(MedalofHonor:PacificAssault)>,<토니호크프로젝트8(TonyHawk’sProject8)>,<반지의제왕(LordofRings:Conquest)>,<사보추어(Saboteur)>개발에참여했다.
또한『게임프로그래밍알고리즘』(에이콘,2015)의저자이며『멀티플레이어게임프로그래밍』(길벗,2017)의공동저자다.컴퓨터과학학사학위와석사학위를받았으며USC에서박사과정을밟고있다.

목차

1장게임프로그래밍개관
__개발환경설정하기
____마이크로소프트윈도우
____애플맥OS
__이책의소스코드얻기
__C++표준라이브러리를넘어
__게임루프와게임클래스
____프레임의구조
____게임클래스골격구현하기
____메인함수
____기본입력처리
__기초2D그래픽스
____색상버퍼
____더블버퍼링
____기초2D그래픽스구현하기
____벽,공,패들그리기
__게임갱신하기
____실시간그리고게임시간
____델타시간함수로직
____패들의위치갱신하기
____공의위치갱신하기
__게임프로젝트
__요약
__추가독서
__연습

2장게임객체와2D그래픽스
__게임객체
____게임객체의타입
____게임객체모델
____게임객체를게임루프에통합하기
__스프라이트
____이미지파일로딩
____스프라이트그리기
____스프라이트애니메이션
__배경스크롤하기
__게임프로젝트
__요약
__추가독서
__연습

3장벡터와기초물리
__벡터
____두점사이에서벡터얻어내기:뺄셈
____벡터스케일링하기:스칼라곱
____두벡터의결합:덧셈
____거리결정하기:길이
____방향결정하기:단위벡터와정규화
____각도로부터전방벡터변환
____전방벡터를각도로변환:아크탄젠트
____두벡터사이의각도구하기:내적
____법선벡터계산하기:외적
__기본이동
____기본MoveComponent클래스제작
____InputComponent클래스제작
__뉴턴물리
____선형역학개요
____오일러적분을사용한위치계산
____가변시간단계문제
__기본충돌감지
____원과원의교차
____CircleComponent서브클래스제작
__게임프로젝트
__요약
__추가독서
__연습

4장인공지능
__상태기계행위
____상태기계설계하기
____기본상태기계구현
____클래스로서의상태
__길찾기
____그래프
____너비우선탐색
____휴리스틱
____탐욕최우선탐색
____A*탐색
____데이크스트라알고리즘
____길따라가기
____기타그래프표현
__게임트리
____미니맥스
____불완전게임트리다루기
____알파베타가지치기
__게임프로젝트
__요약
__추가독서
__연습

5장OpenGL
__OpenGL초기화
____OpenGL윈도우설정
____OpenGL콘텍스트와GLEW초기화
____프레임렌더링
__삼각형기초
____왜폴리곤인가?
____정규화된장치좌표
____버텍스버퍼와인덱스버퍼
__셰이더
____버텍스셰이더
____프래그먼트셰이더
____기본셰이더작성하기
____셰이더로딩
____삼각형그리기
__변환기초
____오브젝트공간
____세계공간
____세계공간으로변환
__행렬과변환
____행렬곱셈
____행렬을사용한점의이동
____세계공간으로변환,재검토
____세계변환을액터에추가
____세계공간에서클립공간으로변환하기
____변환행렬을사용하는셰이더로갱신
__텍스처매핑
____텍스처로딩
____버텍스포맷갱신
____셰이더갱신
____알파블렌딩
__게임프로젝트
__요약
__추가독서
__연습

6장3D그래픽스
__3D에서액터변환
____3D를위한변환행렬
____오일러각
____쿼터니언
____새로운액터변환
__3D모델로딩
____모델포맷선택
____버텍스속성갱신
____gpmesh파일로딩
__3D메시그리기
____클립공간으로의변환,재검토
____화가알고리즘을버리고Z-버퍼링을사용하자
____BasicMesh셰이더
____MeshComponent클래스
__조명
____버텍스속성재검토
____광원의유형
____퐁반사모델
____조명구현
__게임프로젝트
__요약
__추가독서
__연습

7장오디오
__오디오구축하기
____FMOD
____FMOD설치
____오디오시스템생성
____뱅크와이벤트
____SoundEvent클래스
__3D위치기반오디오
____기본리스너설정
____SoundEvent에위치기반기능추가
____액터와사운드이벤트를연관시키는AudioComponent작성
____3인칭게임상의리스너
____도플러효과
__믹싱및이펙트
____버스
____스냅샷
____차폐
__게임프로젝트
__요약
__추가독서
__연습

8장입력시스템
__입력장치
____폴링
____상승에지와하강에지
____이벤트
____기본입력시스템아키텍처
__키보드입력
__마우스입력
____버튼과위치
____상대모션
____스크롤휠
__컨트롤러입력
____컨트롤러한개활성화하기
____버튼
____아날로그스틱과트리거
____2차원에서아날로그스틱필터링하기
____복수개의컨트롤러지원
__입력매핑
__게임프로젝트
__요약
__추가독서
__연습

9장카메라
__1인칭카메라
____기본1인칭이동
____피치없는카메라
____피치추가(높낮이)
____1인칭모델
__팔로우카메라
____기본팔로우카메라
____스프링추가
__궤도카메라
__스플라인카메라
__언프로젝션
__게임프로젝트
__요약
__추가독서
__연습

10장충돌감지
__기하타입
____선분
____평면
____바운딩볼륨
__교차테스트
____점을포함하는지판정하는테스트
____바운딩볼륨테스트
____선분테스트
____동적오브젝트
__게임코드에충돌추가하기
____BoxComponent클래스
____PhysWorld클래스
____SegmentCast를활용한공의충돌
____PhysWorld에서박스충돌테스트
____벽과플레이어와의충돌
__게임프로젝트
__요약
__추가독서
__연습

11장유저인터페이스
__폰트렌더링
__UI스크린
____UI스크린스택
____정지메뉴
____버튼
____다이얼로그박스
__HUD요소
____조준망추가
____레이더추가
__현지화
____유니코드로작업하기
____텍스트맵추가하기
____기타현지화이슈
__다양한해상도지원
__게임프로젝트
__요약
__추가독서
__연습

12장뼈대애니메이션
__뼈대애니메이션의기초
____뼈대와포즈
____인버스바인드포즈행렬
____애니메이션데이터
____스키닝
__뼈대애니메이션구현
____스키닝버텍스속성으로그리기
____뼈대로딩
____애니메이션데이터로딩
____스키닝버텍스셰이더
____애니메이션갱신
__게임프로젝트
__요약
__추가독서
__연습

13장중급그래픽스
__텍스처품질개선하기
____텍스처샘플링재검토
____밉매핑
____이방성필터링
__텍스처로렌더링
____텍스처생성하기
____프레임버퍼개체생성
____프레임버퍼개체로렌더링
____HUD에거울텍스처그리기
__지연셰이딩
____G버퍼클래스생성
____G버퍼에쓰기
____전역조명
____점광추가
____개선및이슈
__게임프로젝트
__요약
__추가독서
__연습

14장레벨파일과바이너리데이터
__레벨파일로딩
____전역속성로딩
____액터로딩
____컴포넌트로딩
__레벨파일저장하기
____전역속성저장
____액터와컴포넌트저장
__바이너리데이터
____바이너리메시파일저장하기
____바이너리메시파일로딩
__게임프로젝트
__요약
__추가독서
__연습

부록A중급C++리뷰
__참조,포인터,그리고배열
____참조
____포인터
____배열
____동적메모리할당
__유형별클래스주제들
____참조,상수그리고클래스
____클래스의동적할당
____소멸자
____복사생성자
____연산자오버로딩
__컬렉션
____빅오표기법
____벡터
____연결리스트
____큐
____스택
____맵
____해시맵
____반복자,auto,범위기반for루프
__추가독서

출판사 서평

★이책에서다루는내용★

■C++개발도구를빠르게구축하고개발시작하기
■기초2D그래픽스와게임갱신,벡터,게임물리구현
■널리사용되는AI알고리즘으로더욱지능적인게임을제작하기
■OpenGL,셰이더,행렬,변환등의내용을포함한3D그래픽스구현
■3D위치기반오디오를포함한오디오통합및믹싱
■3D환경에서오브젝트간충돌감지
■플레이어의입력에효율적으로반응하기
■헤드업디스플레이(HUD)를포함한유저인터페이스구축
■이방성필터링과지연셰이딩을통한그래픽품질향상
■게임레벨과바이너리게임데이터불러오기및저장

★이책의대상독자★

C++에익숙한프로그래머나3D비디오게임을프로그래밍하는방법을배우려는프로그래머를대상으로하는책이다.C++에익숙하지않은독자를위해부록A,‘중급C++리뷰’에서몇가지C++개념을살펴본다.그러나C++경험이거의없거나전혀없는경우라면이책을읽기에앞서C++를배워야한다.그리고독자가동적배열(벡터),트리,그래프를포함한일반데이터구조에친숙하며,고등학교수준의대수학을어느정도알고있다고가정한다.
이책에서다루는내용은게임프로그래밍의지식을넓히고자하는학계의독자와취미로게임프로그래밍에관심을두는사람,초급및중급게임프로그래머에게도움이된다.이책의내용은대학에서한학기에배우는내용보다좀더많은분량에해당한다.

★이책의구성★

처음에는핵심개념을배우기위해게임제작을2D로진행한다.6장이후부터는(8장제외)게임제작을3D로진행한다.

각장에서는다음내용을다룬다.
1장,‘게임프로그래밍개관’에서는게임프로그래밍의기본개념을살펴보고게임을초기화하고실행하는방법을확인한다.또한SDL(SimpleDirectMediaLayer)라이브러리를소개한다.
2장,‘게임객체와2D그래픽스’에서는프로그래머가게임에서객체를구성하는방법을설명하고플립북애니메이션과같은추가2D그래픽콘셉트를살펴본다.
3장,‘벡터와기초물리’에서는모든게임프로그래머에게중요한도구인수학벡터를설명한다.또한움직임및충돌에사용하는물리의기초를살펴본다.
4장,‘인공지능’에서는상태기계와길찾기같은개념을포함해컴퓨터가제어하는게임캐릭터를만드는방법을살펴본다.
5장,‘OpenGL’에서는버텍스셰이더와프래그먼트셰이더구현을포함해OpenGL렌더러를생성하는방법을설명한다.
6장,‘3D그래픽스’에서는뷰,투영,그리고회전을표현하는방법을포함해지금까지작성한코드를3D게임에서동작하는데에중점을둔다.
7장,‘오디오’에서는FMODAPI를사용해서오디오시스템을구축하는방법을설명한다.3D위치기반오디오에관한내용도다룬다.
8장,‘입력시스템’에서는키보드나마우스그리고게임컨트롤러이벤트를처리하기위해좀더견고한입력시스템을설계하는방법을설명한다.
9장,‘카메라’에서는1인칭카메라,팔로우카메라,궤도카메라를포함해여러3D카메라를구현하는방법을보여준다.
10장,‘충돌감지’에서는구체,평면,선분,박스를포함해게임에서충돌을감지하는방법을자세히알아본다.
11장,‘유저인터페이스’에서는메뉴시스템과레이더와조준격자같은헤드업디스플레이(HUD)요소의구현을살펴본다.
12장,‘뼈대애니메이션’에서는3D캐릭터를움직이는방법을다룬다.
13장,‘중급그래픽스’에서는지연셰이딩을구현하는방법을포함해몇가지중급그래픽스주제를살펴본다.
14장,‘레벨파일과바이너리데이터’에서는레벨파일을로드하고저장하는방법을설명한다.또한바이너리파일포맷을작성하는방법을다룬다.
부록A,‘중급C++리뷰’에서는메모리할당과컬렉션을포함하여책전반에서사용한몇가지중급C++주제를살펴본다.
각장은게임프로젝트와추천추가독서목록,그리고몇가지예제를담고있다.연습에서는각장에서구현한코드에추가기능을구현할수있도록제시한다.

★옮긴이의말★

게임업계에종사한사람으로서이런훌륭한책을번역하게된뜻깊은일이다.내용을간단하게설명하는다른책과달리,이책은게임에서쓰이는수학,AI,사운드,애니메이션등전반적인기술을자세하게설명한다.또한C++로제작된예제소스코드를제공해내용을쉽게전달하는데주력했다.
C++의장점은저수준레벨에서프로그램을제어할수있다는점이다.즉,C++로프로그램을잘작성한다는것은컴퓨터아키텍처를잘이해하고있다는것과일맥상통한다고볼수있다.그래서컴퓨터성능이좋지않았던2000년대초반에는게임개발언어로C++가인기를끌었다.하지만C++는생산성측면에서후속언어에밀리면서그점유율이굉장히낮아졌다.또한유니티같은강력한게임제작툴이등장하면서C++의입지는매우줄어들었다.하지만C++언어는지속해서발전하고있으며,언리얼엔진은여전히C++언어를지원한다.중견급이상의기업에서는항상C++스킬을요구하기때문에프로그래머라면C++는기본으로다룰수있어야한다.
앞에서언급한툴이나특정언어가영원히시장을장악한다고볼수는없으며,언젠가는더나은게임개발모델이나올것이다.그런경우를대비하기위해서라도특정툴에종속되는내용이아니라,기반기술을이해하는것은큰도움이된다.예를들어,클래스간계층구조를다루는개념은C++,자바,C#등의객체지향언어에바로적용해서사용할수있으며,새로운언어가등장하더라도다시활용할수있는이론이다.
그리고이책은샘플코드를위해다양한크로스플랫폼라이브러리를활용했다.이책에서사용한SDL,OPENGL,FMOD라이브러리는다양한플랫폼으로이식할수있기에알아두면언젠가는반드시도움이된다.
한권의책으로게임에사용된모든프로그래밍기법을담기에는무리겠지만,적어도이책은게임개발에도전하려는학생이나일반인에게좋은지침서가될것이며,현업종사자에게는자신의실력을점검해볼수있는가이드를제공할것이라고확신한다.