76
2004. 02. 22 ( 멀멀멀멀멀 멀 멀멀 멀멀멀멀멀 멀멀 ) 멀멀 멀멀멀멀멀 I 제 9, 10 제 Direct3D 제제제제

게임 프로그래밍 I

  • Upload
    alyssa

  • View
    248

  • Download
    0

Embed Size (px)

DESCRIPTION

게임 프로그래밍 I. 제 9, 10 주 Direct3D 기본개념. Direct3D Architecture. Win32 Application. Direct3D API. GDI. Hal Device. Device Driver Interface (DDI). Graphics Hardware. Direct3D. 3D 가속을 이용해 3D 를 렌더링할 수 있게 해주는 low-leve 의 그래픽 API 윈도우 응용프로그램과 비디오 카드와의 통신을 가능하게 하는 인터페이스와 함수들의 집합 - PowerPoint PPT Presentation

Citation preview

Page 1: 게임 프로그래밍  I

                             

                             

2004. 02. 22

( 멀티미디어 및 게임 소프트웨어 트랙 )

게임 프로그래밍 I제 9, 10 주 Direct3D 기본개념

Page 2: 게임 프로그래밍  I

Direct3D 기본개념 2

Direct3D ArchitectureWin32 Application

GDI

Direct3D API

Device Driver Interface (DDI)

Hal Device

Graphics Hardware

Page 3: 게임 프로그래밍  I

Direct3D 기본개념 3

Direct3D 3D 가속을 이용해 3D 를 렌더링할 수 있게 해주는 low-l

eve 의 그래픽 API 윈도우 응용프로그램과 비디오 카드와의 통신을

가능하게 하는 인터페이스와 함수들의 집합 기본적인 2D 그래픽 함수 지원 모든 raster 그래픽은 프로그래머가 제작 하드웨어와의 통신을 위한 trasparent layer 제공 파일 입출력은 지원하지 않음 D3DX – 확장 기능 지원

수학 , 애니메이션 , 모델 , 텍스쳐 등을 쉽게 구현 가능

Page 4: 게임 프로그래밍  I

Direct3D 기본개념 4

Direct3D ( 계속 ) DirectX 2.0 에서 처음 등장 DirectX 7.0

하드웨어 가속 변환과 조명 지원 immediate 모드와 retained 모드 중에서 immediate 모드에

집중 DirectX 8.0

Direct Graphics 라는 이름으로 DirectDraw 와 통합 DirectDraw 를 이용하지 않고 Direct3D 만으로 초기화 shader 지원

DirectX 9.0 shader 의 강화 – high-level shader 언어

Page 5: 게임 프로그래밍  I

Direct3D 기본개념 5

Direct3D 개발환경 Header File

d3d9.h dxerr9.h

Library File d3d9.lib d3dx9.lib

DLL File d3d9.dll

Page 6: 게임 프로그래밍  I

Direct3D 기본개념 6

Direct3D Surface 2D 이미지를 surface 로 표현 IDirect3DSurface9 인터페이스 사용 lock, unlock 기능 지원 이전 버전에 비해 member 함수의 수를 줄임 Primary Surface, Back Surface, Offscreen Surface 관련 구조체

D3DSURFACE_DESC

Page 7: 게임 프로그래밍  I

Direct3D 기본개념 7

IDirect3DSurface9 인터페이스 GetContainer

부모 텍스쳐의 포인터를 얻는다 GetDesc

D3DSURFACE_DESC 구조체를 얻는다 LockRect

surface 를 lock D3DLOCKED_RECT 구조체를 얻는다

UnlockRect lock 된 surface 를 해제

GetDC surface 에 대한 device context 를 얻는다

ReleaseDC device context 에 대한 핸들을 윈도우에 돌려준다

Page 8: 게임 프로그래밍  I

Direct3D 기본개념 8

