목차 일부
Part 1. 기초
1장 윈도우즈 프로그래밍 개요
이벤트 구동 프로그래밍 ... 4
여러분의 첫번째 윈도우 프로그래밍 ... 5
main()이 아닌 Winmain() ... 7
윈도우 생성의 2단계 ... 9
이벤트 핸들링(펌핀 메시지) ... 25
WindowProc 작성...
더보기
목차 전체
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 물
개
더보기 닫기