Top

[DirectX 기초부터 캐릭터 애니메이션과 셰이더 프로그래밍까지]
초보 개발자를 위한 DirectX 게임 데모 프로그래밍

  • 원서명Hackish C++ Games & Demos (ISBN 1931769583)
  • 지은이마이클 플레노프
  • 옮긴이안병규
  • ISBN : 9788960770621
  • 28,000원
  • 2008년 10월 23일 펴냄
  • 페이퍼백 | 320쪽 | 188*250mm
  • 시리즈 : 게임 개발 프로그래밍

책 소개

DirectX 게임 프로그래밍에서 비주얼 이펙트를 극대화하는 법과 그래픽을 최적화하는 법을 다루는 이 책은 최신 C++ 기술과 기법에 대한 실전적인 입문서다. DirectX의 기초, 2D 그래픽스, 3D 그래픽스, 프로그램 최적화, 골격 애니메이션, 정점 셰이더와 픽셀 셰이더 프로그래밍, 게임 엔진의 얼개에 이르기까지 다양한 주제를 다루고 있다.


[ 소개 ]

이 책은 C++와 DirectX를 이용해 데모 클립을 개발하는 방법을 다루고 있다. 이 책에서 다룰 주제와 기술, 기법을 이해하려면 데모와 데모신(demoscene)에 대해서 알아야 한다. 데모란 그래픽 이펙트에 때로는 사운드 이펙트를 곁들인 짧은 프로그램 또는 프로그램의 코드 조각을 말한다. 데모신이란 데모를 만들면서 생긴 일종의 규칙이나 법칙을 모두 아우른 문화적 총체를 말한다. 데모 개발팀들은 데모 파티에 모여서 자신의 창작품을 관객의 판단에 내맡기곤 한다. 데모를 만드는 것은 개인이 아니라 팀이다. 오늘날 혼자의 힘으로 멋있는 데모를 만든다는 것은 불가능에 가깝다. 데모를 만드는 데는 최소한 프로그래머와 디자이너, 음악가 등 세 명의 전문가가 필요하다.

그러나 이와 같은 설명만으로는 데모신의 모든 의미를 다 전달할 수가 없다. 데모신을 완전히 이해하려면 데모신이라는 문화가 생기고 발전한 역사를 이해해야 한다. 그래야만 정말로 유별난 데모신이라는 문화와 이 책에서 다루려는 내용의 정수를 이해할 수 있을 것이다.

현대적인 의미의 데모신은 게임 산업과 많은 공통점이 있다. 예전에 데모신을 만들던 프로그래머 중에 많은 수가 게임 개발자가 됐기 때문이다. 반대의 경우도 물론 있다. 게임 프로그래머가 새로운 영역에서의 자아실현을 위해 데모를 만드는 데 뛰어들거나 그래픽스 알고리즘을 생각하고 코드를 최적화하면서 머리 회전을 시키기 위해서 또는 게임의 홍보를 위해서 데모를 만드는 경우도 있다.


[ 부록 CD ]

책에 나오는 모든 데모와 게임 개발 프로젝트, 책의 예제가 담겨 있으며, 책에 미처 담지 못한 다양한 샘플 예제도 많다.

저자/역자 소개

[ 저자 소개 ]

마이클 플레노프
C++와 델파이 프로그래밍, 해킹, 코드 최적화를 전문으로 하는 기술전문 저술가로, SQL Server와 델파이, C++, 시스템 프로그래밍, 캐드 개발, 최적화 기법, 코드 리서치, 데이터베이스 생성 등의 수많은 주제를 다뤄왔다. 『Hacker Linux Uncovered』와 『Hackish C++ Pranks & Tricks』, 『Hackish PC Pranks & Tricks』, 『Hackish PHP Pranks & Tricks』 등 많은 책을 저술한 저자다.


[ 옮긴이의 말 ]