Surface 동작 Blit 기능은 지원하지 않음 D3DX 라이브러리에서 Surface 복사기능

지원D3DXLoadSurfaceFromSurface

Page 9: 게임 프로그래밍  I

Direct3D 기본개념 9

D3DXLoadSurfaceFromSurface HRESULT WINAPI D3DXLoadSurfaceFromSurface(

LPDIRECT3DSURFACE9 pDestSurface, CONST PALETTEENTRY *pDestPalette, CONST RECT *pDestRect, LPDIRECT3DSURFACE9 pSrcSurface, CONST PALETTEENTRY *pSrcPalette, CONST RECT *pSrcRect, DWORD Filter, D3DCOLOR ColorKey

);

Page 10: 게임 프로그래밍  I

Direct3D 기본개념 10

D3DXLoadSurfaceFromSurface : 인자 LPDIRECT3DSURFACE9 pDestSurface

대상 Surace 의 포인터 CONST PALETTEENTRY *pDestPalette

대상 Surface 의 팔레트 포인터 , 대부분 NULL CONST RECT *pDestRect

대상 Surface 내의 사각형 좌표 LPDIRECT3DSURFACE9 pSrcSurface

원본 Surface 의 포인터 CONST PALETTEENTRY *pSrcPalette

원본 Surace 의 팔레트 포인터 , 대부분 NULL CONST RECT *pSrcRect

원본 Surface 내의 사각형 좌표 DWORD Filter

윈본과 대상이 일치하지 않는 경우 이미지 복사 복사 방식 D3DCOLOR ColorKey

Colorkey

Page 11: 게임 프로그래밍  I

Direct3D 기본개념 11

D3DXLoadSurfaceFromSurface : 결과 성공

D3D_OK 에러

D3DERR_INVALIDCALL D3DXERR_INVALIDDATA

Page 12: 게임 프로그래밍  I

Direct3D 기본개념 12

Surface 내용 수정HRESULT IDirect3DSurface9::LockRect(

D3DLOCKED_RECT *pLockedRect, const RECT *pRect, DWORD Flags

);

Page 13: 게임 프로그래밍  I

Direct3D 기본개념 13

LockRect : 인자

D3DLOCKED_RECT *pLockedRect Lock 된 Surace 에 대한 정보

const RECT *pRect lock 하고자 하는 크기의 사각형 좌표

DWORD Flags lock 하는 방법에 관한 flag

Page 14: 게임 프로그래밍  I

Direct3D 기본개념 14

LockRect : 결과

성공D3D_OK

에러D3DERR_INVALIDCALL D3DXERR_WASSTILLDRAWING

Page 15: 게임 프로그래밍  I

Direct3D 기본개념 15

UnlockRect

HRESULT IDirect3DSurface9::UnlockRect();

Page 16: 게임 프로그래밍  I

Direct3D 기본개념 16

UnlockRect : 결과

성공D3D_OK

에러D3DERR_INVALIDCALL

Page 17: 게임 프로그래밍  I

Direct3D 기본개념 17

Direct3D Surface 생성HRESULT IDirect3DDevice9::

CreateOffscreenPlainSurface(UINT Width, UINT Height, D3DFORMAT Format, DWORD Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle

);

Page 18: 게임 프로그래밍  I

Direct3D 기본개념 18

CreateOffscreenPlainSurface : 인자 UINT Width

Suface 의 넓이 UINT Height

Surface 의 높이 D3DFORMAT Format

Surface 의 형식 DWORD Pool

사용할 surface pool 의 형식 IDirect3DSurface9** ppSurface

생성되는 Surface 의 포인터 HANDLE* pSharedHandle

예약 , NULL 로 지정

Page 19: 게임 프로그래밍  I

Direct3D 기본개념 19

CreateOffscreenPlainSurface : 결과 성공

D3D_OK 에러

D3DERR_INVALIDCALL

Page 20: 게임 프로그래밍  I

Direct3D 기본개념 20

