¹è Á¶Á¾Çϱâ¶ó°í Çؼ °ÅâÇÑ ¹è°¡ ¾Æ´Ï¶ó »ç°¢Çü 2°³ »ï°¢Çü 1°³¸¸ ¿òÁ÷ÀÏ °ÍÀÌ´Ù.
2. ¹è ¿òÁ÷À̱â
¹è¸¦ ¿òÁ÷À϶§´Â ÇöÀç ÁÂÇ¥¿¡¼ ¿òÁ÷ÀÎ °Å¸®¸¦ »ï°¢ÇÔ¼ö¸¦ ÀÌ¿ëÇØ xÃàÀ¸·Î ¾ó¸¶ yÃàÀ¸·Î ¾ó¸¶ ¿òÁ÷¿´´ÂÁö ¾Ë¼öÀÖ´Ù.
¹èÀÇ À§Ä¡¸¦ ³ªÅ¸³»´Â ÇÊ¿äÇÑ º¯¼ö´Â ´ÙÀ½°ú °°´Ù.
float g_fx = 0.0f; //ÇöÀç xÃà¿¡¼ÀÇ À§Ä¡
float g_fy = 0.0f; //ÇöÀç yÃà¿¡¼ÀÇ À§Ä¡
float g_fDegree = 0.0f; //¹è º»Ã¼ÀÇ ¿ùµå¿¡¼ ÇâÇÏ´Â ¹æÇâ
float g_fTurretDegree = 0.0f; //Æ÷½ÅÀÇ ·ÎÄÿ¡¼ ÇâÇÏ´Â ¹æÇâ
void MovPosition(float fMove)
{
#if 1 //yÃàÀ» ±âÁØÀ¸·Î ȸÀü°¢À» 0À¸·Î ÇÒ¶§
double sin_a = -sin( D3DXToRadian(g_fDegree) );
double cos_a = cos( D3DXToRadian(g_fDegree) );
g_fx = float(fMove * sin_a + g_fx);
g_fy = float(fMove * cos_a + g_fy);
#else
double sin_a = sin( D3DXToRadian(g_fDegree) );
double cos_a = cos( D3DXToRadian(g_fDegree) );
g_fy = float(fMove * sin_a + g_fy);
g_fx = float(fMove * cos_a + g_fx);
#endif
}
ÀϹÝÀûÀ¸·Î Çб³¿¡¼ ¹è¿î ¼öÇп¡¼ »ç¿ëÇÏ´Â ÁÂÇ¥´Â XÃàÀ» ¿µÁ¡ ±âÁØÀ¸·Î ÀâÁö¸¸ °ÔÀÓ¿¡¼´Â YÃàÀ̳ª ZÃàÀ»
¿µÁ¡ ±âÁØÀ¸·Î Àâ´Â´Ù.
XÃàÀÌ ¿µÁ¡À϶§---
(mÀº ¿òÁ÷ÀÎ °Å¸®ÀÌ´Ù.)
x°ªÀº?
cos a = move_x / m
move_x = m * cos a À̹ǷÎ
¸ñÀûÁö g_fx = move_x + ½ÃÀÛ À§Ä¡ x = float(fMove * cos_a + g_fx)
y°ªÀº?
sin a = move_y / m
move_y = m * sin a À̹ǷÎ
¸ñÀûÁö g_fy = move_y + ½ÃÀÛ À§Ä¡ y = g_fy = float(fMove * sin_a + g_fy)
YÃàÀÌ ¿µÁ¡ÀÏ ¶§---
x°ªÀº? sin(a + 90)
cos a = move_y / m
move_y = m * cos a
¸ñÀûÁö g_fy = move_y + ½ÃÀÛ À§Ä¡ y = g_fy = float(fMove * cos_a + g_fy)
±×¸²À» º¸¸é¼ »ï°¢ÇÔ¼ö¸¦ »ý°¢Çϸé ÀÌÇØ°¡ ½¬¿ï °ÍÀÌ´Ù.
================================================================================================
3. ¹è ·»µå¸µ
void MoveShip(float fx, float fy)
{
D3DXMATRIX mScale1, mRot1, mTran1, mResult1;
D3DXMATRIX mScale2, mRot2, mTran2, mResult2;
D3DXMATRIX mScale3, mRot3, mTran3, mResult3;
//º»Ã¼
//SRT
D3DXMatrixScaling( &mScale1, 1.1f, 1.1f, 1.1f );
D3DXMatrixRotationZ(&mRot1, D3DXToRadian(g_fDegree));
D3DXMatrixTranslation( &mTran1, fx, fy, 0.0f);
mResult1 = mScale1 * mRot1 * mTran1;
g_d3d_Device->SetTransform( D3DTS_WORLD, &mResult1);
g_d3d_Device->DrawPrimitive( D3DPT_TRIANGLESTRIP, 3, 2 );
//Æ÷ž
D3DXMatrixScaling( &mScale2, 1.0f, 1.0f, 1.0f );
D3DXMatrixRotationZ(&mRot2, D3DXToRadian(g_fTurretDegree));
D3DXMatrixTranslation( &mTran2, 0.0f, -0.7f, 0.0f );
<¿ø ÀÚÃë(±ËÀû)¿¡ ÀÖ´Â Á¡ÀÇ À§Ä¡ ±¸Çϱâ> ±¸ÇÏ°íÀÚ ÇÏ´Â ¿ø ÀÚÃëÀÇ Á¡À» x1, y1 ¿øÁ¡À» x0, y0 ¹ÝÁö¸§À» radius °¢µµ¸¦ angle x1 = x0 + (cos(angle) * radius); y1 = y0 + (sin(angle) * radius); |