옮긴이의 글을 좋아서 읽는 사람은 아무도 없다! 이 옮긴이 말을 쓰기 위해서 주변에 있는 훌륭한 게임 개발자의 조언을 구했더니 태반은 머리말은 읽어봤어도 옮긴이 말은 읽어본 적이 없었고, 나머지도 그저 책을 앞에서부터 순서대로 읽는 습관이 있었을 뿐, 특별히 좋아서 읽는 것은 아니었다. 아무래도 옮긴이의 글이 갖는 위치가 애매모호해서 그런 것이 아닐까 싶다. 머리말이 있는데 구태여 옮긴이가 쓴 글까지 읽어볼 이유가 뭐란 말인가. 그럼에도 불구하고 이 글을 읽는 독자들을 위해, 되도록 머리말에 없는 이야기를 해주려고 한다.

이 책은 게임과 데모라는 부제를 달고 있지만 구체적으로는 그래픽 프로그래밍을 다룬 책이다. 책의 두께가 그리 두껍지 않음에도 이 책에서는 DirectX의 기초, 2D 그래픽스, 3D 그래픽스, 프로그램 최적화, 골격 애니메이션, 정점 셰이더와 픽셀 셰이더 프로그래밍, 게임 엔진의 얼개에 이르기까지 다양한 주제를 다루고 있다. 이 책에서 다룬 주제들은 사실상 각각의 주제를 몇 권으로 나눠서 다시 쓸 수 있을 정도로 방대한 내용이다. 이렇게 다양한 주제를 다룸에도 본문에서 ‘위의 주제는 이 책의 범위를 벗어나므로 생략한다’는 구문이 있다는 것이 신기할 정도이다.

이렇게 다양한 주제를 다루려면 수박 겉핥기식이 될 것이라는 우려가 드는 것은 당연한 일인데, 그럼에도 불구하고 각 주제를 실용적으로 잘 다뤘다는 것이 이 책의 미덕이다. 이 책을 읽은 독자라면 이 책에서 다룬 주제에 대해 최소한 어느 정도의 감은 잡을 수 있을 것이고, 기초가 탄탄한 독자라면 그동안 공부했던 것들이 코드로는 어떻게 표현되는가를 알게 될 것이다. 아직 기초가 부실한 독자라면, 여기서 다룬 주제를 더 빨리 배우는 방법은 아마 찾기 힘들 것이다. 초보자라면 이 책을 읽으면서 자신에게 부족한 부분을 찾아내어, 그에 대한 개설서를 읽어보는 것도 좋을 것이다.

데모에 대한 저자의 애정과 전문가로서의 경험이 이 책 전반에 배어 있다. 유용한 실제 코드를 보면서 일일이 짚어가는 방식은 바로 해커들이 프로그래밍을 익힌 과정과 동일하다. 친절한 설명을 통해, Visual C++에서 DirectX는커녕 외부 라이브러리를 한 번도 사용해보지 않은 사람이나, 3D 그래픽의 기본적인 이론인 행렬 변환을 모르는 사람조차도 빠르고 쉽게 코드를 이해하고 직접 작성해볼 수 있다. 또한 대학교재를 통해 이론적인 공부만 했던 사람은 알기 힘든 초보적인 실수를 피하는 법이나 얼핏 보기에 간단해 보이지만 사실은 쉽지 않은 최적화 비법도 책의 곳곳에 숨겨져 있다.

책에서 소개한 주제들은 그래픽 프로그래밍뿐만 아니라 범용적인 프로그래밍에도 적용할 수 있는 내용으로 이뤄져 있지만, 이 모든 것은 그래픽 데모 프로그래밍에 초점이 맞춰져 있다. 프로그래밍으로 만들 수 있는 다양한 2D 이펙트와 3D 이펙트를 소개한 4장과 5장에서 그런 특징이 두드러진다. 전형적인 프로그래밍 서적에 조그마한 싫증이라도 느꼈다면, 이 책에서 소개한 간단하면서도 흥미로운 기법들을 탐구하면서 즐거운 시간을 보낼 수 있을 것이다. 필자는 독자들이 데모 프로그래밍의 세계로 들어오기를 간절히 바라고 있지만, 게임 프로그래밍에 입문하고 싶어하는 독자라면 누구나 이 책의 효과를 볼 수 있을 것이다. 현재 국내의 게임업계에서도 대부분의 업체가 DirectX를 이용해서 3D 그래픽을 구현하고 있기 때문이다.

