ÀÌ Àå¿¡¼´Â ½ÇÁ¦·Î ±×¸®±â´Â ÇÏÁö ¾Ê°í, ´ÜÁö ´ÙÀÌ·ºÆ® X¸ðµå·Î
¾î¶»°Ô Àüȯ ÇÒÁö¸¦ ¼³¸í µå¸®°Ú½À´Ï´Ù.
ÃʱâÈ´Â 2´Ü°è·Î ÁøÇà µË´Ï´Ù.
ù°´Â Windows ÃʱâÈ, µÑ°´Â DirectX ÃʱâÈÀÔ´Ï´Ù.
À©µµ¿ìÁî ÃʱâÈ´Â APIÃ¥À̳ª ÀúÀÇ È¨ÆäÀÌÁöÀÇ API ºÎºÐÀ» Âü°íÇØÁÖ¼¼¿ä.
À©µµ¿ìÁî ÃʱâÈ
¾Æ·¡¿¡ ÀÖ´Â ÇÔ¼öµéÀÌ À©µµ¿ì¸¦ ÃʱâÈ ÇÏ´Â ÇÔ¼öµéÀÔ´Ï´Ù.
ATOM CreateClass (HINSTANCE hInstance);
HWND InitWindow (HINSTANCE hInstance, int nCmdShow);
´ÙÀÌ·ºÆ® X ÃʱâÈ
HRESULT DXInit( HWND hWnd );
1) ÀÎÅÍ ÆäÀ̽º »ý¼º
IDirect3D8* Direct3DCreate8 (UINT SDKVersion) :
Direct3D8 ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÑÈÄ IDirect3D8 ÀÎÅÍÆäÀ̽º¸¦ ¹Þ½À´Ï´Ù.
SDKVersion¿¡´Â D3D_SDK_VERSIONÀ» ³Ñ±é´Ï´Ù.
ÀÌ°ÍÀ» »ç¿ëÇÏ´Â ÀÌÀ¯´Â Á¤È®ÇÑ Çì´õÆÄÀÏÀ» »ç¿ëÇϱâ À§ÇؼÀÔ´Ï´Ù. Çì´õ ÆÄÀÏ ¹öÀüÀÌ ¸ÂÁö ¾ÊÀ¸¸é ¿¡·¯°¡ ¹ß»ýÇÕ´Ï´Ù.
¿¡·¯°¡ ¹ß»ý Çϸé NULL°ªÀÌ ³Ñ¾î ¿É´Ï´Ù.
2) ±×·¡ÇÈ ¾î´ðÅÍ Á¤º¸ ¾ò±â
HRESULT GetAdapterDisplayMode (UINT Adapter, D3DDISPLAYMODE* pMode) :
ÇöÀç ÁÖµð½ºÇ÷¹ÀÌÀÇ µð½ºÇ÷¹ÀÌ ¸ðµå¸¦ µ¹·Á ¹Þ½À´Ï´Ù.
¿ì¸®´Â ÇöÀç ÁÖ µð½ºÇ÷¹ÀÌ ¸ðµå¸¦ »ç¿ëÇϱ⠶§¹®¿¡ D3DADAPTER_DEFAULT¸¦ ³Ñ±é´Ï´Ù.
µÎ¹ø° ÀÎÀÚ´Â ¾ò¾î¿Ã D3DDISPLAYMODE ±¸Á¶Ã¼ÀÔ´Ï´Ù.
¼º°øÇϸé D3D_OK¸¦ ½ÇÆÐÇϸé D3DERR_INVALIDCALLÀÔ´Ï´Ù.
D3DDISPLAYMODE ±¸Á¶Ã¼
typedef struct _D3DDISPLAYMODE
{
UINT Width; // Æø
UINT Height; // ³ôÀÌ
UINT RefreshRate; // ÁÖ»çÀ²
D3DFORMAT Format;
} D3DDISPLAYMODE;
D3DFORMAT º¯¼ö¸¸ ¼³¸í µå¸®°Ú½À´Ï´Ù.
¿©·¯°¡Áö ŸÀÔÀÇ Ç¥¸éÀ» Á¤ÀÇ ÇÕ´Ï´Ù. ÁÖ·Î º¸°ÔµÉ ŸÀÔÀº D3DFMT_D16, D3DFMT_D32ÀÔ´Ï´Ù.
³ª¸ÓÁö ´Ù¸¥ ¸®½ºÆ®µéÀº MSDNÀ» Âü°íÇØ ÁÖ¼¼¿ä.
3) µð¹ÙÀ̽º ¼ÂÆÃÇϱâ
ÀÌÁ¦ ±×·¡ÇÈ ¾î´ðÅÍ ¼ÂÆÃÇϴ°͵µ ¾Ë°Ô µÇ¾úÀ¸´Ï ¿øÇÏ´Â ºñµð¿À ¸ðµå·Î ¼³Á¤ÇÒ¼ö ÀÖ½À´Ï´Ù.
HRESULT CreateDevice (
REFGUID rguid,
LPDIRECTINPUTDEVICE *lplpDirectInputDevice,
LPUNKNOWN pUnkOuter
);
d3dpp.hDeviceWindow = hWnd;
d3dpp.BackBufferWidth = (rcWindowClient.right - rcWindowClient.left);
d3dpp.BackBufferHeight = (rcWindowClient.bottom - rcWindowClient.top);
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.BackBufferCount = 1;
d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
d3dpp.Windowed = TRUE;
// Create the D3DDevice
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&g_pd3dDevice ) ) )
{
return E_FAIL;
}
ù° ÀÎÀÚ´Â ÁÖ µð½ºÇ÷¹ÀÌ ¾î´ðÅÍÀÇ µð¹ÙÀ̽º¸¦ »ý¼ºÇϵµ·Ï ÇÕ´Ï´Ù.
µÎ¹ø° ÀÎÀÚ´Â Çϵå¿þ¾î °¡¼ÓÀ» »ç¿ëÇÕ´Ï´Ù. ¼ÒÇÁÆ®¿þ¾î °¡¼ÓÀº D3DDEVTYPE_SOFTWAREÀÔ´Ï´Ù.
¼¼¹ø°´Â ¿¡Çø® ÄÉÀ̼ÇÀÇ À©µµ¿ì ÇÚµéÀÔ´Ï´Ù.
³×¹ø°´Â ½Ã½ºÅÛÀÌ ¼ÒÇÁÆ®¿þ¾îÀûÀ¸·Î ¹öÅؽº¸¦ ó¸®ÇÏ°Ô ÇÕ´Ï´Ù.
´Ù¼¸¹ø°´Â ¼³Á¤Çϱâ À§ÇØ ÀÔ·ÂÇÒ µð¹ÙÀ̽º ÆĶó¹ÌÅÍÀÔ´Ï´Ù.
¸¶Áö¸· ¿©¼¸ ¹ø°´Â ¸®ÅÏ ¹Þ±â À§ÇÑ LPDIRECT3DDEVICE8ÀÔ´Ï´Ù.
4) ·»µå¸µ.
void DXRender(void)
// Clear the scene
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(150,150,255), 1.0f, 0 );
g_pd3dDevice->BeginScene();
g_pd3dDevice->EndScene();
// Output the scene
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
HRESULT Clear (DWORD Count, const D3DRect* pRects, DWORD Flags, D3DCOLOR Color, float z, DWORD Stencil);
¿øÇÏ´Â ºÎºÐÀ» Á¦°ÅÇÏ´Â ÇÔ¼ö·Î
ù¹ø° ÀÎÀÚ´Â »ç°¢Çü ¿µ¿ª Å©±â¸¦ ÁöÁ¤ÇÕ´Ï´Ù. 0À¸·Î ÁöÁ¤Çϸé Àüü ºäÆ÷Æ®°¡ Á¦°ÅµË´Ï´Ù.
µÎ¹ø° ÀÎÀÚ´Â »ç°¢Çü ¿µ¿ªÀÇ Æ÷ÀÎÅÍÀÔ´Ï´Ù.
¼¼¹ø° ÀÎÀÚ´Â »ç¿ëÇÒ Ç÷¡±×¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
D3DCLEAR_STENCIL Á¦°ÅÇÒ ½ºÅÙ½Ç ¹öÆÛ¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
D3DCLEAR_TARGET ColorÀÎÀÚ¸¦ »ç¿ëÇØ Á¦°ÅµÉ ·»´õ Ÿ°Ù ¹öÆÛ¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
D3DCLEAR_ZBUFFER ZÀÎÀÚ¿¡ ¼³Á¤µÈ °ªÀ¸·Î Á¦°ÅµÉ z¹öÆÛ¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
³×¹ø° ÀÎÀÚ´Â D3DCLEAR_TARGETÀ» »ç¿ëÇØ Ã¤¿ö¾ßÇÒ Ä®¶ó¸¦ ÁöÁ¤ÇÕ´Ï´Ù. Ä®¶ó°ªÀº 32ºñÆ® ARGB°ªÀÔ´Ï´Ù.
´Ù¼¸¹ø° ÀÎÀÚ´Â D3DCLEAR_ZBUFFERÀ» »ç¿ëÇØ Á¦°ÅÇÒ z¹öÆÛ¸¦ ÁöÁ¤ÇÕ´Ï´Ù. 0.0¿¡¼ 1.0±îÁö ÁöÁ¤ÇÒ¼ö ÀÖ½À´Ï¤¿´Ù
¸¶Áö¸· ÀÎÀÚ´Â ½ºÅÙ½Ç ¹öÆÛ¿¡ ÁøÀԵɶ§¸¶´Ù »ç¿ëµÇ´Â Á¤¼ö °ªÀÔ´Ï´Ù. ÀÌ°ªÀº 2n-1ÀÇ Å©±â¸¦ °¡Áý´Ï´Ù
BeginScene()ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ·»´õ¸µÀ» ½ÃÀÛÇÕ´Ï´Ù. ±×´ÙÀ½ Ãâ·ÂÇÒ ÇÔ¼ö¸¦ Ãß°¡ÇÏ¸é µË´Ï´Ù.
¾Æ¹«°ÍµÎ ¾ø±â ¶§¹®µ¥ ¹Ù·Î EndScene()ÇÔ¼ö¸¦ È£Ãâ ÇÕ´Ï´Ù.
HRESULT Present (CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, const RGNDATA* pDirtyRegion);
BeginScene()¿Í EnScene()»çÀÌ¿¡ ·»´õ¸µµÈ µ¥ÀÌÅ͸¦ Ãâ·ÂÇϱâ À§ÇÑ ÇÔ¼öÀÔ´Ï´Ù.
ù¹ø° ÀÎÀÚ´Â RECTÇü ±¸Á¶Ã¼·Î º¹»çÇÒ ¼Ò½º »ç°¢Çü ¿µ¿ªÀ» ³ªÅ¸³À´Ï´Ù. ¼Ò½ºÇѰ踦 ÃÊ°ú ÇÑ´Ù¸é ¼Ò½ºÅ©±â´Â À߸³´Ï´Ù.
µÎ¹ø° ÀÎÀÚ´Â ¼Ò½º¸¦ º¹»çÇÒ ´ë»óÀÇ RECTÆ÷ÀÎÅÍÀÔ´Ï´Ù. Å©±â¸¦ ÃÊ°úÇϸé À߸³´Ï´Ù.
¼¼¹ø° ÀÎÀÚ´Â Ãâ·ÂÇÒ Àεµ¿ì¸¦ ÁöÁ¤ÇÕ´Ï´Ù. NULL·Î ÁöÁ¤ÇÏ¸é µð¹ÙÀ̽º°¡ »ý¼ºµÉ ¶§, ÁöÁ¤ÇÑ À©µµ¿ì¸¦ »ç¿ëÇÕ´Ï´Ù.
¸¶Áö¸· ÀÎÀÚ´Â ´ÙÀÌ·ºÆ® 8.0¿¡¼´Â »ç¿ëÇÏÁö ¾Ê±â ¶§¹®¿¡ NULL·Î ÁöÁ¤ÇÕ´Ï´Ù.
5) ¸Þ¸ð¸® Á¦°Å
void DXCleanup(void)
if( g_pd3dDevice != NULL )
g_pd3dDevice->Release();
if( g_pD3D != NULL )
g_pD3D->Release();
UnregisterClass( g_szClassName, g_hInstance );
¸ÕÀú Á¦°ÅÇÒ º¯¼ö´Â IDirect3DDeviceÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. Á¦°ÅÇϱâ À§Çؼ´Â Release()ÇÔ¼öÀÔ´Ï´Ù.
´ÙÀ½À¸·Î ÇØÁ¦ÇÒ º¯¼ö´Â IDirect3D8ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. Á¦°ÅÇϱâ À§Çؼ´Â Release()ÇÔ¼öÀÔ´Ï´Ù.
¸¶Áö¸·À¸·Î UnregisterClassÇÔ¼ö·Î À©µµ¿ì Ŭ·¡½º¿Í À©µµ¿ì ÇÚµé·Î ³Ö¾î À©µµ¿ì¸¦ Á¦°ÅÇÕ´Ï´Ù.
    ¼Ò½ºº¸±â
    DOWNLOAD
    È¨À¸·Î
    À妽º·Î
|