Click here to load reader
View
3
Download
0
Embed Size (px)
DirectX9 프로그래밍의 기초
목 차
Di tX9 프로그래밍의 기초DirectX9 프로그래밍의 기초
DirectX 그래픽의 역사 HAL과 COM에 대한 개요HAL과 COM에 대한 개요
DirectX9에서의 그리기
Win32API 프로그래밍의 개요 Direct3D 초기화 정점/인덱스 버퍼를 이용한 그리기 D3DX 기하 물체D3DX 기하 물체 메쉬의 이용
애니메이션및 게임 실습 2
DirectX 그래픽의 역사
DirectX 2.0
1995. DirectX
Windows 드라이버 제공Windows 드라이버 제공 DirectX API + Reality Lab(RenderMorphics) + 3D-DDI(Michael Abrash)
1996. Direct3D
3D 가속 하드웨어의 향상된 그래픽 능력 사용 각 하드웨어에 대한 공통 인터페이스 지원 장치 독립적이고 추상화된 접근 가능장치 독립적이고 추상화된 접근 가능
애니메이션및 게임 실습 3
DirectX 그래픽의 역사
DirectX 6/7
즉시 모드(Immediate Mode)
저수준 API저수준 API
유지 모드(Retained Mode)
즉시 모드 기반 프레임 계층 구조 및 애니메이션 기능 제공
하드웨어 가속변환 조명 광원의 재조정 뷰포트 객체의 지원하드웨어 가속변환, 조명, 광원의 재조정, 뷰포트 객체의 지원 텍스처 사용의 용이성 제공
애니메이션및 게임 실습 4
DirectX 그래픽의 역사
DirectX 8
Direct Draw와 Direct3D의 통합
데이터의 초기화, 할당, 관리의 단순화
포인트 스프라이트
하드웨어 스프라이트 사용 가능 : 스파크, 폭발, 비
3D 텍스처
3D 볼륨을 가지는 텍스처 사용
정확한 픽셀단위 조명 효과, 포인트 광원, 스포트 광원, 대기 환경 효과 지원
유틸리티 라이브러리
벡터 및 행렬 연산, 이미지 파일 읽기 및 텍스처 생성 단순화
버텍스와 픽셀 셰이더
어셈블리를 이용한 하드웨어 제어
애니메이션및 게임 실습 5
DirectX 그래픽의 역사
DirectX 9
HLSL(High-Level Shader Language)
C 언어와 유사한 문법 NDIVIA와 공동 개발C 언어와 유사한 문법, NDIVIA와 공동 개발
Scissor Test, Line Anti-Aliasing 텍스처 좌표 자동 생성 지원 양면 구조의 스텐실 지원 다중 렌더링 지원
애니메이션및 게임 실습 6
HAL과 COM에 대한 개요
하드웨어 추상 계층(HAL)
Hardware Abstraction Layer 하드웨어와 Direct3D의 중간 매개체
애플리케이션 애플리케이션
Direct3D
GDI
HAL
디바이스 드라이버 인터페이스
GDI
디바이스 드라이버 인터페이스
그래픽 카드
애니메이션및 게임 실습 7
HAL과 COM에 대한 개요
플러그블 소프트웨어 장치
하드웨어 에뮬레이션 계층 : 하드웨어가 3D 기능을 제공하지 않는 경우
레퍼런 래 터라이저레퍼런스 래스터라이저
DirectX SDK에서만 제공 하드웨어 미지원 기능 테스트하드웨어 미지원 기능 테스트
디바이스 제어하기
애니메이션및 게임 실습 8
Win32API 프로그래밍의 개요
New Projectsj
애니메이션및 게임 실습 9
Win32API 프로그래밍의 개요
An empty projectp y p j
애니메이션및 게임 실습 10
Win32API 프로그래밍의 개요
New Files – c++ source file
애니메이션및 게임 실습 11
Win32API 프로그래밍의 개요
Project – Settings – Linkj g
d3d9.lib d3dx9.lib winmm.lib
애니메이션및 게임 실습 12
Win32API 프로그래밍의 개요
Tools – Options – Directories – Include filesp
애니메이션및 게임 실습 13
Win32API 프로그래밍의 개요
Tools – Options – Directories – Library filesp y
애니메이션및 게임 실습 14
Direct3D 초기화
예제 1
애니메이션및 게임 실습 15
용어 및 기본 함수 정리
표면(surface)
Direct3D가 주로 2D 이미지 데이터를 보관하는 데 이용하는 픽셀의 행렬
IDirect3DSurface9 인터페이스 이용IDirect3DSurface9 인터페이스 이용
LockRect : 표면 메모리로의 포인터 제공
UnlockRect : LockRect를 호출하고 표면 메모리에 대한 작업이 끝난 뒤에는 이 메서드를 호출하여 표면의 잠금 해제
GetDesc : 표면에 대한 정보를 D3DSURFACE DESC 구조체를 통해 획득GetDesc : 표면에 대한 정보를 D3DSURFACE_DESC 구조체를 통해 획득
애니메이션및 게임 실습 16
용어 및 기본 함수 정리
멀티 샘플링(Multisampling)p g
픽셀로 이미지를 표현할 때 나타나는 거친 이미지를 부드럽게 만드는 기술 안티알리아싱
D3DMULTISAMPLE_TYPE : 표면에 적용할 멀티 샘플링 레벨 지정
D3DMULTISAMPLE_NONE : 멀티 샘플링 미지정 D3DMULTISAMPLE_1_SAMPLE ~ D3DMULTISAMPLE_16_SAMPLE : 1 ~ 16 멀티 샘플링 레벨 지정
애니메이션및 게임 실습 17
용어 및 기본 함수 정리
픽셀 포맷
D3DFMT_R8G8B8 : 24bit 포맷
D3DFMT X8R8G8B8 : 32bit 포맷D3DFMT_X8R8G8B8 : 32bit 포맷
D3DFMT_A8R8G8B8 : 32bit 포맷
D3DFMT_X16B16G16R16F : 64bit 포맷
D3DFMT_A32B32G32R32F : 128bit 포맷
애니메이션및 게임 실습 18
용어 및 기본 함수 정리
메모리 풀
D3DPOOL_DEFAULT 자원의 타입과 이용 방식에 가장 적합한 자원들을 메모리에 보관하도록 Direct3D에 요청 (비디오 메모리 AGP 메모리 시스템 메모리)Direct3D에 요청, (비디오 메모리, AGP 메모리, 시스템 메모리)
D3DPOOL_MANAGED 관리 풀에 보관된 자원은 Direct3D에 의해 관리. 즉, 필요에 따라 자동으로 비 디오 메모리나 AGP 메모리로 이전, 부가적으로 자원의 백업 복사본이 시스템 메모리 내에 보관
D3DPOOL SYSTEMMEMD3DPOOL_SYSTEMMEM 시스템 메모리 내에 보관될 자원 지정
D3DPOOL_SCRATCH 시스템 메모리 내에 보관될 자원 지정 장치는 이 풀 내의 자원에 직접 접근 불가능, 그러나 자원을 두 풀 사이에 서 로 복사하는 것은 가능
애니메이션및 게임 실습 19
용어 및 기본 함수 정리
스왑 체인
Direct3D는 2, 3개의 표면을 하나의 컬렉션으로 관리 IDirect3DSwapChain9 인터페이스
스왑 체인과 플리핑 기술
표면 1 표면 2
표면 1 표면 2
전면버퍼 후면버퍼
표면 1
전면버퍼
표면 2
후면버퍼
표면 2
전면버퍼
표면 1
후면버퍼
표면 1
전면버퍼
표면 2
후면버퍼
애니메이션및 게임 실습 20
용어 및 기본 함수 정리
깊이 버퍼(Depth buffer)p
특정 픽셀의 깊이 정보 저장 해상도가 640X480이면, 깊이 버퍼의 크기도 640X480의 크기를 가짐
깊이 버퍼링 혹은 z-버퍼링에 이용
D3DFMT_D32 : 32비트 깊이 버퍼 지장 D3DFMT_D24S8 : 24비트 깊이 버퍼, 8비트 스텐실 버퍼 지정 D3DFMT_D24X8 : 24비트 깊이 버퍼 지장 D3DFMT_D24X4S4 : 24비트 깊이 버퍼, 4비트 스텐실 버퍼 지정 D3DFMT D16 : 16비트 깊이 버퍼 지정D3DFMT_D16 : 16비트 깊이 버퍼 지정
애니메이션및 게임 실습 21
Direct3D 초기화
초기화 과정
IDirect3D9 인터페이스의 포인터 획득
기본 디스플레이 어댑터(기본 그래픽 카드)의 하드웨어 버텍스 프로세싱 지원여부기본 디스플레이 어댑터(기본 그래픽 카드)의 하드웨어 버텍스 프로세싱 지원여부 확인
D3DPRESENT_PARAMETERS 구조체 인스턴스 초기화
IDirect3DDevice9 생성
애니메이션및 게임 실습 22
Direct3D 초기화
예제 1
d3dUtility.h
d3dUtility cppd3dUtility.cpp
d3dInit.cpp
애니메이션및 게임 실습 23
Direct3D 초기화
초기화 함수
HRESULT IDirect3DDevice9::Clear (
// 배열 내 사각형의 수DWORD Count, // pRects 배열 내 사각형의 수 const D3DRECT* pRects, // 소거하려는 화면 사각형의 배열 DWORD Flags, // 어떤 표면을 소거할 지 지정 D3DCOLOR Color // 렌더 대상을 소거할 색상D3DCOLOR Color, // 렌더 대상을 소거할 색상 float Z, // 깊이 버퍼 지정값 DWORD Stencil // 스텐실 버퍼 지정값
)
Flags
D3DCLEAR TARGET : 렌더 대상 표면, 보통은 후면 버퍼D3DCLEAR_TARGET 렌더 대상 표면, 보통은 후면 버퍼 D3DCLEAR_ZBUFFER : 깊이 버퍼 D3DCLEAR_STENCIL : 스텐실 버퍼
애니메이션및 게임 실습 24
정점/인덱스 버퍼를 이용한 그리기
정점(vertex) 포맷
Flexible Vertex Format (FVF)
x, y, z 좌표
변환정점변환정점