ÀÌ Àå¿¡¼­´Â ½ÇÁ¦·Î ±×¸®±â´Â ÇÏÁö ¾Ê°í, ´ÜÁö ´ÙÀÌ·ºÆ® 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     È¨À¸·Î     À妽º·Î