이 책의 초벌번역을 마치고 나서 그 일부분을, 게임서적 전문번역모임의 일원으로 많은 책을 번역하시고 유명 게임업체의 이사로 재직하고 계시는 분께 감수를 부탁드렸다. 그분의 경험을 바탕으로 수많은 조언을 해주셨는데, 번역투라고 지적을 받은 것 중에는 옮긴이 스스로가 사용한 문학적인 표현도 섞여 있어 뼈아팠다. 그러한 조언을 밑거름 삼아 다시 재검토하며 여러 번의 수정을 거쳤고, 어떤 부분은 문장이나 문단 전체를 역자 스스로의 표현으로 다시 쓰기도 했다. 이런 과정이 좋은 품질의 번역서를 내는 데 도움이 됐기를 바란다.

옮긴이가 공부를 하면서 읽은 번역서에서 실망했던 경험을 기억하면서, 번역어를 택하는 과정에 고심을 거듭했다. 번역서에서 사용했던 용어가 개발 현장에서 사용하는 용어와 동떨어지는 것을 피하고 최대한 실무 개발자가 위화감 없이 받아들일 수 있는 번역을 하려고 했다. 수많은 프로그래밍 서적과 게임 서적을 훌륭하게 번역하신 모 유명번역가의 조언도 구했는데, 개발 현장에서는 원어 그대로 사용하던 외래어를 우리말로 순화하려는 노력에 감명을 받았다.

번역을 하고 또 번역서를 읽는 데 걸림돌 중 하나는 국내에서 통일되지 않은 전문용어가 아닐까 싶다. 번역 과정을 거치며 원어에서는 같은 단어가 여러 개의 다른 단어로 번역되거나, 다른 용어가 하나의 단어로 번역되는 경우는 매우 흔한 일이다. 그로 인한 혼란을 최대한 피하기 위해서, 우리말로 순화한 용어는 이미 수많은 책을 번역하신 유명 번역가님의 용례를 최대한 따르고, 원어나 흔히 통용되는 용어를 괄호나 역주에 표기했다. 순화한 용어가 오히려 이해를 방해하는 경우에는 과감히 외래어를 사용했다. 용어를 외래어 표기법에 맞춰 표기하다 보니 실무상에서 사용되는 용어와는 약간의 거리가 생기는 경우도 있었지만 역주를 참고하면 무리 없이 이해하리라 믿는다. 번역어를 통일하기 위한 컴퓨터학계나 번역전문가들의 공동체가 생겨서 우후죽순처럼 생겨나는 컴퓨터 전문용어에 가장 적합한 우리말 표준을 정해줬으면 하는 바람이다.


[ 옮긴이 소개 ]

안병규
서울대학교 컴퓨터공학과를 졸업하고 ㈜넥슨, ㈜제이투엠, ㈜네오위즈 등에서 게임을 개발했다. 서울과학고 재학 중에 국제정보올림피아드에서 금메달을 수상하고, 서울대학교 재학 중에는 세계대학생프로그래밍대회에 출전해 아시아 지역 예선 1위를 하기도 했다. 6년간의 게임 회사 생활을 정리하고 미국 존스홉킨스 대학 박사과정으로 자연언어처리를 공부하고 있다. 번역서로는 『GREAT CODE 제2권 로우레벨을 고려한 프로그램 최적화』가 있다.

목차

