책 이미지
책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 개발/방법론 > 게임 프로그래밍
· ISBN : 9788979148992
· 쪽수 : 1009쪽
· 출판일 : 2012-02-01
책 소개
목차
CHAPTER 00 머리말
__01 이 책은 어떤 책인가
__02 대상 독자
____필요한 기술
__03 필요한 준비
____컴파일러와 운영체제
____DirectX
____CPU와 메모리
____그래픽 하드웨어
____그래픽과 음악 소재
__04 이 책 진행 방법
__05 이 책 학습 방법
__06 예제 코드
____소프트웨어 등 사용 허가서
Part I 2차원 게임
CHAPTER 01 처음 만드는 게임
__1.1 퍼즐 게임을 만들자
____예제
____준비
____메인 루프
____처리 내용을 작성한다
____검사
__1.2 예제 코드
____헤더 포함
____스테이지 데이터 상수
____열거형
____함수 프로토타입
____main 함수
____스테이지 초기화
____화면 그리기
____갱신
____클리어 판정
____정리
__1.3 스테이지 데이터를 읽자
____준비
____데이터 형식
____스테이지 크기
____오류 처리
____예제 코드
__1.4 C++ 보충
____이름공간
____템플릿
____생성자와 소멸자
____초기 설정
____멤버함수에서 const
____두 가지 delete
____문자열 상수
__1.5 팁: 플래그와 비트 연산
____플래그
____플래그 저장
____계산으로 플래그를 추출하는 방법
____곱셈 나눗셈과 시프트 연산
____비트 연산을 사용한다
____플래그를 온으로 하자
____플래그를 오프로 하자
____여러 플래그를 한 번에 조작한다
____16진수
__1.6 팁: 포인터와 메모리
____메모리는 배열이다
____포인터
____포인터와 배열
____0 포인터
____포인터 형
____new와 delete
____배열과 new 차이
____포인터 정리
__1.7 팁: 참조
____참조와 포인터
____성능 향상을 위한 포인터와 참조
____참조 문제점
____참조 '반환'에 주의
__1.8 정리
CHAPTER 02 점에서 시작하는 2D 그래픽
__2.1 2D 그래픽
____라이브러리
__2.2 준비
____라이브러리 경로를 설정한다
____디버그와 릴리스
____환경변수
____멤버함수
____앞 장에 cout, cin과의 차이
__2.3 점을 찍자
____예제 코드
__2.4 배달맨을 이식한다
____그래픽이 나오지 않는 배달맨 만들기
____배달맨에 그래픽을 덧붙인다
____그래픽을 확대한다
__2.5 팁: 종료 처리
____종료 처리용 함수
____종료 처리가 필요한 이유
__2.6 정리
CHAPTER 03 이미지 파일을 사용하자
__3.1 파일에서 이미지를 읽는다
____이미지 형식
____DDS 이미지를 준비한다
____DDS 구조를 조사한다
____데이터를 추출하자
____사각형 화면에 붙인다
____이미지 일부를 잘라내자
____배달맨에 적용하자
__3.2 그래픽 버전인 배달맨 예제 코드
____전체 구성
____maincpp
____Statecpp
____Filecpp
____Imagecpp
__3.3 알파 채널을 사용한다
____알파 테스트
____배달맨에 도입한다
____알파 블렌딩
____배달맨에 적용하자
__3.4 포함 관계 결정 방법
____전통적인 방법
____문제점은 무엇인가
____정의와 선언
____인클루드 가드
____결국 어떻게 하면 되는가
____헤더 인클루드를 생각하는 의미
__3.5 팁: 알파 블렌딩 최적화
____정수로 계산한다
____시프트를 지우자
__3.6 팁: 가산 블렌딩
__3.7 정리
CHAPTER 04 실시간 게임
__4.1 실시간 게임
____어디를 수정해야 하는가
____새로운 입력 함수: Framework::isKeyOn()
____입력 페이스 조정
__4.2 애니메이션을 만들자
__4.3 애니메이션이 들어간 배달맨 예제 코드
____Stateh
____Statecpp
__4.4 프레임 레이트를 구한다
____프레임 레이트 계산
__4.5 프레임 레이트 차이에 대응한다
____프레임 레이트를 고정한다
____unsigned 범위를 넘었을 때 대처
__4.6 팁: 프레임 레이트에 맞게 게임 속도를 바꾸는 방법
____좋은 점과 나쁜 점
____만들어 본다
____예제 코드
____unsigned와 int
____가변 프레임 레이트와 고정 프레임 레이트 비교
__4.7 팁: 티어링 문제
____티어링을 어떻게 잡을 수 있을까
__4.8 정리
CHAPTER 05 간단한 시퀀스 전이
__5.1 라이브러리 추가 기능
____입력 취득 기능
____프레임 레이트 관련 기능
____편리한 매크로
__5.2 단순한 방법
____if 문으로 한다
____switch 문을 사용한다
__5.3 시퀀스를 늘리자
____시퀀스 사양
____이것은 간단한 과제인가
__5.4 코드 검사
____자원 로드와 해제에 관한 문제
____시퀀스에 걸쳐 있는 자원 문제
____계층 구조 시퀀스 전이
____전이 트리거를 어디에 둘까
____계층 간 이동
__5.5 예제 코드
____파일 배치
____프로젝트 설정
____클래스 구성
____데이터 배치
____maincpp
____Sequence/Parenth
____Sequence/Parentcpp
____Game::Parent
____1초 대기
____몇 가지 기능 추가
____stringstream
__5.6 정리
CHAPTER 06 문자를 출력하는 방법
__6.1 폰트용 이미지
__6.2 문자 그리기 함수
____ASCII 코드
__6.3 사용하기 편하게
____클래스화
____배경을 투명하게 만들자
____색을 바꾼다
____표시 위치 지정
____오류 검사
__6.4 사용한다
__6.5 예제 코드
____싱글톤
__6.6 저작권에 주의하자!
__6.7 예제 라이브러리 기능
__6.8 정리
CHAPTER 07 처음 시작하는 액션 게임
__7.1 사용할 라이브러리
____문자 그리기
____난수
__7.2 '폭탄맨'을 만들자
__7.3 예제 코드
____라이브러리를 대응시킨다
____시퀀스만 만들어 보자
____시퀀스만 추가한 예제 코드
__7.4 일단 배경을 출력한다
____이미지를 준비한다
____State 클래스를 바꿔 쓴다
____움직이지 않는 오브젝트 클래스를 정비한다
____스테이지 형태
____그리자
__7.5 움직이는 오브젝트를 배치한다
____움직이는 오브젝트 클래스
____배치
____움직이게 한다
__7.6 드디어 게임을 하자
__7.7 정리
CHAPTER 08 평면 충돌 처리
__8.1 충돌 검출
____정사각형 교차 판정
____데이터 표현 방법
____교차 판정 코드
__8.2 충돌 응답
____충돌하면 움직이지 않는다
____충돌 직전에 멈춘다
____이동시켜 처리한다
____어느 방법이 좋을까
__8.3 복수 충돌 문제
____충돌하면 움직이지 않는다
____충돌 직전에 멈춘다
____겹쳐 있으면 이동시킨다
____어느 것을 선택할 것인가
__8.4 충돌 응답과 조작성
____겉보기와 실체 크기를 다르게 한다
____충돌하면 벽면을 따라 미끄러지게 한다
____가로 이동과 세로 이동을 따로 다룬다
____움직이는 캐릭터를 원형으로 한다
____어느 방법을 택해야 하는가
__8.5 움직이는 것끼리 충돌한다
__8.6 폭탄맨 충돌 처리
____DynamicObject 확장
____움직이는 것끼리
____움직이는 것과 움직이지 않는 것 판정
____폭탄 설치 문제
____연쇄 폭발
__8.7 정리
CHAPTER 09 다양한 입력장치
__9.1 입력장치 인스턴스 취득
__9.2 키보드
__9.3 마우스
__9.4 조이스틱
__9.5 폭탄맨을 조이스틱으로 조작한다
____라이브러리를 은폐하는 것
____예제 코드
__9.6 정리
CHAPTER 10 좀 더 나은 시퀀스 전이
__10.1 도대체 무엇이 문제였을까
__10.2 상속을 사용한다
____ 기반 클래스
____ 파생 클래스
____ 파생 클래스와 기저 크래스
____ 가상 소멸자
__10.3 실제로 사용하자
____ 예제 코드
__10.4 팁: 시퀀스 이동 코드를 짧게 한다
____ 문제는 어디에 있는가
____ 잘못된 분기를 바로잡는다
____ 예제 코드
__10.5 팁: 계층 간 시퀀스 이동 코드도 짧게 한다
____ dynamic_cast
____ 계층마다 기반 클래스를 다시 정의한다
____ 예제 코드
____ 이렇게까지 할 필요가 있을까
__10.6 팁: 상속을 좀 더 자세히
____ 상속을 흉내낸다
____ 상속은 무엇을 희생하고 있는가
____ 상속은 언제 사용해야 하는가
____ 순수 가상 함수
__10.7 정리
CHAPTER 11 소리를 내다
__11.1 사운드 라이브러리
____ 데시벨
____ 예제 코드
__11.2 팁: 컴퓨터에서 소리를 재생한다는 것
____ 라이브러리
__11.3 팁: 소리 높이와 크기
____ 소리 높이
____ 소리 크기
__11.4 팁: 음색
__11.5 팁: 소리 겹침
__11.6 팁: 도레미 원리
____ 도레미로 놀아보자
__11.7 팁: 악보를 읽어 연주한다
____ 예제 코드
__11.8 팁: WAV 파일 읽기
____ WAV 파일 내용
__11.9 팁: Sound 모듈을 사용한 웨이브 합성
__11.10 정리
CHAPTER 12 회전, 확대, 이동
__12.1 회전
____ 좌표를 돌리는 간단한 방법
____ 삼각함수
____ 삼각함수를 사용해 회전시킨다
____ 좀 더 나은 방법
__12.2 벡터와 행렬 도입
____ 벡터형 도입
____ 행렬 도입
__12.3 정점
__12.4 확대·축소
____ 코드로 만들자
__12.5 확대·축소하면서 회전시킨다
____ 코드로 만들자
__12.6 행렬이 지닌 위력
____ 이동을 행렬로 표현한다
____ 확대·축소를 행렬로 나타낸다
____ 복수 조작을 하나로 모은다
__12.7 팁: 왜 이 공식으로 회전이 될까
__12.8 팁: 제대로 돌려보자
____ 래스터라이즈
__12.9 팁: 수학 속 행렬
____ 행렬과 벡터 곱
____ 행렬과 행렬 곱
__12.10 정리
CHAPTER 13 하드웨어 파워
__13.1 사용할 라이브러리
__13.2 그래픽 하드웨어로 삼격형을 그린다
____ 흰색 삼각형을 그린다
____ 색칠한 삼각형을 그린다
__13.3 삼각형에 이미지를 붙인다
____ 텍스처를 만든다
____ 텍스처를 사용한다
____ 텍스처 좌표
____ 텍스처와 정점 병용
__13.4 알파 블렌드
__13.5 회전, 확대·축소, 이동
____ 변환 순서를 생각한다
____ 행렬을 사용해 drawTriangle2D()를 호출한다
__13.6 폭탄맨을 이식한다
____ 텍스처 잘라내기
____ 예제 코드
__13.7 정리
Part II 3차원 게임
__14.1 라이브러리
____ 텍스처 등록
__14.2 3D 액션 게임 '로보 파이트'를 만들려면
____ 로보 파이트에 필요한 것
__14.3 삼각형을 그린다
__14.4 가까운 쪽을 가까이에 그린다
____ 반투명과 Z 버퍼법
__14.5 멀리 있는 것을 작게 그리기
____ 거리로 나눈다
____ 직접 했을 때 문제점
____ 그래픽 하드웨어를 이용하자
__14.6 좌표 교환
____ 좌표축 방향
____ z축을 반전한다
____ 행렬과 벡터 확장
____ 3차원 회전 행렬
____ 어떻게 보이는지 생각한다
____ 두 개 축 이상 회전이 필요할 때
____ 뷰 변환 행렬
__14.7 투시 변환도 행렬로
____ 무엇을 하고 있었는지 떠올린다
____ 또 하나 z 범위 변환
____ 화각 도입
____ 종횡비 보정
____ 행렬 완성
____ 모든 변환 합성
__14.8 로보 파이트를 만들기 시작하자
____ 클래스 설계
____ 메인 루프
____ 로보 클래스 선언
____ 스테이지 클래스 선언
____ 그림을 출력하는 경로를 생각한다
____ 시점 조작과 투시 변환
____ 로보를 출력하자
____ 시점 이동을 만든다
____ 로보를 움직인다
____ 텍스처를 붙인다
____ 시선 방향을 따라 이동 방향을 수정한다
__14.9 팁: Z 버퍼 정밀도 문제
__14.10 정리
CHAPTER 15 라이브러리 제작법
__15.1 전체 설계
____ 리소스와 인스턴스
__15.2 리소스 내역
____ 정점 버퍼 클래스
____ 인덱스 버퍼 클래스
____ 배치 클래스
____ 그리기 인스턴스 클래스
____ 리소스 컨테이너 클래스
____ 카메라 클래스
__15.3 사용해보자
__15.4 파일에서 로드한다
____ 너무 정직한 방법
____ XML처럼 만들자
____ 유사 XML을 라이브러리에
__15.5 팁: 라이브러리를 게임에서 분리한다
____ 비주얼 스튜디오 프로젝트 설정
__15.6 정리
CHAPTER 16 유사 XML 읽기
__16.1 파일 형식을 결정한다
__16.2 사전 준비
____ std::string
____ 단순화
__16.3 처리 흐름
____ Document 클래스
____ Element 클래스
__16.4 문자열 해석
____ 상태 전이 집합으로 분해한다
____ 실제로 분해한다
__16.5 코드로 만든다
__16.6 사용해보자
____ 필요한 함수
__16.7 예제 코드
____ Texture 클래스
____ 배치와 이름공간
____ 추가에 관한 문제
____ 문자열에서 수치로 변환
____ 사용자 코드
__16.8 팁: 쓰기
____ 사용자가 코드를 작성한다
____ 어트리뷰트 설정
____ 추가
__16.9 정리
CHAPTER 17 느리지 않은 코드를 작성하려면
__17.1 알고리즘과 계산량 오더
____ 간단한 예
____ 계산량 오더
__17.2 데이터 구조 기초
____ 데이터 구조 성질
____ 정렬되지 않은 배열
____ 정렬되어 있는 배열
____ 리스트
____ 이진 트리
____ 정렬된 이진 트리
____ 조작을 제한한다
__17.3 스루풋과 레이턴시
____ CPU 명령
____ 더욱 큰 주제
__17.4 병렬성
____ 병렬화 비용
__17.5 메모리 문제
____ 메모리에 해당하는 레이턴시를 짧게 하는 두 가지 방법
____ 모아서 처리하기
____ 캐시에 대해 생각해보자
____ 어떻게 하면 좋을까
__17.6 STL과 데이터 구조
____ 이터레이터
____ vector
____ list
____ set
____ map
____ 포인터를 넣을까 실체를 넣을까
__17.7 어디가 느린가
__17.8 팁: 함수 호출에 걸리는 무게
____ 클래스 간 처리 분담을 변경한다
____ 호출 횟수를 줄인다
____ 인라인화한다
__17.9 팁: 빠른 계산과 느린 계산
____ 나눗셈
__17.10 정리
CHAPTER 18 입체 충돌 처리
__18.1 직육면체 충돌 처리
____ 응답 문제
____ 예제 코드
____ 직육면체로는 할 수 없는 일
__18.2 부동 소수점 수를 사용한 충돌 검출
____ 어떤 형상이 필요할까
____ 구와 구 교차 판정
____ 충돌 응답
____ 내적과 각도
____ 충돌 응답으로 돌아가서
____ 복수 충돌
____ 지면에 똑바로 서고 싶다
__18.3 삼각형과 선분 교차 판정
____ 기하학 형상 표현 방법
____ 연립방정식으로 한 번에 구하는 방법
____ 두 단계로 판정한다
____ 외적과 법선
____ t를 구한다
____ 삼각형 안에 있는가
____ 코드로 만든다
__18.4 실용적인가
____ 이음새 문제
__18.5 남겨진 문제
____ 속도 문제
____ 응답 문제
____ 계산 정밀도 문제
__18.6 정리
CHAPTER 19 로보 파이트 설계
__19.1 시퀀스 전이
__19.2 조작계
____ 이동
____ 점프
____ 선회
____ 무기 발사
____ 예제 코드
__19.3 총을 쏘다
____ 탄환 클래스
____ 탄환 데이터 구조
____ 유도탄
____ 예제 코드
__19.4 하나로 모은다
____ 추가 요소
____ 예제 코드
__19.5 프론트엔드
____ 카메라와 관계없는 그래픽
____ 예제 코드
__19.6 여전히 부족한 것
__19.7 정리
CHAPTER 20 빛이 닿는다는 것
__20.1 물체가 보인다는 것
____ 레이 트레이스
____ 무리한 레이 트레이스
____ 간략화
__20.2 빛이 감소하는 과정
____ 태양에서 물체까지
____ 면 각도
____ 반사하는 비율
____ 물체에서 카메라까지
__20.3 계산하자
____ 실제로 계산하는 식을 세운다
____ 속임수를 쓰다
____ 색에 대한 이야기
____ 예제 코드
__20.4 로보 파이트에 넣자
__20.5 팁: 속도 개선 힌트
____ 로컬 좌표로 계산한다
____ 법선을 미리 준비한다
____ 정점에 법선을 연결한다
____ 예제 코드
__20.6 팁: 조금 더 나은 그림을 만들려면
__20.7 정리
CHAPTER 21 캐릭터가 움직이기 시작한다
__21.1 상대 이동
____ 초보자 애니메이션
____ 상대 이동 개념
____ 복수 좌표계
____ 좌표계 이동
____ 행렬 합성
____ 태양계 구현
____ 하루와 한달
__21.2 계층 모델 클래스
____ Node 클래스
__21.3 자동으로 트리 구조 구축
____ 데이터 파일에 친자 관계를 기술한다
____ Tree 클래스
____ 초기값도 파일에 넣는다
____ 노드와 트리 리소스화
____ 노드 정의
__21.4 애니메이션 데이터화
____ 데이터화 실현
____ 애니메이션 데이터 세부 사항
____ 예제 코드
__21.5 보간법
____ 1차 함수 보간
____ 2차 함수 보간
____ 미분
____ 다시 2차 함수 보간으로
____ 3차 함수 보간
____ 기울기를 주고 보간한다
____ 3차 함수 보간 코드
__21.6 로보 파이트에 넣는다
__21.7 팁: 연립방정식 vs 정해진 기울기
__21.8 팁: 부족한 것
____ 애니메이션 전환
____ 정점 블렌딩
____ IK
____ 깨끗한 회전 보간
__21.9 정리
Part III 판매용 제품으로 가는 길
__22.1 전체 검사를 하면 속도가 느리다
__22.2 속도를 개선할 때 기본
____ 두 가지 아이디어
____ 충돌 검출은 '검색'이다
__22.3 정렬에 바탕을 둔 방법
____ 아주 단순한 방법
____ 양 끝을 정렬한다
____ 만난 사람 리스트
____ 코드로 만든다
____ 조금씩 개량
____ 정렬에 의한 방법을 사용할 때 약점
__22.4 분할에 의한 방법
____ 균등 분할
____ std::list를 사용해서 만든다
____ 개수를 정해서 배열로 만들자
____ 균등 공간 분할을 사용할 때 약점
____ 균등 공간 분할 용도
__22.5 팁: 균등 분할을 추가로 개량
____ 조금씩 new하면서 용량 제한을 없앤다
____ list 자체를 줄인다
____ 더욱 빠르게 한다
__22.6 팁: 고도의 공간 분할
____ k-d tree를 만든다
____ 예제 코드
____ k-d tree 용도
__22.7 정리
CHAPTER 23 로딩
__23.1 왜 로딩 시간이 길어지는가
__23.2 파일 로더 클래스
____ 일단 사용 방식을 정하자
____ 예제 코드
____ 우선 한 프레임에 한 파일로 한다
____ 한 프레임에 정해진 양만 로드한다
__23.3 파일 결합에 의한 속도 개선
____ 파일 결합 전략
____ 파일 결합은 언제 해야 하는가
____ 읽기 프로그램
____ 파일을 열거한다
____ Archiver1 예제를 사용한다
____ 읽는 쪽
__23.4 압축에 의한 속도 개선
____ 압축 종류
____ 연장 압축
____ 사전 압축
____ 실제 사용을 고려한다
__23.5 팁: 멀티 스레드에 의한 비동기 처리
____ 스레드 만들기
____ 공유 자원 문제
____ 공유 자원에는 자물쇠를 걸자
____ Mutex를 사용한다
____ 메모리에 정말로 쓰고 있는가
____ 스레드 세이프
____ 로더를 멀티 스레드화한다
__23.6 팁: 부호화
____ 부호화 예
____ 부호화 사용 방법
__23.7 팁: 내부를 감추기 위한 결합과 압축
__23.8 정리
CHAPTER 24 float 사용 방법
__24.1 자릿수에 한계가 있다는 것
__24.2 float 내부
____ float 읽는 법
____ float 정밀도
__24.3 어중간한 수에 의한 오차
__24.4 어느 정도 오차가 나는가
____ 덧셈
____ 뺄셈
____ 곱셈과 나눗셈
____ 상대오차는 어느 정도일까
__24.5 오차 길들이기
____ 계산 순서를 바꿔서 회피한다
____ 다항식
____ 계산 횟수를 줄인다
____ = =와 ! =를 사용하지 않는다
____ 큰 값을 넣지 않는다
____ 뺀 것으로 나눈다
____ 대소 판정
____ 10과 1f
__24.6 특별한 수
____ 제로
____ 무한대
____ 비수
____ 오류를 찾는 방법
____ 비정규수
__24.7 정리
CHAPTER 25 부속 라이브러리 사양
__25.1 라이브러리 클래스
____ 싱글톤
____ 실체가 따로 있는 클래스
____ 보통 클래스
__25.2 시작 환경 설정
____ 파일을 로드한다
____ 명령창 문자열
____ 모니터 갱신 주기를 사용하는 고정 프레임 레이트(수직 동기)
__25.3 Framework 모듈
____ DebugScreen 클래스
__25.4 WindowCreator 모듈
__25.5 FileIO 모듈
____ 아카이브 사용법
__25.6 Base 모듈
__25.7 Math 모듈
____ Random 클래스
____ 각도 단위
__25.8 Threading 모듈
____ Thread
____ Semaphore
____ Mutex
____ Event
____ getCurrentThreadId()
____ 스레드 수
__25.9 Input 모듈
__25.10 Sound 모듈
__25.11 PseudoXml 모듈
__25.12 Graphics 모듈
____ 대략적인 사용 방법
____ DrawCube 예제
__25.13 Scene 모듈
____ PrimitiveRenderer
____ StringRenderer
____ Collisonmesh
____ CollisonDetctor
__25.14 안티앨리어싱
__25.15 최종 버전 라이브러리에 로보 파이트를 이식한다
__25.16 X 파일
__25.17 정리
CHAPTER 26 버그와 친해지는 법
__26.1 불조심과 불끄기
__26.2 버그 종류
____ 논리 버그
____ 기술 버그
____ 처리 지연
____ 메모리 오버플로우
__26.3 예방 혹은 불조심
____ 배열 범위 오류
____ 해제된 포인터에 접근
____ 초기화되지 않은 포인터 접근
____ 위험한 함수를 무분별하게 사용
____ std::vector를 무분별하게 사용
____ 메모리 해제 잊음
____ 포인터를 추방한다
____ GameLib의 클래스
____ 코딩 스타일
__26.4 치료 혹은 소화
____ '분할' 응용
____ 기본은 이진 검색
____ 뒤로 미루지 않는다
____ 시제품은 버려라
____ 메모리 누수 검출
__26.5 로보 파이트 안전 사양
__26.6 팁: 메모리 누수 검출 내부
____ new 내부
____ delete 내부
____ 정보를 늘린다
____ 파일 이름과 줄 번호
__26.7 정리
CHAPTER 27 더욱 앞으로
__27.1 무엇을 배우면 좋을까
__27.2 도구
____ 명령창 도구
____ GUI 도구
__27.3 AI
__27.4 네트워크
__27.5 셰이더
__27.6 참고문헌
____ 수학과 계산기 과학
____ 프로그래밍
____ 물리학
____ 컴퓨터 그래픽
__27.7 이런 책이 있었으면
____ 게임을 소재로 한 프로그래밍 책
____ 게임을 소재로 한 물리와 수학책
____ 누군가 써 주기를



















