목차
Part 1. 기초
   1장 윈도우즈 프로그래밍 개요
      이벤트 구동 프로그래밍 ... 4
      여러분의 첫번째 윈도우 프로그래밍 ... 5
        main()이 아닌 Winmain() ... 7
        윈도우 생성의 2단계 ... 9
        이벤트 핸들링(펌핀 메시지) ... 25
        WindowProc 작성 ... 32
      이 장의 요약 ... 41
      샘플 프로그램에 대해서 ... 41
      연습문제 ... 42
   2장 고급 Win32 API 프로그래밍
      원도우즈 GDI ... 44
        디바이스 문맥(Device Contexts) ... 47
        GDI 좌표계에 대한 간략한 설명 ... 49
        펜, 칼라, 브러쉬와 도형 ... 50
        비트맵(Bitmaps) ... 56
        텍스트(Text)와 폰트 (Fonts) ... 65
        리젼(Region)과 클리핑(Clipping) ... 77
      에러 검사 ... 78
        GetLastError ... 78
        MessageBox ... 80
      리소스(Resources) 사용하기 ... 82
        아이콘(Icons) ... 85
        사용자 설정 마우스 커서 ... 86
      대화 상자 만들기 ... 87
        리소스 에디터에서 대화상자 템플릿 만들기 ... 89
        모달 대화상자 ... 90
        모달리스 대화상자 ... 92
        대화상자 컨트롤 ... 94
      이 장의 요약 ... 96
      샘플 프로그램들에 대해 ... 96
      연습문제 ... 98
   3장 DirectX
      DirectX는 무엇인가? ... 100
      DirectX를 내가 사용해야만 하는가? ... 101
      DirectX 사용의 기본규칙 ... 102
        인터페이스란 무엇인가? ... 102
        항상 인터페이스를 해제한다. ... 103
        IUnKnown은 무엇인가? ... 104
        COM에 관한 다른 중요한 것들 ... 104
        DirectX Enumeration을 처리하는 방법 ... 107
      DIRECTINPUT ... 108
        DirectInput 아키텍쳐 ... 109
        디아비스 설정하기 ... 110
        대바이스 취득과 디바이스 취득 해제 ... 110
        버퍼링 데이터 & 즉시 데이터 ... 112
        즉시 데이터 읽기 ... 114
        버퍼링 데이터 읽기 ... 116
        액션 매핑 ... 118
        포스 피드백(Force Feedback) ... 126
        DirectInput 요약 ... 131
      DirectAudio ... 132
        도대체, 디지털 오디오는 어떻게 작동하는가? ... 132
        DirectAudio 구조 ... 136
        DirectAudio의 설정 ... 137
        사운드와 뮤직을 연주하기 ... 140
        DirectAudio 이펙트 필터를 이용해서 사운드를 변경하기 ... 146
        오디오 스크립트 ... 149
        DirectAudio 요약 ... 151
      DirectPlay ... 152
        왜 DirectPlay를 이용하는가? ... 152
        Peer-to-Peer 또는 Client/Server? ... 153
        DirectPlay를 이용하는 간단한 7가지 단계 ... 154
        콜백 함수의 설정 ... 155
        다중 쓰레드와 DirectPlay 콜백함수들 ... 156
        서비스 제공자(Service Provider) 선택하기 ... 158
        게임을 호스팅(hosting)하기 ... 159
        게임에 접속하기 ... 163
        데이터의 전송 ... 166
        데이터 받기 ... 168
        중용한 DirectPlay 메시지들 ... 168
        연결끊기 ... 168
        대기실의 즐거움 ... 169
        DirectPlay의 음성특성 이용하기 ... 172
        DirectPlay 요약 ... 176
      DirectShow ... 176
        DirectShow 구조 ... 176
        비디오 플레이하기 ... 177
        특정 윈도우에서 비디오 플레이하기 ... 178
        MP3 플레이하기 ... 179
        DirectShow 요약 ... 180
      이 장의 요약 ... 180
      샘플 프로그램에 대해 ... 180
      연습문제 ... 181
   4장 3D 수학
      3D 세계에 오신 여러분을 환영한다. ... 185
        DirectGraphics는 왼손 좌표계 일까? 오른손 좌표계 일까? ... 186
        점에서 기본도형(Primitive)까지 ... 187
        3D 변환 ... 188
        로컬 좌표계와 월드 좌표계 ... 191
      벡터 ... 195
        벡터란 무엇인가? ... 195
        벡터 가산과 감산 ... 198
        벡터의 스칼라 곱 ... 199
        정규화 벡터(Normalizing Vector) ... 199
        두 벡터의 내적 ... 201
        두 벡터의 외적 ... 204
        D3DX 벡터 헬퍼 함수 ... 205
        벡터 요약 ... 207
      행렬 ... 208
        행렬이란 무엇인가? ... 208
        왜 행렬을 사용하는가? ... 208
        행렬 곱 ... 209
        빠르고 쉬운 3D 변환 방법 ... 213
        단위 행렬(Identity Matrix) ... 218
        행렬 결합 ... 219
        3D 프로그램에서 행렬 사용하기 ... 220
        D3DX 행렬 헬퍼 함수 ... 220
        행렬 요약 ... 222
      쿼터니언 ... 223
        왜 쿼터니언을 사용하는가? ... 223
        쿼터니언은 무엇인가? ... 224
        쿼터니언 기초 ... 224
        쿼터니언 사용하기 ... 227
        쿼터니언 요약 ... 227
      이 장의 요약 ... 227
      샘플 프로그램들에 대해 ... 228
      연습문제 ... 228
   5장 3D 개념
      3D 모델들 ... 230
        모델이란 무엇인가? ... 230
        정점들로 삼각형을 만드는 세가지 방법 ... 231
        정점 버퍼 ... 233
        인텍스 버퍼 ... 234
        3D 모델 요약 ... 235
      고급 3D 모델 기술들 ... 236
        X파일로부터 모델 로딩하기 ... 236
        3D Studio Model를 X파일로 변환하기 ... 237
        계층 모델과 행렬 스택 ... 240
        고급 모델 기법 요약 ... 245
      카메라와 뷰 포트 ... 246
        뷰포트 ... 246
        카메라 ... 248
        카메라와 뷰포트 요약 ... 253
      3D 기하 파이프라인 ... 254
        월드 변환 ... 254
        뷰 변환 ... 255
        투영 변환 ... 257
        클리핑과 뷰포트 스케일링 ... 257
        기하 파이프라인 요약 ... 257
      깊이 버퍼 ... 258
        왜 깊이 버퍼를 사용하는가? ... 258
        깊이 버퍼는 무엇인가? ... 259
        Z버퍼와 W버퍼 ... 260
        깊이 버퍼를 사용해서 동일 평면상에 있는 객체 그리기 ... 261
        깊이 버퍼를 사용하지 못하게 하고 깊이 버퍼의 타입 선택하기 ... 262
        깊이 버퍼에 쓰는 것 방지하기 ... 263
        깊이 버퍼에 클리어 하기 ... 263
        비교 함수 변경하기 ... 263
        깊이 버퍼 요약 ... 264
      이 장의 요약 ... 265
      샘플 프로그램들에 대해 ... 265
      연습문제 ... 265
   6장 DirectGraphics 소개
      DirectGraphics 기초 ... 268
        DirectGraphics 아키텍쳐 ... 268
        디바이스 타입들 ... 269
        디바이스 생성하기(비디오 모드 설정하기) ... 270
        모니터에 대한 간단한 설명 ... 277
        비디오 모드 알아내기 ... 280
        디바이스 소실(Lost Device) ... 282
        DEVICE 전환하기(풀스크린에서 윈도우 모드로) ... 284
      첫번째 3D프로그램 ... 284
        정점 ... 285
        정점 버퍼(Vertex Buffer) ... 290
        행렬 설정하기 ... 295
        삼각형을 랜더링 하기 위한 7단계 ... 296
        화면에 보내기 ... 301
        여러분의 첫 번째 3D 프로그램 요약 ... 302
        페이딩 인, 페인딩 아웃, 색상 번쩍이기 - 감마 컨트롤 ... 302
      여러분의 3D 카드가 감마 컨트롤을 지원하는지 알아내기 ... 302
      감마 램프(Gamma Ramps) ... 303
        페인딩 인 ... 305
        페인딩 아웃 ... 306
        다른색으로 페인딩 하기 ... 306
        감마 램프 얻기 ... 307
        감마 램프 설정하기 ... 308
      이 장의 요약 ... 309
      샘플 프로그램들에 대해 ... 309
      연습문제 ... 309
   7장 조명
      자연광 ... 312
      Direct3D 조명 개념 ... 313
        주변(Ambient) 광과 집적(Direct) 광 ... 313
        쉐이딩 모드 ... 313
        재질(Materials) ... 315
      Direct3D 조명 속성 ... 316
        분산, 반사, 주변색상 ... 316
        위치, 범위, 감쇠 ... 316
        조명 방향 ... 317
        조명 타입 ... 318
      Direct3D 재질 속성 ... 320
        분산 색상(Diffuse Color) ... 320
        주변 색상(Ambient Color) ... 321
        방사 색상(Emissive Color) ... 321
        반사 색상과 Power ... 321
      Direct3D 조명 프로그래밍하기 ... 322
        조명 속성 설정하기 ... 322
        조명 속성 얻기 ... 323
        조명 활성화/비활성 하기 ... 325
      Direct3D 재질 프로그래밍하기 ... 325
        현재 재질 설정하기 ... 325
        현재 재질 얻기 ... 325
      이 장의 요약 ... 327
      샘플 프로그램들에 대해 ... 328
      연습문제 ... 328
   8장 텍스쳐링 기초
      기본적인 텍스쳐 개념들 ... 330
        텍스쳐는 단지 서피스(surface)이다. ... 330
        텍스쳐 관리(Texture Management) ... 331
        텍스쳐링시에 알아야 기법 ... 331
        정점과 텍스쳐 연결하기 ... 332
        랩(Wrap) 또는 랩을 하지 않는 것? ... 334
        텍스쳐 필터링 모드 ... 335
        텍스쳐 주소 모드 ... 340
        투명 텍스쳐 ... 344
        알파 블렌딩을 통한 투명 텍스쳐 ... 345
        알파 테스팅을 통한 투명 텍스쳐 ... 345
        Direct3D에서 텍스쳐와 재질을 혼합하는 방법 ... 346
      텍스쳐 프로그래밍 기초 ... 346
        기본적인 디바이스 텍스쳐 능력 결정하기 ... 347
        필터링과 주소지정모드 랩모드 설정하기 ... 351
        텍스쳐 생성 명령어 ... 352
        텍스쳐 선택하기 ... 361
        정점과 텍스쳐가 만났을 때 ... 362
      이 장의 요약 ... 362
      샘플 프로그램에 대해 ... 363
      연습문제 ... 363
   9장 고급 텍스쳐링
      멀티 텍스쳐 블렌딩(Multiple Texture Blending) ... 366
        텍스쳐링 용어표 안내 ... 367
        텍스쳐 스테이지(Texture Stage) ... 368
        텍스쳐 스테이지 프로그래밍 ... 373
      라이트 맵(Light Mapping) ... 376
        라이트 맵은 무엇이며 왜 그것에 관심을 가져야 하는가? ... 376
        라이트 맵 프로그래밍하기 ... 377
      환경 맵(Environment Mapping) ... 379
        환경맵은 무엇이며 왜 그것에 관심을 가져야 하는가? ... 379
        구형 환경 맵 ... 380
        입방체 환경 맵 ... 381
      멀티 텍스쳐의 다른 사용 ... 382
        글로우 매핑(Glow Mapping) ... 382
        디테일 매핑(Detail Mapping) ... 382
        색 포화(Color Saturation) ... 382
      효과 사용하기 ... 383
        효과 스크립트는 무엇이며 왜 관심을 가져야 하는가? ... 383
        효과를 사용하는 과정 ... 384
        효과 파일 생성하기 ... 386
        효과 요약 ... 387
      이 장의 요약 ... 388
      샘플 프로그램들에 대해 ... 388
      연습문제 ... 388
   10장 정점쉐이더와 픽셀 쉐이더
      왜 쉐이더인가? ... 390
      정점 쉐이더 ... 391
        정점 쉐이더를 사용해서 만들 수 있는 효과 ... 393
        디바이스가 정점 쉐이더를 지원하는지 알아보기 ... 393
        정점쉐이더에서 입력 지정하기 ... 394
        정점 쉐이더 어셈블리 언어 ... 399
        프로그램에서 정점 쉐이더 생산하기 ... 406
        쉐이더를 사용해서 렌더링하기 ... 407
        상수 레지스터를 사용해서 쉐이더에 데이터 건네주기 ... 408
        간단한 정점 쉐이더 예제 ... 409
        복잡한 정점 쉐이더 예제 ... 411
        정점 쉐이더 요약 ... 414
      픽셀 쉐이더 ... 414
        픽셀 쉐이더를 사용해서 만들 수 있는 효과들 ... 414
        픽셀 쉐이더 어셈블리 언어 ... 414
        픽셀 쉐이더 수식자 ... 419
        프로그램에서 픽셀 쉐이더 생성해서 사용하기 ... 420
        단순한 픽셀 쉐이더 예제 ... 421
        픽셀 쉐이더 요약 ... 422
      이 장의 요약 ... 422
      샘플 프로그램들에 대해 ... 423
      연습문제 ... 423