목차
  • 01장 데모와 DirectX 소개
    • 1.1 데모의 역사 ● 19
    • 1.2 DirectX 소개 ● 25
    • 1.3 DirectX의 설치와 설정 ● 27
    • 1.4 최적화의 소개 ● 30
      • 제1규칙 ● 30
      • 제2규칙 ● 31
      • 제3규칙 ● 32
      • 제4규칙 ● 33
      • 제5규칙 ● 33
      • 제6규칙 ● 35
      • 제7규칙 ● 35
      • 제8규칙 ● 36
      • 제9규칙 ● 36
    • 1.5 Direct3D 초기화 ● 37
    • 1.6 DirectDraw 초기화 ● 48
    • 1.7 리소스 해제 ● 56
  • 02장 사용된 함수
    • 2.1 DirectDraw에서의 이미지 로딩 ● 60
    • 2.2 메시 ● 63
    • 2.3 메시 표시법 ● 67
  • 03장 DirectX 최적화
    • 3.1 그래픽 최적화 ● 71
    • 3.2 서피스 빨리 채우기 ● 74
    • 3.3 선 그리기 78
    • 3.4 빠른 이미지 로딩 ● 85
    • 3.5 출력 영역을 수동으로 제어 ● 90
    • 3.6 직접 액세스 최적화 ● 98
    • 3.7 3D 그래픽 최적화 ● 101
    • 3.8 3D 최적화 함수 ● 104
  • 04장 2D 이펙트
    • 4.1 착시현상 ● 108
      • 그레이디언트 효과 ● 108
      • 애니메이션 ● 109
    • 4.2 선을 사용한 효과 ● 109
      • 그물 효과 ● 110
      • 직사각형의 나선 효과 ● 111
      • 직사각형의 터널 효과 ● 114
    • 4.3 직선을 사용하지 않은 그래픽 ● 118
      • 불꽃놀이 효과 ● 118
      • 염산 효과 ● 121
    • 4.4 이미지를 이용한 이펙트 ● 123
      • 투명 효과 ● 126
      • 확대 효과 ● 128
        • 정사각형 렌즈 ● 128
        • 원형 렌즈 ● 130
        • 볼록 렌즈 ● 132
    • 4.5 프랙탈 ● 134
  • 05장 3D 이펙트
    • 5.1 글로우 효과 ● 138
      • 초기화 ● 138
      • 셰이프 표시 ● 143
      • 마지막 단계 ● 146
    • 5.2 포인트 텍스처 ● 147
    • 5.3 텍스처에 그리기 ● 150
      • 준비 ● 151
      • 초기화 ● 152
      • 텍스처 애니메이션 ● 156
    • 5.4 볼링핀 ● 160
    • 5.5 이펙트 ● 168
    • 5.6 정점 셰이더 소개 ● 171
    • 5.7 간단한 셰이더 ● 175
      • 셰이더 코드 작성 ● 175
      • 정점 셰이더 사용 ● 179
    • 5.8 셰이더에서의 조명 제어 ● 186
      • 법선 ● 187
      • 셰이더 ● 188
    • 5.9 무중력 덩어리 ● 190
    • 5.10 픽셀 셰이더 ● 195
    • 5.11 하이라이트 효과 ● 202
    • 5.12 심전도 효과 ● 204
    • 5.13 불 효과 ● 207
      • 모닥불 ● 208
      • 불꽃 대포알 ● 212
      • 불타는 용암 ● 213
    • 5.14 모핑 ● 214
    • 5.15 번개 효과 ● 217
    • 5.16 셰이더에서의 정육면체 텍스처 사용법 ● 218
    • 5.17 객체별 셰이더 ● 221
  • 06장 엔진
    • 6.1 엔진의 구조 ● 227
    • 6.2 객체 엔진 ● 228
    • 6.3 게임 엔진 ● 235
    • 6.4 엔진의 실행 ● 241
    • 6.5 그림자 ● 245
    • 6.6 광원이 여러 개인 경우 ● 253
    • 6.7 골격 애니메이션 ● 256
    • 6.8 메시 저장 포맷 ● 258
    • 6.9 골격 애니메이션의 프로그래밍 기초 ● 264
    • 6.10 메시와 골격을 .x 파일에서 읽어들이기 ● 266
    • 6.11 객체의 파싱 ● 271
    • 6.12 메시 읽어들이기 ● 274
    • 6.13 자식 원소 읽어들이기 ● 277
    • 6.14 프레임 검색 ● 278
    • 6.15 골격 갱신 ● 279
    • 6.16 메시 갱신 ● 281
    • 6.17 골격 애니메이션 ● 283
    • 6.18 애니메이션을 .x 파일에 저장하기 ● 288
    • 6.19 애니메이션을 .x 파일에서 읽어들이기 ● 291
      • 필요한 클래스 ● 291
      • 파일 파싱하기 ● 293
      • 키 파싱하기 ● 295
    • 6.20 애니메이션의 사용 ● 296
    • 6.21 충돌 ● 299
      • 점과 평면의 충돌 ● 300
      • 점과 직육면체의 충돌 ● 300
      • 점과 구의 충돌 ● 301
      • 구와 구의 충돌 ● 301
    • 6.22 게임에서의 충돌 ● 302
    • 6.23 충돌검사 구현 예제 ● 305
    • 6.24 더 깊이 파고들기 ● 309
    • 6.25 마지막 조언 ● 313
  • 맺음말 ● 315