CreateOffscreenPlainSurface : 예제// 새로운 이미지 surface 생성

HRESULT hr;LPDIRECT3DDEVICE9 pDevice;LPDIRECT3DSURFACE9 pSurface = 0;

hr = pDevice->CreateOffscreenPlainSurface(640, 480, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED,&pSurface, NULL);

// 실행…// surface 해제pSurface->Release();pSurface = 0;

Page 21: 게임 프로그래밍  I

Direct3D 기본개념 21

Direct3D 초기화1. Direct3D 객체 생성2. present 매개변수 설정3. Direct3D 장치 생성

Page 22: 게임 프로그래밍  I

Direct3D 기본개념 22

Direct3D 객체 생성IDirect3D9 *WINAPI Direct3DCreate9(

UINT SDKVersion );

UINT SDKVersion 사용하고 있는 Direct3D 버전 D3D_SDK_VERSION 사용

Page 23: 게임 프로그래밍  I

Direct3D 기본개념 23

Direct3DCreate9 : 예제// Direct3D 객체 생성LPDIRECT3D9 pD3D;

pD3D = Direct3DCreate9(D3D_SDK_VERSION);

Page 24: 게임 프로그래밍  I

Direct3D 기본개념 24

present 매개변수 설정 present

back 버퍼의 내용을 primary surface 로 이동하는 것을 의미

back 버퍼 작업을 마친후에 primary surfce 로 prsent

D3DPRESENT_PARAMETERS

Page 25: 게임 프로그래밍  I

Direct3D 기본개념 25

D3DPRESENT_PARAMETERStypedef struct _D3DPRESENT_PARAMETERS_ {

UINT BackBufferWidth, BackBufferHeight;D3DFORMAT BackBufferFormat; UINT BackBufferCount; D3DMULTISAMPLE_TYPE MultiSampleType; DWORD MultiSampleQuality; D3DSWAPEFFECT SwapEffect; HWND hDeviceWindow; BOOL Windowed; BOOL EnableAutoDepthStencil; D3DFORMAT AutoDepthStencilFormat; DWORD Flags; UINT FullScreen_RefreshRateInHz; UINT PresentationInterval;

} D3DPRESENT_PARAMETERS;

Page 26: 게임 프로그래밍  I

Direct3D 기본개념 26

D3DPRESENT_PARAMETERS : 변수 UINT BackBufferWidth, BackBufferHeight

back 버퍼 넓이 , 높이 D3DFORMAT BackBufferFormat

back 버퍼 형식 지정 32 비트 : D3DFMT_A8R8G8B8 16 비트 : D3DFMT_R5G6R5

UINT BackBufferCount primary surface 와 연결되는 back 버퍼 수

D3DMULTISAMPLE_TYPE MultiSampleType 멀티샘플링의 유형 지정 D3DMULTISAMPLE_NONE 으로 설정

DWORD MultiSampleQuality 0 과 IDirect3D9::CheckDeviceMultiSampleType 의 결과 사이의 값

D3DSWAPEFFECT SwapEffect back 버퍼를 primary surface 에 present 하는 방식 일반적으로 D3DSWAPEFFECT_COPY

Page 27: 게임 프로그래밍  I

Direct3D 기본개념 27

D3DPRESENT_PARAMETERS : 변수 HWND hDeviceWindow

렌더링 대상으로 사용하는 윈도우의 핸들 BOOL Windowed

전체화면과 윈도우 모드 선택 BOOL EnableAutoDepthStencil

깊이 버퍼나 스텐실 버퍼를 관리할지 결정 일반적으로 TRUE

D3DFORMAT AutoDepthStencilFormat 갚이 버퍼 형식 지정 일반적으로 D3DFMT_16 사용

DWORD Flags D3DPRESENTFLAG_LOCKABLEBACKBUFFER 만 사용 가능 성능 개선을 위해 0 사용

