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
2004. 02. 22
( 멀티미디어 및 게임 소프트웨어 트랙 )
게임 프로그래밍 I제 9, 10 주 Direct3D 기본개념
Direct3D 기본개념 2
Direct3D ArchitectureWin32 Application
GDI
Direct3D API
Device Driver Interface (DDI)
Hal Device
Graphics Hardware
Direct3D 기본개념 3
Direct3D 3D 가속을 이용해 3D 를 렌더링할 수 있게 해주는 low-l
eve 의 그래픽 API 윈도우 응용프로그램과 비디오 카드와의 통신을
가능하게 하는 인터페이스와 함수들의 집합 기본적인 2D 그래픽 함수 지원 모든 raster 그래픽은 프로그래머가 제작 하드웨어와의 통신을 위한 trasparent layer 제공 파일 입출력은 지원하지 않음 D3DX – 확장 기능 지원
수학 , 애니메이션 , 모델 , 텍스쳐 등을 쉽게 구현 가능
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 언어
Direct3D 기본개념 5
Direct3D 개발환경 Header File
d3d9.h dxerr9.h
Library File d3d9.lib d3dx9.lib
DLL File d3d9.dll
Direct3D 기본개념 6
Direct3D Surface 2D 이미지를 surface 로 표현 IDirect3DSurface9 인터페이스 사용 lock, unlock 기능 지원 이전 버전에 비해 member 함수의 수를 줄임 Primary Surface, Back Surface, Offscreen Surface 관련 구조체
D3DSURFACE_DESC
Direct3D 기본개념 7
IDirect3DSurface9 인터페이스 GetContainer
부모 텍스쳐의 포인터를 얻는다 GetDesc
D3DSURFACE_DESC 구조체를 얻는다 LockRect
surface 를 lock D3DLOCKED_RECT 구조체를 얻는다
UnlockRect lock 된 surface 를 해제
GetDC surface 에 대한 device context 를 얻는다
ReleaseDC device context 에 대한 핸들을 윈도우에 돌려준다
Direct3D 기본개념 8
Surface 동작 Blit 기능은 지원하지 않음 D3DX 라이브러리에서 Surface 복사기능
지원D3DXLoadSurfaceFromSurface
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
);
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
Direct3D 기본개념 11
D3DXLoadSurfaceFromSurface : 결과 성공
D3D_OK 에러
D3DERR_INVALIDCALL D3DXERR_INVALIDDATA
Direct3D 기본개념 12
Surface 내용 수정HRESULT IDirect3DSurface9::LockRect(
D3DLOCKED_RECT *pLockedRect, const RECT *pRect, DWORD Flags
);
Direct3D 기본개념 13
LockRect : 인자
D3DLOCKED_RECT *pLockedRect Lock 된 Surace 에 대한 정보
const RECT *pRect lock 하고자 하는 크기의 사각형 좌표
DWORD Flags lock 하는 방법에 관한 flag
Direct3D 기본개념 14
LockRect : 결과
성공D3D_OK
에러D3DERR_INVALIDCALL D3DXERR_WASSTILLDRAWING
Direct3D 기본개념 15
UnlockRect
HRESULT IDirect3DSurface9::UnlockRect();
Direct3D 기본개념 16
UnlockRect : 결과
성공D3D_OK
에러D3DERR_INVALIDCALL
Direct3D 기본개념 17
Direct3D Surface 생성HRESULT IDirect3DDevice9::
CreateOffscreenPlainSurface(UINT Width, UINT Height, D3DFORMAT Format, DWORD Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle
);
Direct3D 기본개념 18
CreateOffscreenPlainSurface : 인자 UINT Width
Suface 의 넓이 UINT Height
Surface 의 높이 D3DFORMAT Format
Surface 의 형식 DWORD Pool
사용할 surface pool 의 형식 IDirect3DSurface9** ppSurface
생성되는 Surface 의 포인터 HANDLE* pSharedHandle
예약 , NULL 로 지정
Direct3D 기본개념 19
CreateOffscreenPlainSurface : 결과 성공
D3D_OK 에러
D3DERR_INVALIDCALL
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;
Direct3D 기본개념 21
Direct3D 초기화1. Direct3D 객체 생성2. present 매개변수 설정3. Direct3D 장치 생성
Direct3D 기본개념 22
Direct3D 객체 생성IDirect3D9 *WINAPI Direct3DCreate9(
UINT SDKVersion );
UINT SDKVersion 사용하고 있는 Direct3D 버전 D3D_SDK_VERSION 사용
Direct3D 기본개념 23
Direct3DCreate9 : 예제// Direct3D 객체 생성LPDIRECT3D9 pD3D;
pD3D = Direct3DCreate9(D3D_SDK_VERSION);
Direct3D 기본개념 24
present 매개변수 설정 present
back 버퍼의 내용을 primary surface 로 이동하는 것을 의미
back 버퍼 작업을 마친후에 primary surfce 로 prsent
D3DPRESENT_PARAMETERS
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;
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
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
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;
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
Direct3D 기본개념 30
Direct3D 장치 생성HRESULT IDirect3D9::CreateDevice(
UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DDevice9** ppReturnedDeviceInterface
);
Direct3D 기본개념 31
CreateDevice : 인자 UINT Adapter
사용하려는 그래픽 카드 기본 디스플레이는 0
D3DDEVTYPE DeviceType 생성하려는 장치 유형 지정 하드웨어가속장치 : D3DDEVTYPE_HAL 소프트웨어장치 : D3DDEVTYPE_REF
HWND hFocusWindow 현재 윈도우 핸들
DWORD BehaviorFlags 장치 동작을 정의
D3DPRESENT_PARAMETERS *pPresentationParameters D3DPRESENT_PARAMETERS 의 포인터
IDirect3DDevice9** ppReturnedDeviceInterface 결과를 돌려받을 포인터
Direct3D 기본개념 32
CreateDevice : 인자
성공D3D_OK
에러D3DERR_INVALIDCALL D3DERR_NOTAVAILABLE D3DERR_OUTOFVIDEOMEMORY
Direct3D 기본개념 33
CreateDevice : 예제
// 하드웨어가속을 사용하는 장치 생성LPDIRECT3D9 pD3D;HRESULT hr;
hr = pD3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp, pDevice);
Direct3D 기본개념 34
DirectDraw 와의 비교
Clipper 생성 필요없음협력 수준 설정 필요없음 화면 해상도 설정 필요없음 CreateDevice() 가 모든 일을 함
Direct3D 기본개념 35
기본 Direct3D 구조체 D3DCOLOR D3DCOLORVALUE D3DVECTOR D3DMATRIX
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)))
Direct3D 기본개념 37
D3DCOLORVALUE 부동 소수점 색상 값을 다룬다
typedef struct _D3DCOLORVALUE { float r; float g; float b; float a;
} D3DCOLORVALUE;
Direct3D 기본개념 38
D3DVECTOR 3D 에서 한점을 정의
typedef struct _D3DVECTOR { float x, y, z;
} D3DVECTOR;
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;
Direct3D 기본개념 40
Vertex 버퍼 DirectX 6.0 부터 포함 Vertex 들로 채워진 버퍼 Surface 를 만드는 vertex data 를 담는
버퍼 lock, unlock 정적 기하 도형들의 렌더링을 가속화 data 의 high-bandwidth stream 제공
Direct3D 기본개념 41
Vertex 버퍼 생성HRESULT CreateVertexBuffer(
UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle
);
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 로 지정
Direct3D 기본개념 43
CreateVertexBuffer : 결과
성공D3D_OK
에러D3DERR_INVALIDCALL D3DERR_OUTOFVIDEOMEMORYE_OUTOFMEMORY
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 )
Direct3D 기본개념 45
LockHRESULT IDirect3DVertexBuffer9::Lock(
UINT OffsetToLock, UINT SizeToLock, VOID **ppbData, DWORD Flags
);
Direct3D 기본개념 46
Lock : 인자 UINT OffsetToLock
lock 을 할 버퍼 내부의 offset UINT SizeToLock
lock 을 할 버퍼의 크기 VOID **ppbData
lock 을 할 버퍼정보를 포함하는 포인터 DWORD Flags
lock 을 할 때의 flag
Direct3D 기본개념 47
Lock : 결과 성공
D3D_OK 에러
D3DERR_INVALIDCALL
Direct3D 기본개념 48
UnlockHRESULT IDirect3DVertexBuffer9::Unlock(VOI
D);
Direct3D 기본개념 49
Unlock : 결과 성공
D3D_OK 에러
D3DERR_INVALIDCALL
Direct3D 기본개념 50
렌더링
1. 장면을 초기화2. 렌더링
시작 렌더링 스트림에 부착 FVF 설정 그리기 끝
3. Present4. 종료
Direct3D 기본개념 51
장면의 초기화HRESULT IDirect3DDevice9::Clear(
DWORD Count, const D3DRECT *pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil
);
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 각 스텐실 버퍼에 저장할 정수값
Direct3D 기본개념 53
Clear : 결과 성공
D3D_OK 에러
D3DERR_INVALIDCALL
Direct3D 기본개념 54
Clear : 예제// back 버퍼를 청색으로 초기화 pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
Direct3D 기본개념 55
렌더링 : 시작
HRESULT IDirect3DDevice9::BeginScene(VOID);
Direct3D 기본개념 56
렌더링 스트림에 부착
HRESULT IDirect3DDevice9::SetStreamSource(UINT StreamNumber, IDirect3DVertexBuffer9 *pStreamData, UINT OffsetInBytes, UINT Stride
);
Direct3D 기본개념 57
SetStreamSource : 인자 UINT StreamNumber
vertex 버퍼에 붙이는 번호 보통 0 으로 설정
IDirect3DVertexBuffer9 *pStreamData 렌더링스트림에 붙이고자 하는 vertex 버퍼의 포인터
UINT OffsetInBytes vertex 버페에서 시작될 스트림의 offset 값 보통 0 으로 설정
UINT Stride 버퍼내에서 vertex간의 거리
Direct3D 기본개념 58
SetStreamSource : 결과
성공D3D_OK
에러D3DERR_INVALIDCALL
Direct3D 기본개념 59
SetStreamSource : 예제
LPDIRECT3DVERTEXBUFFER9 pVB;
// vertex 버퍼 생성...
pd3dDevice->SetStreamSource( 0, pVB, 0, sizeof(CUSTOMVERTEX) );
Direct3D 기본개념 60
FVF 설정HRESULT SetFVF(
DWORD FVF );
pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
Direct3D 기본개념 61
그리기HRESULT DrawPrimitive(
D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount
);
Direct3D 기본개념 62
DrawPrimitive : 인자
D3DPRIMITIVETYPE PrimitiveType primitive 종류
UINT StartVertex 첫번째 vertex 의 index 보통 0 을 설정
UINT PrimitiveCount 렌더링할 primitive 의 수 3 개의 vertex 이면 하나의 면이므로 1 이 설정
Direct3D 기본개념 63
Primitive 의 종류 D3DPT_POINTLIST
점의 list D3DPT_LINELIST
선의 list D3DPT_LINESTRIP
연속되는 선의 strip D3DPT_TRIANGLELIST
삼각형 list D3DPT_TRIANGLESTRIP
삼각형 strip D3DPT_TRIANGLEFAN
삼각형 부채꼴
Direct3D 기본개념 64
DrawPrimitive : 결과
성공D3D_OK
에러D3DERR_INVALIDCALL
Direct3D 기본개념 65
DrawPrimitive : 예제
// 삼각형을 그린다 .
pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );
Direct3D 기본개념 66
렌더링 : 끝
HRESULT IDirect3DDevice9:: EndScene(VOID);
Direct3D 기본개념 67
PresentHRESULT IDirect3DDevice9::Present(
CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion
);
Direct3D 기본개념 68
Present : 인자 CONST RECT *pSourceRect
원본 사각형을 포함하는 RECT 에 대한 포인터 NULL 로 지정
CONST RECT *pDestRect, 대상 사각형을 포함하는 RECT 에 대한 포인터
HWND hDestWindowOverride, 대상 윈도우의 포인터
CONST RGNDATA *pDirtyRegion NULL 로 지정
Direct3D 기본개념 69
Present : 결과 성공
D3D_OK 에러
D3DERR_DRIVERINTERNALERROR D3DERR_DEVICELOST D3DERR_INVALIDCALL
Direct3D 기본개념 70
Present : 예제pd3dDevice->Present( NULL, NULL, NULL, NULL );
Direct3D 기본개념 71
종료 Release
pd3dDevice->Release(); pD3D->Release();
Direct3D 기본개념 72
변환 행렬HRESULT GetTransform(
D3DTRANSFORMSTATETYPE State, D3DMATRIX *pMatrix
);
HRESULT SetTransform(D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX *pMatrix
);
Direct3D 기본개념 73
GetTransform, SetTransform :인자 D3DTRANSFORMSTATETYPE State
변환할 대상 D3DTS_WORLD : world 변환 D3DTS_VIEW : view 변환 D3DTS_PROJECTION : 투영 변환 D3DTS_TEXTURE0 ~ D3DTS_TEXTURE7 : 텍스쳐 변환
D3DMATRIX *pMatrix 사용할 행렬의 포인터
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 );
Direct3D 기본개념 75
Viewport
D3DVIEWPORT9typedef struct _D3DVIEWPORT9 {
DWORD X; DWORD Y; DWORD Width; DWORD Height; float MinZ; float MaxZ;
} D3DVIEWPORT9;
Direct3D 기본개념 76
Viewport 설정 및 가져오기
HRESULT IDirect3DDevice9::SetViewport(CONST D3DVIEWPORT9 *pViewport
);
HRESULT IDirect3DDevice9::GetViewport( D3DVIEWPORT9 *pViewport
);