Part 2. 2D 효과들
   11장 불
      이것은 어떻게 작동하는가? ... 429
      코드의 작성 ... 430
        불 텍스쳐의 생성 ... 431
        불 처리하기 ... 435
        텍스쳐에 불 저장하기 ... 436
        불 텍스쳐가 뷰포트를 채우도록 한다 ... 441
        코드 요약 ... 448
      불 효과의 변경 ... 448
        냉각 배열들(cooling arrays) ... 448
        연료값(fuel) ... 449
        색상 ... 450
      불 효과의 이용 ... 450
        불 환경맵핑 ... 451
        불 멀티텍스쳐링 ... 451
      불 효과를 최적화하기 ... 451
        가능한 가장 작은 크기의 텍스쳐를 사용하라. ... 452
        팔레트 텍스쳐의 사용 ... 452
      이 장의 요약 ... 453
      샘플 프로그램들에 대해 ... 453
      연습문제 ... 454
   12장 2D 물
      어떻게 작동하는가? ... 456
        물 배열들 ... 457
        레이 트레이싱을 사용한 현실적인 물 ... 460
        파동의 생성 ... 468
        더 큰 물결 만들기 ... 469
        물 효과 요약 ... 469
      코드의 작성 ... 470
        속도를 증가시키자. - 변위자 검색 테이블을 만들자. ... 470
        이미지와 물 텍스쳐 생성하기 ... 471
        물 배열의 처리 ... 472
        물을 애니메이트하기 ... 473
        목적 텍스쳐에 소스 텍스쳐를 랜더링하기 ... 474
        코드 요약 ... 477
      물 효과 변경하기 ... 477
        물결 속도 ... 477
        물결 수명 ... 478
        물의 흐름 ... 479
        물의 깊이 ... 480
        더 나은 블렌딩 함수 ... 480
        물을 렌더링 하는 다른 방법들 ... 481
      물 효과의 용도들 ... 482
        비 ... 482
        물방울을 떨어뜨리는 마우스 커서 ... 482
        평행 물결 ... 483
        보트가 지나간 자국 ... 483
      물 효과를 최적화하기 ... 484
        화면에 보여주지 않은 것을 계산하지 말라. ... 484
        물배열의 크기를 줄인다 ... 484
        멀티 쓰레드 ... 485
      이 장의 요약 ... 485
      샘플 프로그램에 대해서 ... 486
      연습문제 ... 486
   13장 이미지 피드백
      이것은 어떻게 작동하는가? ... 489
      코드의 작성 ... 492
        텍스쳐의 생성 ... 493
        텍스쳐에 렌더링하기 ... 494
        주요 텍스쳐를 변환해서 스크래치 텍스쳐로 복사해 넣는다 ... 498
        새로운 이미지 데이터를 스크래치 텍스쳐에 렌더링하기 ... 502
        스크래치 텍스쳐를 주요 텍스쳐에 블렌딩 하기 ... 502
      이미지 피드백의 효과 조정하기 ... 503
        피드백 변환 ... 503
        스크래치 텍스쳐의 투명도 ... 503
        이미지 피드백의 용도 ... 503
      이 장의 요약 ... 504
      샘플 프로그램에 대해서 ... 504
      연습문제 ... 504
   14장 이미지 왜곡
      이것은 어떻게 작동하는가? ... 507
      코드의 작성 ... 508
        하나의 효과를 위한 2개의 텍스쳐들 ... 509
        정점 격자의 설정 ... 511
      이미지 왜곡효과 조정하기 ... 516
        격자의 빈도 ... 517
        요동치는 효과의 정도 ... 517
        누적되는 왜곡과 그렇지 않은 왜곡 ... 517
        알파 블렌딩 ... 518
      이미지 왜곡의 용도 ... 518
      이미지 왜곡의 최적화 ... 519
      이 장의 요약 ... 519
      샘플 프로그램에 대해 ... 520
      연습문제 ... 520
   15장 구름
      어떻게 작동하는가? ... 522
        Perlin 노이즈 ... 523
        Perlin 노이즈를 레이어링(Layering) 해서 구름을 생성한다 ... 525
        더 멋진 구름 텍스쳐 만들기 ... 528
        구름 텍스쳐 애니메이트하기 ... 529
      코드의 작성 ... 529
        텍스쳐들의 생성 ... 529
        모든 것은 랜덤 숫자 생성기로부터 시작된다 ... 530
        노이즈 만들기 ... 531
        구름의 제곱 ... 535
        감산 ... 535
      구름 효과의 조정 ... 535
        블렌딩 인자들 ... 536
        색상 구름 ... 536
      구름효과의 용도 ... 537
        점액질, 용암, 플라즈마 ... 537
        동적으로 생성된 지형 ... 537
      구름 효과의 최적화 ... 538
        더 작은 수의 옥타브(층)를 사용한다. ... 538
        더 작은 텍스쳐의 사용 ... 538
        텍스쳐에 너무 자주 lock을 걸지 말라 ... 539
        Begin/Scene 호출 횟수를 최소화하라. ... 539
      이 장의 요약 ... 540
      샘플 프로그램에 대해서 ... 540
      연습문제 ... 540
   16장 블러 그리고 다른 형태의 이미지 조작
      이것은 어떻게 작동하는가? ... 542
        용어에 대한 설명 ... 542
        커널이란 무엇인가? ... 543
        사용할 커널들 ... 544
        블러링 ... 545
        더욱 강한 블러링 ... 545
        샤프닝(sharpening) ... 545
        모서리 감지 ... 546
      코드의 작성 ... 546
      이미지 조작의 용도 ... 555
      이미지 조작을 최적화 하기 ... 556
      이 장의 요약 ... 557
      샘플 프로그램에 대해서 ... 557
      연습문제 ... 558
   17장 페이드(fades), 와이프(wipes), 다른 변화들
      간단한 장면전환 ... 560
        알파 블렌딩을 이용한 색상 페이딩 ... 561
        디졸브(크로스 페이드) ... 564
        와이프 효과(Wipes) ... 566
        타일 장면전화(Tile Transitions) ... 575
      장면전환을 위한 클래스 상속도 ... 580
      이 장의 요약 ... 581
      샘플 프로그램에 대해서 ... 582
      연습문제 ... 582