UINT FullScreen_RefreshRateInHz refresh 속도 최적속도 : D3DPRESENT_RATE_DEFAULT

UINT PresentationInterval present 단계 설정 빠른 처리 : D3DPRESENT_INTERVAL_IMMEDIATE

Page 28: 게임 프로그래밍  I

Direct3D 기본개념 28

D3DPRESENT_PARAMETERS : 예제// 전체화면 , width x height, bpp 비트 생성 구조체D3DPRESENT_PARAMETERS d3dpp;zeromemory(&d3dpp, sizeof(d3dpp));

// back 버퍼의 넓이와 높이d3dpp.BackBufferWidth = width;d3dpp.BackBufferHeight = height;

// 깊이if (bpp == 16)

d3dpp.BackBufferFormat = D3DFMT_R5G6B5;else if (bpp == 24)

d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;else if (bpp == 32)

d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;

// primary 버퍼와와 연결할 back 버퍼는 1 개d3dpp.BackBufferCount = 1;

// 멀티샘플링 없음d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;// 멀티샘플링 수준d3dpp.MultiSampleQuality = 0;

Page 29: 게임 프로그래밍  I

Direct3D 기본개념 29

D3DPRESENT_PARAMETERS : 예제// back 버퍼를 primary surface 로 복사d3dpp.SwapEffect = D3DSWAPEFFECT_COPY;

// 랜더링해 넣을 윈도우 핸들d3dpp.hDeviceWindow = hWnd;

// 전체화면d3dpp.Windowed = FALSE;

// 깊이버퍼 관리d3dpp.EnableAutoDepthStencil = TRUE;

// 깊이버퍼의 깊이를 16 비트로 설정d3dpp.AutoDepthStencilFormat = F3DFMT_D16;

// 기본 refresh rate 사용d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;

// 가능한 빠른화면 업데이트d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

//back 버퍼의 lock 허용d2dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER

Page 30: 게임 프로그래밍  I

Direct3D 기본개념 30

Direct3D 장치 생성HRESULT IDirect3D9::CreateDevice(

UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DDevice9** ppReturnedDeviceInterface

);

Page 31: 게임 프로그래밍  I

Direct3D 기본개념 31

CreateDevice : 인자 UINT Adapter

사용하려는 그래픽 카드 기본 디스플레이는 0

D3DDEVTYPE DeviceType 생성하려는 장치 유형 지정 하드웨어가속장치 : D3DDEVTYPE_HAL 소프트웨어장치 : D3DDEVTYPE_REF

HWND hFocusWindow 현재 윈도우 핸들

DWORD BehaviorFlags 장치 동작을 정의

D3DPRESENT_PARAMETERS *pPresentationParameters D3DPRESENT_PARAMETERS 의 포인터

IDirect3DDevice9** ppReturnedDeviceInterface 결과를 돌려받을 포인터

Page 32: 게임 프로그래밍  I

Direct3D 기본개념 32

CreateDevice : 인자

성공D3D_OK

에러D3DERR_INVALIDCALL D3DERR_NOTAVAILABLE D3DERR_OUTOFVIDEOMEMORY

Page 33: 게임 프로그래밍  I

Direct3D 기본개념 33

CreateDevice : 예제

// 하드웨어가속을 사용하는 장치 생성LPDIRECT3D9 pD3D;HRESULT hr;

hr = pD3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp, pDevice);

Page 34: 게임 프로그래밍  I

Direct3D 기본개념 34

DirectDraw 와의 비교

Clipper 생성 필요없음협력 수준 설정 필요없음 화면 해상도 설정 필요없음 CreateDevice() 가 모든 일을 함

Page 35: 게임 프로그래밍  I

Direct3D 기본개념 35

기본 Direct3D 구조체 D3DCOLOR D3DCOLORVALUE D3DVECTOR D3DMATRIX

Page 36: 게임 프로그래밍  I