관련 블로그 글

초보 게임 개발자를 위한 속성 프로그래밍 입문가이드
사용자 삽입 이미지
초보 개발자를 위한 DirectX 게임·데모 프로그래밍
DirectX 기초부터 캐릭터 애니메이션과 셰이더 프로그래밍까지
마이클 플레노프 지음 | 안병규 옮김 | 게임 개발 프로그래밍 시리즈 ⑤
320쪽 | 28,000원 | 2008년 10월 23일 출간예정

[##_1L|1229668828.jpg|width="113" height="226" alt="사용자 삽입 이미지"|<이 책의 대상 독자^^>_##]세상에는 게임 개발 관련 책이 정말 많이 나와 있습니다. 각 게임 개발 전문분야를 파고드는 책도 많고, 입문자를 위한 책도 많죠. 하지만 『게임회사 이야기』덕분에 우리에겐 더더욱 친숙한 게임 프로그래머 여러분을 위한 실용적인 입문서는 무엇이 있을까요? 여기 초보 게임 개발자 여러분들이 업무를 시작하기에 앞서 꼭 필요한 내용을 단번에 익힐 수 있는 실전 속성 게임 프로그래밍 가이드가 출간됐습니다. 에이콘에서도 참 오랜만에 선보이는 게임 개발 프로그래밍 시리즈이죠.

목차를 보시면 아시겠지만, 이 책을 실제적인 완벽 가이드라든가 집중분석서적이라고는 할 수 없습니다. 허나 게임 개발의 기초적인 내용을 모두 다루는 방대한 내용을 이렇게 한 권에 집약해서 다뤘다는 점이 바로 이 책의 장점이기도 합니다. 실용적인 게임 데모 프로젝트 예제들을 다룸으로써, 직접 소스코드를 실행해서 각 결과물을 눈으로 직접 확인할 수 있게 함으로써 게임 프로그래밍의 기초를 몸소 체험할 수 있습니다. 초보 개발자분들에게 필요한 건 대강의 그림과 얼개를 익히는 것도 무엇보다도 중요하니까요.

DirectX 게임 프로그래밍에서 비주얼 이펙트를 극대화하는 법과 그래픽을 최적화하는 법을 다루는 이 책은 최신 C++ 기술과 기법에 대한 실전적인 입문서다. DirectX의 기초, 2D 그래픽스, 3D 그래픽스, 프로그램 최적화, 골격 애니메이션, 정점 셰이더와 픽셀 셰이더 프로그래밍, 게임 엔진의 얼개에 이르기까지 다양한 주제를 다루고 있다.
이 책은 크게 몇 가지로 나눌 수 있습니다. 첫째, 게임 프로그래밍과 그래픽 이펙트의 기초인 2D 이펙트와 DirectX 프로그래밍을 집중해 다룸으로써 3D 이펙트의 대강을 훑어봅니다. 또한 캐릭터 애니메이션을 실습해봄으로써 코드를 실행하면서 대강의 뼈대를 만들어 돌려보면서 감각을 익힐 수 있겠죠. 그리고 최근 그래픽 카드 기술 향상으로 발전된 셰이더 프로그래밍을 정점/픽셀 단위로 나눠 다룸으로써 사실적이고 리얼한 표현을 구현하는 것까지 익힐 수 있습니다.

이 책은 C++ 프로그래밍의 해커라고 할 수 있는 마이클 플레노프가 집필하고, 넥슨 등에서 게임 개발자로 6년간 일하다가 지금은 존스홉킨스 대학에서 박사과정을 공부하고 있는 안병규님이 번역했습니다. 대학선후배들과 함께 작년에 출간한『GREAT CODE 제2권 로우레벨을 고려한 프로그램 최적화』도 번역하셨던 분이죠. 요즘 저희와 함께 작업하는 역자분들 중 유학생들이 참 많으세요. 학기 공부하시느라 바쁜 중에 인터넷 폰으로 장시간 통화도 마다않으시고 마감하느라 고생하신 병규님, 자연어 처리를 전공하신다니 앞으로도 도움 받을 일이 많을 듯합니다.
 
게임 업계에 발을 담그신 이력을 살려 이 책의 특징을 누구보다도 더 이해하기 싶게 써주신 옮긴이의 말을 잠시 빌려 보여드리면 이 책의 특장점을 누구보다 쉽게 이해할 수 있으리라 생각합니다.

데모에 대한 저자의 애정과 전문가로서의 경험이 이 책 전반에 배어 있다. 유용한 실제 코드를 보면서 일일이 짚어가는 방식은 바로 해커들이 프로그래밍을 익힌 과정과 동일하다. 친절한 설명을 통해, Visual C++에서 DirectX는커녕 외부 라이브러리를 한 번도 사용해보지 않은 사람이나, 3D 그래픽의 기본적인 이론인 행렬 변환을 모르는 사람조차도 빠르고 쉽게 코드를 이해하고 직접 작성해볼 수 있다. 또한 대학교재를 통해 이론적인 공부만 했던 사람은 알기 힘든 초보적인 실수를 피하는 법이나 얼핏 보기에 간단해 보이지만 사실은 쉽지 않은 최적화 비법도 책의 곳곳에 숨겨져 있다.

책에서 소개한 주제들은 그래픽 프로그래밍뿐만 아니라 범용적인 프로그래밍에도 적용할 수 있는 내용으로 이뤄져 있지만, 이 모든 것은 그래픽 데모 프로그래밍에 초점이 맞춰져 있다. 프로그래밍으로 만들 수 있는 다양한 2D 이펙트와 3D 이펙트를 소개한 4장과 5장에서 그런 특징이 두드러진다.
전형적인 프로그래밍 서적에 조그마한 싫증이라도 느꼈다면, 이 책에서 소개한 간단하면서도 흥미로운 기법들을 탐구하면서 즐거운 시간을 보낼 수 있을 것이다.

필자는 독자들이 데모 프로그래밍의 세계로 들어오기를 간절히 바라고 있지만, 게임 프로그래밍에 입문하고 싶어하는 독자라면 누구나 이 책의 효과를 볼 수 있을 것이다. 현재 국내의 게임업계에서도 대부분의 업체가 DirectX를 이용해서 3D 그래픽을 구현하고 있기 때문이다.
[##_1L|1648369251.jpg|width="120" height="120" alt="사용자 삽입 이미지"|_##]참, 이 책에 삽입된 부록 CD에는 이 책에서 사용된 소스코드, 데모 프로젝트 예제, 그리고 책의 분량때문에 미처 다 담지 못한 다양한 샘플 프로젝트 예제들이 가득가득 들어 있습니다.

마지막으로 이 책을 읽으실 게임 개발자 분들의 분투를 기원하며, 이수인님의 『게임회사 이야기』만화 컷을 올려 드릴게요. 잠시 머리 식히세요~ ^^
사용자 삽입 이미지사용자 삽입 이미지
프로그래머 여러분의 야근은 외롭지 않습니다. :) 에브리데이 마감 모드 에이콘이 함께 하니까요~

+ 추가

초보 개발자를 위한 DirectX 게임 데모 프로그래밍』은 지금 바로 YES24, 교보문고, 강컴, 알라딘, 인터파크에서 주문하시면 이번 주 금요일이면 손에 넣으실 수 있을 거에요. 곧 나옵니다. :) 기대해주세요!
CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안