Part 3. 3D 효과들
   18장 비, 연기, 마법, 기타 등등 : 즐거운 파티클 시스템
      파티클 시스템이란 무엇인가? ... 586
      얼마나 복잡한 파티클 시스템을 만들어야 하는가? ... 589
      핵심 파티클 시스템 속성들 ... 591
      핵심적인 파티클 시스템 특성 ... 591
      기본적인 파티클 시스템을 위한 코드의 작성 ... 593
        CParticle ... 593
        CParticleEmitter ... 594
        CRecyclingArray ... 596
        파티클 시스템의 설정하기 ... 602
        점 스프라이트와 새로운 정점 포맷 ... 603
        파티클 랜더링하기 ... 604
        파티클을 갱신 ... 611
        기본적인 파티클 시스템 코드 요약 ... 614
      파티클 시스템 에디터 만들기 ... 615
        친도구(chindogu)와 '왜 에디터를 만드는가?'하는 질문 ... 615
        형식은 기능을 따른다 ... 616
        맵 생성하기 ... 617
        GUI 나타내기 ... 619
        에디터 요약 ... 628
      이 장의 요약 ... 629
      샘플 프로그램에 대해 ... 629
      연습문제 ... 632
   19장 진보적인 파티클 시스템
      개선된 파티클 시스템 만들기 ... 634
        현재의 시스템에 '유연성'을 첨가한다. ... 635
        이벤트(Events) ... 636
        이벤트 시퀀스(Sequences) ... 637
        GUI야, 잘가∼ ... 638
        간단한 스크립트 언어의 탄생 ... 638
        속성분류하기 ... 640
        무작위적인 요소 ... 640
        설계 : BNF 문법 ... 641
        이벤트들 ... 646
        페이드(Fades) 처리, Final 키워드 ... 647
        초보적인 반복문 : EventTimer 속성 ... 648
        속성 파일 로더(Loader)를 작성하는 첫 번째 단계 ... 649
        실제 로딩 코드의 시작 ... 654
        파티클 시스템 블록 처리 ... 656
        로딩한 것 사용하기 ... 666
        새로운 이벤트기반의 갱신함수 ... 666
        스크립트 작성이 가능한 파티클 시스템의 요약 ... 670
      스크립트 가능한 파티클 시스템의 용도 ... 671
        눈 ... 671
        마법주문 ... 673
        제트기류와 로켓들 ... 675
        요정들 ... 676
        반딧불, 다른 스크립트들 ... 677
      스크립트 가능한 파티클 시스템을 최적화 하기 ... 677
      다른 멋진 개선점들 ... 678
      이 장의 요약 ... 679
      샘플 프로그램에 대해서 ... 679
      연습문제 ... 680
   20장 폭발
      간단한 예제로 시작 : 폭발 스프라이트들 ... 682
        폭발 텍스쳐들의 생성 ... 683
        스프라이트와 애니메이션 클래스들의 생성 ... 685
        빌보딩(Billboarding) ... 693
        폭발효과의 렌더링 ... 694
      폭발효과 뭉치 ... 696
      파티클 시스템 코드 안에 첨가하기 ... 698
      쇼크웨이브(shockwave, 충격파) 추가하기 ... 706
        쇼크웨이브 텍스쳐 생성 ... 707
        정점과 텍스쳐 좌표의 설정 ... 707
        쇼크웨이브 랜더링 ... 711
        쇼크웨이브를 점점 사라지게 하기 ... 712
      이 장의 요약 ... 713
      샘플 프로그램에 대해서 ... 714
      연습문제 ... 719
   21장 총과 발사체(projectile)들
      발사 범위 프레임워크 ... 722
        총의 기저 클래스 ... 722
        무기의 교체 ... 723
        총 모델을 위치시키고 렌더링 하기 ... 727
        총의 발사 ... 729
      머신건 ... 730
        총구 섬광 스프라이트의 로딩 ... 731
        머신건의 발사 ... 732
        총구섬광 그리기 ... 733
        총포의 반동(Recoil) ... 734
      플라즈마 캐논 ... 735
        총알과 총알 배열 ... 736
        총알을 갱신하고 렌더링하기 ... 738
        총알의 발사 ... 739
        플라즈마 캐논에 대한 여담과 요약 ... 740
      볼트 무기 ... 741
        CLaserGun 클래스 ... 742
        레이저의 발사 ... 743
        레이저 그리기 ... 744
        파티클 시스템을 통합시킴 ... 746
      이 장의 요약 ... 747
      샘플 프로그램에 대해서 ... 747
      연습문제 ... 748
   22장 렌즈 플레어(lens flares)
      렌즈플레어란 무엇인가? ... 750
      개념들 ... 751
        플레어 무늬들 ... 751
        태양과 플레어 강도가 없는 플레어 ... 753
      렌즈 플레어 객체 ... 755
      2D에서 렌즈 플레어 렌더링하기 ... 759
        강도 계산하기 ... 759
        삼각형의 위치를 계산 ... 761
        삼각형의 렌더링 ... 763
      렌즈 플레어를 3D에서 렌더링하기 ... 765
      렌즈플레어를 그려야 할지 말아야 할지를 결정하기 ... 768
        빛의 시작점과 방향 계산 ... 770
        빛/삼각형 교차 테스트의 수행 ... 771
        코드 요약 ... 773
      효과 : 그저 렌즈 플레어만 그리는 것 보다 더 멋진 것 ... 774
      이 장의 요약 ... 774
      샘플 프로그램에 대해서 ... 775
      연습문제 ... 775
   23장 3D 물
      개
닫기