장바구니 담기 close

장바구니에 상품을 담았습니다.

Game Programming in C++

Game Programming in C++

  • 산자이마드하브
  • |
  • 에이콘출판
  • |
  • 2019-09-30 출간
  • |
  • 652페이지
  • |
  • 188 X 235 X 30 mm
  • |
  • ISBN 9791161753560
판매가

45,000원

즉시할인가

40,500

카드할인

0원(즉시할인 0%)

적립금

2,250원 적립(5%적립)

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

추가혜택

네이버페이 무조건 1%적립+ 추가 1%적립

수량
+ -
총주문금액
40,500

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

출판사서평




★ 이 책에서 다루는 내용 ★

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

★ 이 책의 대상 독자 ★

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

★ 이 책의 구성 ★

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

각 장에서는 다음 내용을 다룬다.
1장, ‘게임 프로그래밍 개관’에서는 게임 프로그래밍의 기본 개념을 살펴보고 게임을 초기화하고 실행하는 방법을 확인한다. 또한 SDL(Simple DirectMedia Layer) 라이브러리를 소개한다.
2장, ‘게임 객체와 2D 그래픽스’에서는 프로그래머가 게임에서 객체를 구성하는 방법을 설명하고 플립북 애니메이션과 같은 추가 2D 그래픽 콘셉트를 살펴본다.
3장, ‘벡터와 기초 물리’에서는 모든 게임 프로그래머에게 중요한 도구인 수학 벡터를 설명한다. 또한 움직임 및 충돌에 사용하는 물리의 기초를 살펴본다.
4장, ‘인공지능’에서는 상태 기계와 길 찾기 같은 개념을 포함해 컴퓨터가 제어하는 게임 캐릭터를 만드는 방법을 살펴본다.
5장, ‘OpenGL’에서는 버텍스 셰이더와 프래그먼트 셰이더 구현을 포함해 OpenGL 렌더러를 생성하는 방법을 설명한다.
6장, ‘3D 그래픽스’에서는 뷰, 투영, 그리고 회전을 표현하는 방법을 포함해 지금까지 작성한 코드를 3D 게임에서 동작하는 데에 중점을 둔다.
7장, ‘오디오’에서는 FMOD API를 사용해서 오디오 시스템을 구축하는 방법을 설명한다. 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 라이브러리는 다양한 플랫폼으로 이식할 수 있기에 알아두면 언젠가는 반드시 도움이 된다.
한 권의 책으로 게임에 사용된 모든 프로그래밍 기법을 담기에는 무리겠지만, 적어도 이 책은 게임 개발에 도전하려는 학생이나 일반인에게 좋은 지침서가 될 것이며, 현업 종사자에게는 자신의 실력을 점검해 볼 수 있는 가이드를 제공할 것이라고 확신한다.


목차


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 루프
__추가 독서

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.