Direct3D 기본개념 36

D3DCOLOR typedef DWORD D3DCOLOR;

D3DCOLOR 변환 매크로// r, g, b 쌍을 DWORD 로 변환D3DCOLOR_XRGB(r, g, b) \

((D3DCOLOR)(((&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8) |((b)&0xff)))

// r, g, b, a 쌍을 DWORD 로 변환D3DCOLOR_ARGB(r, g, b) \

((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8) |((b)&0xff)))

Page 37: 게임 프로그래밍  I

Direct3D 기본개념 37

D3DCOLORVALUE 부동 소수점 색상 값을 다룬다

typedef struct _D3DCOLORVALUE { float r; float g; float b; float a;

} D3DCOLORVALUE;

Page 38: 게임 프로그래밍  I

Direct3D 기본개념 38

D3DVECTOR 3D 에서 한점을 정의

typedef struct _D3DVECTOR { float x, y, z;

} D3DVECTOR;

Page 39: 게임 프로그래밍  I

Direct3D 기본개념 39

D3DMATRIX 4x4 행렬 정의

typedef struct _D3DMATRIX { union {

struct { float _11, _12, _13, _14; float _21, _22, _23, _24; float _31, _32, _33, _34; float _41, _42, _43, _44;

}; float m[4][4];

}; } D3DMATRIX;

Page 40: 게임 프로그래밍  I

Direct3D 기본개념 40

Vertex 버퍼 DirectX 6.0 부터 포함 Vertex 들로 채워진 버퍼 Surface 를 만드는 vertex data 를 담는

버퍼 lock, unlock 정적 기하 도형들의 렌더링을 가속화 data 의 high-bandwidth stream 제공

Page 41: 게임 프로그래밍  I

Direct3D 기본개념 41

Vertex 버퍼 생성HRESULT CreateVertexBuffer(

UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle

);

Page 42: 게임 프로그래밍  I

Direct3D 기본개념 42

CreateVertexBuffer : 인자 UINT Length

버퍼의 크기 DWORD Usage

버퍼의 이용을 지정하는 flag 보통 D3DUSAGE_WRITEONLY

DWORD FVF FVF(Flexible Vertex Format) 을 사용하지 않을 경우 0

D3DPOOL Pool vertex 버퍼가 차지한 메모리 pool

IDirect3DVertexBuffer9** ppVertexBuffer 생성되는 vertex 버퍼의 포인터

HANDLE* pSharedHandle 사용되지 않음 , NULL 로 지정

Page 43: 게임 프로그래밍  I

Direct3D 기본개념 43

CreateVertexBuffer : 결과

성공D3D_OK

에러D3DERR_INVALIDCALL D3DERR_OUTOFVIDEOMEMORYE_OUTOFMEMORY

Page 44: 게임 프로그래밍  I

Direct3D 기본개념 44

CreateVertexBuffer : 예제

LPDIRECT3DVERTEXBUFFER9 pVB;

CUSTOMVERTEX vertices[] = {

{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color { 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, }, { 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },

};

pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &pVB )

Page 45: 게임 프로그래밍  I

Direct3D 기본개념 45

LockHRESULT IDirect3DVertexBuffer9::Lock(

UINT OffsetToLock, UINT SizeToLock, VOID **ppbData, DWORD Flags

);

Page 46: 게임 프로그래밍  I

Direct3D 기본개념 46

Lock : 인자 UINT OffsetToLock

lock 을 할 버퍼 내부의 offset UINT SizeToLock

lock 을 할 버퍼의 크기 VOID **ppbData

lock 을 할 버퍼정보를 포함하는 포인터 DWORD Flags

lock 을 할 때의 flag

Page 47: 게임 프로그래밍  I

Direct3D 기본개념 47

Lock : 결과 성공

D3D_OK 에러

D3DERR_INVALIDCALL

Page 48: 게임 프로그래밍  I

