Áö¿øµÇ´Â ¸ðµç Áö¿À¸ÞÆ®¸®¸¦ ÇÁ¶óÀ̸ÓƼºê¶ó°í ÇÕ´Ï´Ù.
DirectX°¡ Áö¿øÇÏ´Â 6°¡ÁöÀÇ ±âº»ÀûÀÎ ÇÁ¶óÀ̸ÓƼºê´Â Æ÷ÀÎÆ® ¸®½ºÆ®, ¶óÀÎ ¸®½ºÆ® , ¶óÀÎ ½ºÆ®¸³,
Æ®¶óÀÌ¾Þ±Û ¸®½ºÆ®, Æ®¶óÀÌ¾Þ±Û ½ºÆ®¸³, Æ®¶óÀÌ¾Þ±Û ÆÒÀÌ ÀÖ½À´Ï´Ù.
À̹ø Àå¿¡¼´Â 2°³ÀÇ »ï°¢ÇüÀ» »ç¿ëÇؼ »ç°¢ÇüÀ» Ãâ·ÂÇÕ´Ï´Ù.
¾ÕÀåÀÇ È¸é ¼³Á¤À» À§ÇÑ ÄÚµå´Â Á¦¿ÜÇÏ°í Ãß°¡µÈ ºÎºÐ¸¸ ¼³¸í µå¸®°Ú½À´Ï´Ù.
Ãß°¡µÈ »çÇ×À» °£´ÜÇÏ°Ô Á¤¸®ÇÏ¸é ¾Æ·¡¿Í °°½À´Ï´Ù.
1) ¹öÅؽº Æ÷¸Ë ¼±¾ð
¹öÅؽº ¹öÆÛ¸¦ ¸¸µé±âÀ§ÇØ, ¹öÅؽº Æ÷¸ËÀ» ´ÙÀÌ·ºÆ®X ½Ã½ºÅÛ¿¡ ¾Ë·ÁÁÖ¾î¾ß ÇÑ´Ù.
¿ì¼± ¹öÅؽº Æ÷¸ËÀ» ¼±¾ðÇÏ°í, ¹öÅؽº Æ÷¸Ë¿¡ ¸Â´Â ±¸Á¶Ã¼ ¼±¾ð, ±×¸®±¸ ¹öÅؽº µ¥ÀÌŸ¸¦ ¸¸µé¸é µË´Ï´Ù.
#define D3DFVF_MYVERTEX (D3DFVF_XYZ)
typedef struct MYVERTEX
{
float x;
float y;
float z;
} MYVERTEX, *LPMYVERTEX;
MYVERTEX g_vertex[4];
x, y, z¸¸ ÇÊ¿äÇϱ⠶§¹®¿¡ D3DFVF_XYZ¸¦ ¼±¾ðÇÕ´Ï´Ù. ±¸Á¶Ã¼ ¿ª½Ã ÀÌÇØ °¡½Ç °Ì´Ï´Ù.
¹öÅؽº ¹öÆÛ¿¡ ³Ñ°ÜÁÖ±âÀ§ÇÑ µ¥ÀÌŸ¸¦ ´ã±â À§ÇÑ ¹è¿À» Á¤ÀÇ ÇÕ´Ï´Ù.
2) DXInit()ÇÔ¼ö¿¡ ÃʱâÈ Ãß°¡
g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff );
g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
ÀÌ ÇÁ·Î±×·¥ÀÇ ¼³Á¤¿¡¼ ÇÊ¿äÇÑ ¼¼ °¡ÁöÀÇ ·»´õ¸µ »óÅ´ z-¹öÆÛ, ¿¥ºñ¾ðÆ® Á¶¸í, Çϵå¿þ¾î Á¶¸í¿¡
´ëÇÑ °ÍÀÔ´Ï´Ù.
3) ¹öÅؽº Æ÷¸Ë ó¸®
void DXInitGeometry()
a. ¹öÅؽº ¹öÆÛ »ý¼º
b. ¹öÅؽº ¹öÆÛ ¶ô
c. µ¥ÀÌÅ͸¦ ¹öÅؽº ¹öÆÛ·Î º¹»ç
d. ¹öÅؽº ¹öÆÛ ¶ô ÇØÁ¦
a. ¹öÅؽº ¹öÆÛ »ý¼º
¹öÅؽº ¹öÆÛ¸¦ »ý¼ºÇϱâÀü¿¡ ¹öÅؽº Á¤º¸¸¦ ¸¸µé¾î¾ß ÇÕ´Ï´Ù.
±×¸²°ú Äڵ带 º¸¸é ½¬¿ï °Ì´Ï´Ù.
float fSizeX = 5.0f;
float fSizeY = 5.0f;
// Create the geometry
g_vertex[0].x = -fSizeX/2;
g_vertex[0].y = fSizeY/2;
g_vertex[0].z = 0.0f;
g_vertex[1].x = -fSizeX/2;
g_vertex[1].y = -fSizeY/2;
g_vertex[1].z = 0.0f;
g_vertex[2].x = fSizeX/2;
g_vertex[2].y = fSizeY/2;
g_vertex[2].z = 0.0f;
g_vertex[3].x = fSizeX/2;
g_vertex[3].y = -fSizeY/2;
g_vertex[3].z = 0.0f;
¹öÅؽº ¹öÆÛ¸¦ »ý¼ºÇϱâ À§Çؼ´Â CreateVertexBuffer()ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.
HRESULT CreateVertexBuffer(
UINT Length,
DWORD Usage,
DWORD FVF,
D3DPOOL Pool,
IDirect3DVertexBuffer8** ppVertexBuffer
);
g_pd3dDevice->CreateVertexBuffer(4*sizeof(MYVERTEX),
0, D3DFVF_MYVERTEX, D3DPOOL_DEFAULT, &g_pVertexBuffer)
ù¹ø° ÀÎÀÚ´Â ¹öÅؽº ¹öÆÛÀÇ ±æÀ̸¦ ³ªÅ¸³À´Ï´Ù. ÀÌÀå¿¡¼´Â 4°³ÀÇ ¹öÅؽº°¡ ÇÊ¿äÇÕ´Ï´Ù.
µÎ¹ø° ÀÎÀÚ´Â ¹öÆÛ¸¦ ¾î¶»°Ô »ç¿ëÇÒ°ÍÀÎÁö ÁöÁ¤ÇÕ´Ï´Ù.
¼¼¹ø° ÀÎÀÚ´Â »ç¿ëÇÒ ¹öÅؽº Æ÷¸ËÀ» ³Ö½À´Ï´Ù.
³×¹ø° ÀÎÀÚ´Â ¹öÆÛ°¡ Â÷ÁöÇÒ ¸Þ¸ð¸® Ç®À» ÁöÁ¤ÇÕ´Ï´Ù. ¿©±â¼´Â µðÆúÆ® ¸Þ¸ð¸® Ç®À» »ç¿ë ÇϹǷÎ
D3DPOOL_DEFAULT¸¦ »ç¿ëÇÕ´Ï´Ù.
¸¶Áö¸· ÀÎÀÚ´Â ¹öÆÛ Æ÷ÀÎÅ͸¦ ³Ö½À´Ï´Ù.
b. ¹öÅؽº ¹öÆÛ ¶ô
HRESULT IDirect3DIndexBuffer8::Lock(
UINT OffsetToLock,
UINT SizeToLock,
BYTE** ppbData,
DWORD Flags
);
g_pVertexBuffer->Lock(0, sizeof(g_vertex), (BYTE**)&lpVertices, 0)
¹öÆÛÀÇ µ¥ÀÌÅ͸¦ ¼öÁ¤Çϱâ À§Çؼ´Â ¹öÆÛ¿¡ ¶ôÀ» °É°í µ¥ÀÌŸ ¹öÆÛÀÇ Æ÷ÀÎÅ͸¦ ¾ò¾î ¿É´Ï´Ù.
ù¹ø° ÀÎÀÚ´Â ¶ôÀ» °É À妽º µ¥ÀÌÅÍÀÇ ¿É¼ÂÀ» ÁöÁ¤ÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î 0À» ÁöÁ¤ÇÕ´Ï´Ù.
µÎ¹ø° ÀÎÀÚ´Â ¶ôÀ» °É ¹öÅؽº Æ÷¸ËÀÇ Å©±â¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
¼¼¹ø° ÀÎÀÚ´Â ¶ôµÈ µ¥ÀÌÅÍÀÇ Æ÷ÀÌÅ͸¦ ¹Þ½À´Ï´Ù.
¸¶Áö¸· ÀÎÀÚ´Â ¿¬»ê¿¡ ÇÊ¿äÇÑ Ç÷¡±×¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
c. µ¥ÀÌÅ͸¦ ¹öÅؽº ¹öÆÛ·Î º¹»ç
memcpy(lpVertices, g_vertex, sizeof(g_vertex));
¹öÅؽº µ¥ÀÌÅ͸¦ ¶ôµÈ ¹öÆÛ·Î º¹»çÇÕ´Ï´Ù.
d. ¹öÅؽº ¹öÆÛ ¶ô ÇØÁ¦
HRESULT IDirect3DIndexBuffer8::Unlock();
Lock()ÇÔ¼ö¸¦ »ç¿ëÇÑ ÈÄ¿¡´Â ¶ôÀ» Unlock()ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.
4)Áö¿À¸ÞÆ®¸® Ãâ·Â
a. SetStreamSource()
b. SetVertexShader()
c. DrawPrimitive()
a. SetStreamSource()
Áö¿À¸ÞÆ®¸®¸¦ Ãâ·ÂÇϱâ À§ÇØ 3D½Ã½ºÅÛ¿¡°Ô ¾îµð¼ ¹öÅؽº µ¥ÀÌÅ͸¦ °¡Á®¿Ã°ÍÀÎÁö ¾Ë·Á ÁÖ±âÀ§ÇØ
SetStreamSource() ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.
HRESULT IDirect3DDevice8::SetStreamSource(
UINT StreamNumber,
IDirect3DVertexBuffer8* pStreamData,
UINT Stride);
g_pd3dDevice->SetStreamSource(0, g_pVertexBuffer, sizeof(MYVERTEX));
ù¹ø° ÀÎÀÚ´Â »ç¿ëÇÏ´Â ½ºÆ®¸²ÀÌ ¾î´À°ÍÀÎÁö ÁöÁ¤ÇÕ´Ï´Ù.
µÎ¹ø° ÀÎÀÚ´Â ½ºÆ®¸² µ¥ÀÌÅÍÀÇ Æ÷ÀÎÅÍÀÔ´Ï´Ù.
¸¶Áö¸· ÀÎÀÚ´Â ¹öÅؽº Æ÷¸ËÀÇ Å©±âÀÔ´Ï´Ù.
b. SetVertexShader()
½ºÆ®¸²À» ¼³Á¤ÇÏ°í ³ÈÄ¿¡´Â ¾î´À ¹öÅؽº ½¦À̵带 »ç¿ëÇÒ°ÍÀÎÁö ¾Ë·ÁÁÝ´Ï´Ù.
HRESULT IDirect3DDevice8::SetVertexShader(DWORD Handle);
g_pd3dDevice->SetVertexShader(D3DFVF_MYVERTEX);
c. DrawPrimitive()
¼Â¾÷ÇÑ Áö¿À¸ÞÆ®¸®¸¦ Ãâ·ÂÇϱâ À§ÇØ DrawPrimitive()ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.
HRESULT IDirect3DDevice8::DrawPrimitive(
D3DPRIMITIVETYPE PrimitiveType,
UINT StartVertex,
UINT PrimitiveCount);
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
ù¹ø° ÀÎÀÚ´Â ÇÁ¶óÀ̸ÓƼºê ŸÀÔÀ» ÁöÁ¤ÇÕ´Ï´Ù. ŸÀÔÀº ¾Æ·¡¿Í °°½À´Ï´Ù.
typedef enum _D3DPRIMITIVETYPE
{
D3DPT_POINTLIST = 1,
D3DPT_LINELIST = 2,
D3DPT_LINESTRIP = 3,
D3DPT_TRIANGLELIST = 4,
D3DPT_TRIANGLESTRIP = 5,
D3DPT_TRIANGLEFAN = 6,
D3DPT_FORCE_DWORD = 0x7fffffff
} D3DPRIMITIVETYPE;
µÎ¹ø° ÀÎÀÚ´Â ¹öÆÛ°¡ ½ÃÀÛÇÒ ¹öÆÛÀÇ À妽ºÀÔ´Ï´Ù.
¸¶Áö¸· ÀÌÀÚ´Â ·»µå¸µ ÇÒ ÇÁ¶óÀ̸ÓƼºê ¼ö¸¦ ³ªÅ¸³À´Ï´Ù.
ÀÌ»óÀÔ´Ï´Ù.
    ¼Ò½ºº¸±â
    DOWNLOAD
    È¨À¸·Î
    À妽º·Î
|