Game Programming in C++

산자이 마드하브 (지은이), 박주항 (옮긴이) | 에이콘출판 | 2019년 9월 정가 45,000원 판매가 40,500원 배송비 0원 (0원 이상 무료) 페이지 652쪽 판형 188*235mm 1239g ISBN 9791161753560 상태 새책 or 중고 수량 합계 40,500

책소개

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

저자소개

산자이 마드하브 (Sanjay Madhav) (지은이)  
신간알리미 신청
박주항 (옮긴이)  
신간알리미 신청
산자이 마드하브(지은이)의 말
오늘날 비디오 게임은 가장 인기 있는 엔터테인먼트 중 하나다. 게임 전문 조사 기관인 뉴주(Newzoo)의 「세계 게임 시장 보고서(Global Games Market Report)」에서는 2017년 게임 매출액이 1,000억 달러를 상회한다고 평가했다. 이 엄청난 금액은 비디오 게임이 얼마나 인기 있는지를 보여준다. 그만큼 비디오 게임 시장은 거대하고, 게임 프로그래머의 수는 항상 부족하다.
게임의 폭발적인 인기와 더불어 게임 기술의 장벽은 낮아졌다. 이제 한 명의 개발자가 여러 유명한 게임 엔진이나 툴을 사용해서 상을 받거나 히트 게임을 제작할 수 있게 됐다. 특히 게임 디자이너에게 이러한 툴은 많은 도움이 된다. 그렇다면 여기서 C++로 게임을 프로그래밍하는 방법을 배운다는 것은 어떤 가치가 있을까?
여러 게임이나 툴을 한 걸음 뒤에서 보면 핵심 코어가 C++로 작성된 것을 확인할 수 있다. 즉, C++는 툴이나 게임 엔진을 사용해서 제작된 게임의 모든 배후에 있는 근본적인 기술이다.
또한 <오버워치>, <콜 오브 듀티>, <언차티드> 등 오늘날 가장 인기 있는 게임들을 출시한 일류 개발자는 아직도 C++를 사용한다. 왜냐하면 C++는 성능과 편리함이라는 훌륭한 조합을 제공하기 때문이다. 그래서 앞에서 예시로 든 게임들을 개발한 회사 중 한 곳에서 일하고 싶은 개발자라면 특히 C++를 깊이 있게 이해해야 한다.
이 책에서는 실제 게임 개발자가 사용하는 여러 기술과 시스템을 파고든다. 이 책의 많은 내용은 거의 10년 동안 서던캘리포니아대학교(USC, University of Southern California)에서 가르친 비디오 게임 프로그래밍 강의에서 비롯됐다. 이 책에서 사용한 접근법은 많은 학생이 비디오 게임 산업에서 성공할 수 있도록 도움을 줄 것이다.
또한 이 책은 게임 프로젝트 데모에 통합된 코드의 실제 동작 구현에 특히 집중한다. 게임처럼 다양한 시스템이 어떻게 작동하는지 이해하는 것은 중요하다. 이런 이유로 이 책을 읽는 동안에는 소스 코드를 언제든지 참조할 수 있도록 가까이 둬야 한다.
역자후기
게임업계에 종사한 사람으로서 이런 훌륭한 책을 번역하게 된 뜻깊은 일이다. 내용을 간단하게 설명하는 다른 책과 달리, 이 책은 게임에서 쓰이는 수학, 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 루프
__추가 독서

더보기

배송

- 배송비, 무료배송비는 업체 사정에 따라 달라질 수 있습니다.
- 배송은 결제 확인 후 다음날부터 2~3일 이내에 배송됩니다. (단 도서 산간지역은 1~2일정도 더 소요됩니다.)
- 공휴일은 배송기간에 포함되지 않습니다.
- 주문하신 상품이 여러개인 경우 동일한 업체의 상품만 묶음 배송 가능합니다. (업체 사정에 따라 달라질 수 있습니다.)
- 배송정보는 상단 주문조회나 마이페이지 주문목록에서 가능합니다.

상품 품절

- 공급사(출판사) 재고 사정에 의해 품절/지연될 수 있으며, 품절 시 관련 사항에 대해서는 이메일과 문자로 안내드립니다.

주문취소/변경

- 주문 상품에 대한 변경사항(품절,가격변동)이 발생하면 전화나 메일을 통해 변경내용을 알려드립니다.
- 주문 상품의 변경/취소/환불은 배송 시작전 마이페이지에서 직접 신청이 가능합니다.
- 주문 상품이 발송된 시점에서는 변경/취소/환불이 모두 불가능합니다.

반품/교환

- 기간 : 배송받으신 후 7일 이내에 가능합니다.
- 방법 : 홈페이지 마이페이지 > 반품/ 교환 신청 및 조회에서 가능합니다.
- 배송비 부담 : 상품에 이상이 있을시에는 무료, 고객의 단순변심 및 착오구매일 경우 상품 반송비용은 고객 부담입니다.
- 포장 개봉 후 재판매가 불가능한 상품은 반품/교환이 불가능합니다.
- 전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에 해당되는 경우, 반품/교환이 불가능합니다.

반품/교환 불가 사유

- 소비자의 책임 있는 사유로 상품 등이 손실 또는 훼손된 경우 (단지 확인을 위한 포장 훼손은 제외)
- 소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우
- 복제가 가능한 상품 등의 포장을 훼손한 경우
- 소비자의 요청에 따라 개별적으로 주문 제작되는 상품의 경우
- 디지털 컨텐츠인 eBook, 오디오북 등을 1회 이상 다운로드를 받았을 경우
- 시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우
- 전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에 해당되는 경우

소비자 피해보상 환불 지연에 따른 배상

- 상품의 불량에 의한 반품, 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은 소비자분쟁해결기준(공정거래위원회 고시)에 준하여 처리합니다.
- 대금 환불 및 환불 지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의 소비자 보호에 관한 법률에 따라 처리합니다.

Copyright © 2022 이츠북. All Rights Reserved.