Direct3D 기본개념 48

UnlockHRESULT IDirect3DVertexBuffer9::Unlock(VOI

D);

Page 49: 게임 프로그래밍  I

Direct3D 기본개념 49

Unlock : 결과 성공

D3D_OK 에러

D3DERR_INVALIDCALL

Page 50: 게임 프로그래밍  I

Direct3D 기본개념 50

렌더링

1. 장면을 초기화2. 렌더링

시작 렌더링 스트림에 부착 FVF 설정 그리기 끝

3. Present4. 종료

Page 51: 게임 프로그래밍  I

Direct3D 기본개념 51

장면의 초기화HRESULT IDirect3DDevice9::Clear(

DWORD Count, const D3DRECT *pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil

);

Page 52: 게임 프로그래밍  I

Direct3D 기본개념 52

Clear : 인자 DWORD Count

pRects 에 있는 사각형의 수 const D3DRECT *pRects

초기화할 사각형을 가리키는 포인터 DWORD Flags

초기화할 surface 를 지정하는 flag D3DCLEAR_STENCIL, D3DCLEAR_TARGET, D3DCLEAR_ZBUFFER

D3DCOLOR Color 32 비트 ARGB 값

float Z 깊이 버퍼에 저장할 새 Z 값

DWORD Stencil 각 스텐실 버퍼에 저장할 정수값

Page 53: 게임 프로그래밍  I

Direct3D 기본개념 53

Clear : 결과 성공

D3D_OK 에러

D3DERR_INVALIDCALL

Page 54: 게임 프로그래밍  I

Direct3D 기본개념 54

Clear : 예제// back 버퍼를 청색으로 초기화 pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,

D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

Page 55: 게임 프로그래밍  I

Direct3D 기본개념 55

렌더링 : 시작

HRESULT  IDirect3DDevice9::BeginScene(VOID);

Page 56: 게임 프로그래밍  I

Direct3D 기본개념 56

렌더링 스트림에 부착

HRESULT IDirect3DDevice9::SetStreamSource(UINT StreamNumber, IDirect3DVertexBuffer9 *pStreamData, UINT OffsetInBytes, UINT Stride

);

Page 57: 게임 프로그래밍  I

Direct3D 기본개념 57

SetStreamSource : 인자 UINT StreamNumber

vertex 버퍼에 붙이는 번호 보통 0 으로 설정

IDirect3DVertexBuffer9 *pStreamData 렌더링스트림에 붙이고자 하는 vertex 버퍼의 포인터

UINT OffsetInBytes vertex 버페에서 시작될 스트림의 offset 값 보통 0 으로 설정

UINT Stride 버퍼내에서 vertex간의 거리

Page 58: 게임 프로그래밍  I

Direct3D 기본개념 58

SetStreamSource : 결과

성공D3D_OK

에러D3DERR_INVALIDCALL

Page 59: 게임 프로그래밍  I

Direct3D 기본개념 59

SetStreamSource : 예제

LPDIRECT3DVERTEXBUFFER9 pVB;

// vertex 버퍼 생성...

pd3dDevice->SetStreamSource( 0, pVB, 0, sizeof(CUSTOMVERTEX) );

Page 60: 게임 프로그래밍  I

Direct3D 기본개념 60

FVF 설정HRESULT SetFVF(

DWORD FVF );

pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

Page 61: 게임 프로그래밍  I

Direct3D 기본개념 61

그리기HRESULT DrawPrimitive(

D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount

);

Page 62: 게임 프로그래밍  I

Direct3D 기본개념 62

DrawPrimitive : 인자

D3DPRIMITIVETYPE PrimitiveType primitive 종류

UINT StartVertex 첫번째 vertex 의 index 보통 0 을 설정

UINT PrimitiveCount 렌더링할 primitive 의 수 3 개의 vertex 이면 하나의 면이므로 1 이 설정

