ȸ鿡 ¹º°¡¸¦ ±×·Á º¸µµ·Ï ÇÏÀÚ. C ÇÁ·Î±×·¡¹ÖÀ» óÀ½ ¹è¿ï¶§ "Hello World!"¸¦ º¸¿© ÁÖµíÀÌ
»ï°¢Çü 2°³¸¦ ±×·Áº¸ÀÚ.
Ãß°¡µÈ »çÇ×Àº ´ÙÀ½°ú °°´Ù.
1.¹öÅؽº ¹öÆÛÀÇ Æ÷¸Ë°ú ±¸Á¶Ã¼ ¼±¾ð --> 2.¹öÅؽº ¹öÆÛÀÇ ÃʱâÈ --> 3.·»µå¸µ --> 4.¼Ò¸ê
1. ¹öÅؽº ¹öÆÛÀÇ Æ÷¸Ë°ú ±¸Á¶Ã¼ ¼±¾ð
´ÙÀÌ·ºÆ® 8.0ºÎÅÍ ¹öÅؽº ¹öÆÛ¶ó´Â °³³äÀÌ µµÀԵǾú´Ù. ¹öÅؽº ¹öÆÛ¸¦ »ç¿ëÇϱâ À§Çؼ´Â ¹öÅؽº ¹öÆÛÀÇ
±¸Á¶Ã¼¿Í Æ÷¸ËÀ» ¼±¾ðÇØ¾ß ÇÑ´Ù.
//¹öÅؽº ±¸Á¶Ã¼¿Í ŸÀÔ ¼±¾ð
struct CUSTOMVERTEX { FLOAT x, y, z, rhw; DWORD color; };
#define D3DFVF_CUSTOMVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE )
|
¹öÅؽº Æ÷¸Ë°ú ¼ø¼´Â MSÀÇ ´ÙÀÌ·ºÆ® SDK ¹®¼¸¦ Âü°íÇÑ´Ù.
D3DFVF_XYZRHW: 2D °ÔÀÓÀ̳ª ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé¶§ »ç¿ëÇÏ´Â Æ÷¸ËÀÌ´Ù.(ÀÚ¼¼ÇÑ ¼³¸íÀº ±ÍÂú¾Æ¼ »ý·«...)
D3DFVF_DIFFUSE: ¹öÅؽº Ä®¶ó¸¦ »ç¿ëÇÑ´Ù.
2.¹öÅؽº ¹öÆÛÀÇ ÃʱâÈ
¹öÅؽº ¹öÆÛ¸¦ ÃʱâÈ Çϱâ Àü¿¡ ¹öÅؽº ¹öÆÛ Æ÷ÀÎÅÍ(IDirect3DVertexBuffer8)¸¦ ¼±¾ðÇØ¾ß ÇÑ´Ù.
LPDIRECT3DVERTEXBUFFER8 p_VertexBuffer = NULL; // our VertexBuffer
|
¹öÅؽº ¹öÆÛ¸¦ ¸¸µé ¸ðµç Áغñ°¡ µÇ¾úÀ¸´Ï Çѹø ¸¸µé¾î º¸ÀÚ.
bool RenderInit()
{
CUSTOMVERTEX g_Vertices[] =
{
{ 60.0f, 60.0f, 0.5f, 1.0f, 0xffff0000, },
{ 200.0f, 60.0f, 0.5f, 1.0f, 0xff00ff00, },
{ 60.0f, 200.0f, 0.5f, 1.0f, 0xff0000ff, },
{ 80.0f, 220.0f, 0.5f, 1.0f, 0xff0000ff, },
{ 220.0f, 80.0f, 0.5f, 1.0f, 0xff00ff00, },
{ 220.0f, 220.0f, 0.5f, 1.0f, 0xffffff00, },
};
g_d3d_Device->CreateVertexBuffer (6*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_VertexBuffer);
VOID* pVertices;
g_VertexBuffer->Lock (0, sizeof(g_Vertices), (BYTE**)&pVertices, 0);
memcpy (pVertices, g_Vertices, sizeof(g_Vertices));
g_VertexBuffer->Unlock();
return true;
}
|
- À§¿¡ ±×¸²¿¡¼ º¸µí 2°³ÀÇ »ï°¢ÇüÀÌ ÀÖÀ¸¹Ç·Î 6°³ÀÇ ¹öÅؽº°¡ ÇÊ¿äÇÏ´Ù.
- CreateVertexBuffer¿¡¼ 6°³ÀÇ Vertex Á¤º¸°¡ ÀÖÀ¸¹Ç·Î 6*sizeof(CUSTOMVERTEX)Å©±â¸¦ ³Ö´Â´Ù.
µÎ¹ø° ÆĶó¸ÞÅÍ¿¡¼´Â ¹öÅؽº Á¦¾î°¡ ÇÊ¿äÇÏÁö ¾ÊÀ¸¹Ç·Î ÀÏ´ÜÀº 0À¸·Î ¼ÂÆÃÇÑ´Ù.
´ÙÀ½Àº ¿ì¸®°¡ »ç¿ëÇÒ ¹öÅؽº ÇüÅÂ(D3DFVF_CUSTOMVERTEX)¸¦ ¾Ë·ÁÁÖ°í ¸Þ¸ð¸® »ç¿ë ÆĶó¸ÞÅ͸¦
³Ö´Â´Ù.
¹«½¼ ¸»ÀÎÁö´Â ¸ð¸£´Ï µðÆúÆ®·Î D3DPOOL_DEFAULT¸¦ ³ÖÀÚ.
¸¶Áö¸·À¸·Î µ¹·Á ¹ÞÀ» LPDIRECT3DVERTEXBUFFER8ÀÌ´Ù
- ¹öÅؽº ¹öÆÛ¿¡ Á¢±ÙÇϱâ À§Çؼ ¶ôÀ» °Ç´Ù.
- ¿øÇÏ´Â ¹öÅؽº °ªÀ» ¹öÅؽº ¹öÆÛ¿¡ ³Ö´Â´Ù.
- ¹öÅؽº ¹öÆÛÀÇ ¶ôÀ» ÇØÁ¦ÇÑ´Ù.
3.·»µå¸µ
ȸ鿡 º¸¿©ÁÙ ¸ðµç ÀÛ¾÷ Áغñ°¡ µÇ¾ú´Ù. RenderLoop()¿¡ Ãß°¡ÇØ¾ß ÇÒ ÀÛ¾÷ÀÌ ÀÖ´Ù.
·»µå¸µ 󸮸¦ RenderLoop()¿¡¼ Çߴµ¥, Áö±Ý ºÎÅÍ´Â Render3D()¿¡¼ ÇÏ°Ô µÉ°ÍÀÌ´Ù.
µð¹ÙÀ̽º¸¦ »ó½ÇÇßÀ»¶§ 󸮸¦ Çϱâ À§ÇØ ·»µå¸µ 󸮸¦ Render3D()»°´Ù.
HRESULT RenderLoop()
{
// Render the scene as normal
HRESULT hr;
if( FAILED( hr = Render3D() ) )
return hr;
return S_OK;
}
//-----------------------------------------------------------------------------
HRESULT Render3D ()
{
HRESULT hr;
g_d3d_Device->Clear (0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB (0, 0, 0), 1.0f, 0);
g_d3d_Device->BeginScene ();
g_d3d_Device->SetVertexShader (D3DFVF_CUSTOMVERTEX);
g_d3d_Device->SetStreamSource (0, g_VertexBuffer, sizeof(CUSTOMVERTEX));
g_d3d_Device->DrawPrimitive (D3DPT_TRIANGLELIST, 0, 2);
g_d3d_Device->EndScene ();
hr = g_d3d_Device->Present (NULL, NULL, NULL, NULL);
return hr;
}
|
Render3D() ÇÔ¼ö¸¦ º¸ÀÚ.
- ±×¸± ¹öÅؽº ¹öÆÛÀÇ Æ÷¸ËÀ» ¸ÕÀú ¼ÂÆÃÇÑ´Ù.
- ¹öÅؽº ¹öÆÛ¸¦ µð¹ÙÀ̽º ½ºÆ®¸²¿¡ ¿¬°áÇÑ´Ù. ù¹ø° ÆĶó¹ÌÅÍ´Â ¾î¼±¸ Àú¼±¸ ³ª¿À´Âµ¥ ¸ð¸£°Ú´Ù.
±×³É 0À» ³Ö±â ¹Ù¶õ´Ù. 2¹ø° ÆĶó¹ÌÅÍ´Â ¹öÅؽº ¹öÆÛÀÇ Æ÷ÀÎÅÍÀÌ´Ù.
¸¶Áö¸· 3¹ø° Æ÷ÀÎÅÍ´Â µ¥ÀÌÅÍ Æ÷¸ËÀÇ Å©±âÀÌ´Ù.
- ù¹ø° ÀÎÀÚ¿¡´Â ±×¸± ÇüÅÂÀÇ ¸ð¾çÀ» ÁöÁ¤ÇÏ°í, µÎ¹ø°´Â ½ÃÀÛ ¹öÅؽº Á¡ÀÌ´Ù.
¸¶Áö¸· ÀÎÀڴ ù ¹ø° ÆĶó¹ÌÅÍ¿¡¼ ÁöÁ¤ÇÑ ±×¸± ÇüÅÂÀÇ ¼öÀÌ´Ù. 2°³ÀÇ »ï°¢ÇüÀ̹ǷΠ2¸¦ ³Ö´Â´Ù.
(¿À¸¥Âʸ¸ ±×¸®°í ½Í´Ù¸é DrawPrimitive (D3DPT_TRIANGLELIST, 3, 1)À» ³ÖÀ¸¸é µÈ´Ù)
4.¼Ò¸ê
ÇÁ·Î±×·¥À» ³¡³»±â Àü¿¡ DestroyDirect3D8()ÇÔ¼ö¿¡¼ ¹öÅؽº ¹öÆÛ¸¦ ÇØÁ¦¸¦ Ãß°¡ÇÑ´Ù.
oid DestroyDirect3D8 ()
{
_RELEASE_ (g_VertexBuffer);
_RELEASE_ (g_d3d_Device);
_RELEASE_ (g_d3d);
}
|
|