Page 63: 게임 프로그래밍  I

Direct3D 기본개념 63

Primitive 의 종류 D3DPT_POINTLIST

점의 list D3DPT_LINELIST

선의 list D3DPT_LINESTRIP

연속되는 선의 strip D3DPT_TRIANGLELIST

삼각형 list D3DPT_TRIANGLESTRIP

삼각형 strip D3DPT_TRIANGLEFAN

삼각형 부채꼴

Page 64: 게임 프로그래밍  I

Direct3D 기본개념 64

DrawPrimitive : 결과

성공D3D_OK

에러D3DERR_INVALIDCALL

Page 65: 게임 프로그래밍  I

Direct3D 기본개념 65

DrawPrimitive : 예제

// 삼각형을 그린다 .

pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

Page 66: 게임 프로그래밍  I

Direct3D 기본개념 66

렌더링 : 끝

HRESULT IDirect3DDevice9:: EndScene(VOID);

Page 67: 게임 프로그래밍  I

Direct3D 기본개념 67

PresentHRESULT IDirect3DDevice9::Present(

CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion

);

Page 68: 게임 프로그래밍  I

Direct3D 기본개념 68

Present : 인자 CONST RECT *pSourceRect

원본 사각형을 포함하는 RECT 에 대한 포인터 NULL 로 지정

CONST RECT *pDestRect, 대상 사각형을 포함하는 RECT 에 대한 포인터

HWND hDestWindowOverride, 대상 윈도우의 포인터

CONST RGNDATA *pDirtyRegion NULL 로 지정

Page 69: 게임 프로그래밍  I

Direct3D 기본개념 69

Present : 결과 성공

D3D_OK 에러

D3DERR_DRIVERINTERNALERROR D3DERR_DEVICELOST D3DERR_INVALIDCALL

Page 70: 게임 프로그래밍  I

Direct3D 기본개념 70

Present : 예제pd3dDevice->Present( NULL, NULL, NULL, NULL );

Page 71: 게임 프로그래밍  I

Direct3D 기본개념 71

종료 Release

pd3dDevice->Release(); pD3D->Release();

Page 72: 게임 프로그래밍  I

Direct3D 기본개념 72

변환 행렬HRESULT GetTransform(

D3DTRANSFORMSTATETYPE State, D3DMATRIX *pMatrix

);

HRESULT SetTransform(D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX *pMatrix

);

Page 73: 게임 프로그래밍  I

Direct3D 기본개념 73

GetTransform, SetTransform :인자 D3DTRANSFORMSTATETYPE State

변환할 대상 D3DTS_WORLD : world 변환 D3DTS_VIEW : view 변환 D3DTS_PROJECTION : 투영 변환 D3DTS_TEXTURE0 ~ D3DTS_TEXTURE7 : 텍스쳐 변환

D3DMATRIX *pMatrix 사용할 행렬의 포인터

Page 74: 게임 프로그래밍  I

Direct3D 기본개념 74

GetTransform, SetTransform :예제// View 변환D3DXMATRIX matView; D3DXMatrixLookAtLH( &matView,

&D3DXVECTOR3( 0.0f, 3.0f,-5.0f ), &D3DXVECTOR3( 0.0f, 0.0f, 0.

0f ), &D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) );

pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

Page 75: 게임 프로그래밍  I

Direct3D 기본개념 75

Viewport

D3DVIEWPORT9typedef struct _D3DVIEWPORT9 {

DWORD X; DWORD Y; DWORD Width; DWORD Height; float MinZ; float MaxZ;

} D3DVIEWPORT9;

Page 76: 게임 프로그래밍  I

Direct3D 기본개념 76

Viewport 설정 및 가져오기

HRESULT IDirect3DDevice9::SetViewport(CONST D3DVIEWPORT9 *pViewport

);

HRESULT IDirect3DDevice9::GetViewport( D3DVIEWPORT9 *pViewport

);