# º» ¾Ö´Ï´Â ½ºÆ¼Äª ¾Ö´Ï¿Í ½ºÅ°´× ¾Ö´Ï µÎ°³·Î ³ª´ ¼ö Àִµ¥,
½ºÆ¼Äª ¾Ö´ÏÀÇ ´ëÇ¥ÀûÀÎ ÆÄÀÏÆ÷¸äÀÌ SMD ÆÄÀÏ Æ÷¸ËÀ¸·Î º§ºê»ç°¡ ÇÏÇÁ¶óÀÌÇÁ SDK¸¦ °ø°³ÇÏ¸é¼ °°ÀÌ °ø°³µÈ Æ÷¸äÀÌ´Ù.
½ºÆ¼Äª ¾Ö´Ï´Â Á¡ Çϳª¿¡ º»Çϳª°¡ ´ëÀÀµÇ´Â ÇüÅ·Î
°üÀýºÎºÐÀÌ ¾Ö´Ï¶§ Á¢È÷°Å³ª »ÇÁ·ÇÏ°Ô µÉ °æ¿ìµµ ¸¹Áö¸¸, ¹öÅؽºÇϳª¿¡ ¸ÅÆ®¸¯½º ÇϳªÀ̱⿡ ¼Óµµ´Â ºü¸£´Ù.
# SMD ¸Å¿ì ¸í·áÇÑ Á¤º¸µé¸¸ °¡Áö´Â ÀåÁ¡À» °¡Áö°í ÀÖÁö¸¸
º»ÀÇ °¹¼ö¶ó´ø°¡, »ï°¢ÇüÀÇ °¹¼ö µî MODÆÄÀÏÀÇ ÇØ´õ¼º Á¤º¸ ºÎºÐÀÌ ¾ø±â ¶§¹®¿¡ Áߺ¹Á¡À» Á¦°ÅÇÏ´Â ¹öÅؽº À妽ºÈ³ª °°Àº ÅؽºÃĸ¦ ¹¾î¼ ·»´õ¸µÇÏ´Â Á¶ÀÛ µîÀÇ ÃÖÀûÈ°¡ ÇÊ¿äÇÏ´Ù.
# SMDÀÇ ÀڷᱸÁ¶´Â Å©°Ô 3ºÎºÐÀ¸·Î ³ª´¶´Ù.
º»³ëµå / ½ºÄÌ·¹Åæ Á¤º¸ / ¸Å½¬ Á¤º¸
ÀÌ·¯ÇÑ Á¤º¸¸¦ SMD´Â µÎ°¡Áö ÆÄÀÏ·Î ³ª´µ¾î ÀúÀåÇϴµ¥
·¹ÆÛ·±½º ÆÄÀÏ¿¡´Â À§ÀÇ 3°¡Áö ÀڷᱸÁ¶¸¦ ¸ðµÎ °¡Áö°í ÀÖÀ¸¸ç,
¾Ö´Ï¸ÞÀÌ¼Ç ÆÄÀÏ¿¡´Â ¸Å½¬ Á¤º¸°¡ ºüÁø, ½ºÄÌ·¹Åæ Á¤º¸°¡ ÇÁ·¹ÀÓ¼ö¸¸Å ³ª¿ÍÀÖ´Ù.
0) °øÅ뱸¼ºdata : boneÀÇ node±¸¼º
1) ·¹ÆÛ·±½º ÆÄÀÏ; 0ÇÁ·¹ÀÓÀÇ bone position/rotation data triangle,texture map data
2) ¾Ö´Ï¸ÞÀÌ¼Ç ÆÄÀÏ; ¸ðµç ÇÁ·¹ÀÓÀÇ bone position/rotation data
# ¼½¼Çº° ±¸¼º
Header ----------------------------------------
¡°Version 1¡± ¹öÀüÀ» Ç¥½Ã
¢¹ NodeÀÇ Hierarchy ±¸Á¶
Vertex Morphing ¹æ½Äó·³, ¸Å ÇÁ·¹ÀÓ¸¶´Ù »ï°¢ÇüÀÇ ¸ðµç Á¤º¸¸¦ °®´Â °ÍÀÌ ¾Æ´Ï¶ó, ´ÜÁö BoneÀÇ À§Ä¡°ª°ú ȸÀü°ªÀ» °®´Â ¾Ö´Ï¸ÞÀ̼ÇÀÌ´Ù. À̸¦ À§Çؼ ¸ðµç º»Àº ÇÏÀ̾î¶óÅ° ±¸Á¶( °èÃþ±¸Á¶)·Î ÀÌ·ç¾îÁ® ÀÖÀ¸¸ç, ÀÚ½Ä º»Àº ºÎ¸ð º»À» µû¶ó ¿òÁ÷ÀÌ°Ô µÈ´Ù. Áï, ÃÖ»óÀ§¿¡¼ ÃÖÇÏÀ§·Î À̾îÁö´Â ³ëµå(node)¸¸ ¾Ë°í ÀÖÀ¸¸é ½±°Ô ¿¡´Ï¸ÞÀ̼ÇÀ» ±¸ÇöÇÒ ¼ö Àִµ¥, ÀÚ½Ä º»Àº 3Â÷¿ø °ø°£»óÀÇ ºÎ¸ð º»À» Áß½ÉÀ¸·Î ȸÀüÇØ¾ß ÇÑ´Ù.
±×·¯±â À§Çؼ´Â, ÀÓÀÇÃà ȸÀüÀ» °¡´ÉÄÉ ÇÏ´Â Matrix°¡ ÇÊ¿äÇѵ¥, ÀÌ°ÍÀ» ÇØ°áÇØ ÁÖ´Â °ÍÀÌ Half_Life SDK¿¡ Æ÷ÇԵǾî ÀÖ´Â
AngleMatrix ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö´Â 3Â÷¿ø °ø°£»óÀÇ ÇϳªÀÇ º¤Å͸¦ ÀÓÀÇÀÇ Ãà¿¡ ´ëÇØ È¸Àü½Ãų ¼ö ÀÖµµ·Ï ÇÏ´Â Matrix¸¦ ¸¸µé¾î ÁØ´Ù.
#.ȸÀü Matrix
typedef float vec_t;
typedef vec_t vec3_t[3]; // x,y,z
void
AngleMatrix( const vec3_t angles, float (*matrix)[4] )
{
float angle;
float sr, sp, sy, cr, cp, cy;
angle = angles[2] * (Q_PI*2 / 360);
sy = sin(angle);
cy = cos(angle);
angle = angles[1] * (Q_PI*2 / 360);
sp = sin(angle);
cp = cos(angle);
angle = angles[0] * (Q_PI*2 / 360);
sr = sin(angle);
cr = cos(angle);
// matrix = (Z * Y) * X
matrix[0][0] = cp*cy;
matrix[1][0] = cp*sy;
matrix[2][0] = -sp;
matrix[0][1] = sr*sp*cy+cr*-sy;
matrix[1][1] = sr*sp*sy+cr*cy;
matrix[2][1] = sr*cp;
matrix[0][2] = (cr*sp*cy+-sr*-sy);
matrix[1][2] = (cr*sp*sy+-sr*cy);
matrix[2][2] = cr*cp;
matrix[0][3] = 0.0;
matrix[1][3] = 0.0;
matrix[2][3] = 0.0;
}
#.¿ùµå ÁÂÇ¥ °áÁ¤
ÀÌÁ¦, À§ÀÇ ÇÔ¼ö·Î ¸¸µç Matrix¸¦ ÅëÇØ ÀÚ½Ä º»À» ºÎ¸ð º»À» Áß½ÉÀ¸·Î ȸÀü½ÃŲ ÈÄ, ºÎ¸ð º»À¸·ÎºÎÅÍÀÇ »ó´ëÀû À§Ä¡°ªÀ» ºÎ¸ð º»ÀÇ ¿ùµå ÁÂÇ¥¿¡ ´õÇÏ¿© ÀÚ½Ä º»ÀÇ ¿ùµå ÁÂÇ¥¸¦ °áÁ¤ÇÑ´Ù. ÀÌ·¸°Ô ´õÇÏ´Â ÀÌÀ¯´Â SMD FileÀÇ SkeletonÀ¸·ÎºÎÅÍ ´ÜÁö ºÎ¸ð¿Í ÀڽĻçÀÌÀÇ »ó´ëÀû À§Ä¡°ª°ú ȸÀü°ª¸¸ÀÌ ExportµÇ±â ¶§¹®ÀÌ´Ù.( SMD´Â 2°³·Î ExportµÈ´Ù. Çϳª´Â Reference, Çϳª´Â Skeleton. Reference·ÎºÎÅÍ ³ëµå, »ï°¢Çü, ±âÁØ º»¿¡ °üÇÑ Á¤º¸¸¦ ¾ò°í, SkeletonÀ¸·ÎºÎÅÍ º» ¿¡´Ï¸ÞÀ̼ǿ¡ °üÇÑ Á¤º¸¸¦ ¾ò´Â´Ù. )
±× ´ÙÀ½¿¡, ÀÚ½Ä º»Àº ±×°Í¿¡ ¿¬°áµÈ ¶Ç´Ù¸¥ º»ÀÇ ºÎ¸ð º»ÀÌ µÇ°í, ÀÌ·± ½ÄÀ¸·Î ³ëµå¸¦ µû¶ó ÃÖÇÏÀ§ º»±îÁöÀÇ ¿ùµå ÁÂÇ¥¸¦ ¸¸µé°Ô µÈ´Ù.
#.Data ±¸Á¶
MAX¿¡¼ SMD FileÀ» ExportÇÒ ¶§, ¸ðµç vertexµéÀº World ÁÂÇ¥·Î ÀúÀåµÈ´Ù. ±×·¯³ª,¸ðµç BoneÀº ºÎ¸ð¿¡ ´ëÇÑ »ó´ë ÁÂÇ¥·Î ÀúÀåµÇ¾î ÀÖÀ¸¹Ç·Î À̸¦ °°µµ·Ï ÇØ¾ß ÇÑ´Ù.
AngleIMatrixÇÔ¼ö´Â vertex¸¦ ±×°ÍÀÌ ¼ÓÇÑ º»¿¡ ´ëÇÑ ÁÂÇ¥·Î ¸¸µé¾î ÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¸ðµç ÁÂÇ¥´Â ¸Å ÇÁ·¹ÀÓ¸¶´Ù Ç×»ó ±×°ÍÀÌ ¼ÓÇÑ º»À» µû¶ó ¿òÁ÷ÀÌ°Ô µÈ´Ù.
ÀÌ¿Í °°ÀÌ Çѹø¸¸ Vertex¸¦ º»¿¡ ±Í¼Ó½ÃÅ°¸é, ¸ðµç ÇÁ·¹ÀÓ ¸¶´Ù Vertexµé¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë ÇÊ¿ä°¡ ¾ø°Ô µÇ°í, ´ÜÁö ÇÁ·¹ÀÓ ¸¶´Ù ¿¡´Ï¸ÞÀ̼ǿ¡ µû¶ó º¯ÇÏ´Â BoneÀÇ À§Ä¡°ª ¹× ȸÀü°ª¿¡ ´ëÇÑ Á¤º¸¸¸ ÇÊ¿äÇÒ »ÓÀÌ´Ù. Vertex Morphing°ú ºñ±³ÇØ Data·®ÀÌ »ó´çÈ÷ ÁÙ¾î µç´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.
==> Max¿¡¼ ExportµÇ±â ¶§¹®¿¡ ³»ºÎÀûÀ¸·Î
OpenGL ¹æ½ÄÀ¸·Î ó¸®ÇÏ°í
D3D¹æ½ÄÀ¸·Î Ãâ·ÂÇÒ ¶§´Â ÃÖÁ¾ ÁÂÇ¥¿¡¼ y,z¸¦ ¹Ù²ãÁØ´Ù.
#.Âü°í ÇÔ¼ö
*.
D3DXMatrixRotationYawPitchRoll ÇÔ¼ö ; ¿ä, ÇÇÄ¡, ¹× ·ÑÀ» ÁöÁ¤ÇØ Çà·ÄÀ» »ý¼º ÇÑ´Ù.
D3DXMATRIX *
D3DXMatrixRotationYawPitchRoll(
D3DXMATRIX *pOut, - [in, out] ¿¬»ê °á°úÀÎ
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
FLOAT Yaw, -
in y ÃàÀ» Áß½ÉÀ¸·Î ÇÏ´Â ¿ä (¶óµð¾È ´ÜÀ§).
FLOAT Pitch, -
in x ÃàÀ» Áß½ÉÀ¸·Î ÇÏ´Â ÇÇÄ¡ (¶óµð¾È ´ÜÀ§).
FLOAT Roll ); -
in z ÃàÀ» Áß½ÉÀ¸·Î ÇÏ´Â ·Ñ (¶óµð¾È ´ÜÀ§).
¹Ýȯ°ª ; ÁöÁ¤µÈ ¿ä¡¤ÇÇÄ¡¡¤·ÑÀ» °¡Áö´Â
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
*.
D3DXMatrixInverse ÇÔ¼ö ; Çà·ÄÀÇ ¿ªÇà¿À» °è»êÇÑ´Ù.
D3DXMATRIX *
D3DXMatrixInverse(
D3DXMATRIX *pOut, - [in, out] ¿¬»ê °á°úÀÎ
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
FLOAT *pDeterminant, - [in, out] Çà·ÄÀÇ Çà·Ä½ÄÀ» Æ÷ÇÔÇÑ FLOAT °ªÀÇ Æ÷ÀÎÅÍ.
Çà·Ä½ÄÀÌ ºÒ¿äÀÇ °æ¿ì´Â, ÀÌ ÆĶó¹ÌÅÍ¿¡ NULL ¸¦ ¼³Á¤ÇÑ´Ù.
CONST
D3DXMATRIX *pM ); -
in ó¸®ÀÇ ±âº»À¸·Î µÇ´Â
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¹Ýȯ°ª ; Çà·ÄÀÇ ¿ªÇà¿ÀÎ
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¿ªÇà¿ÀÇ °è»êÀÌ ½ÇÆÐÇßÀ» °æ¿ì´Â, NULL ¸¦ µ¹·ÁÁØ´Ù.
ÀÌ ÇÔ¼öÀÇ ¹Ýȯ°ªÀº,pOut ÆĶó¹ÌÅÍÀÇ ¹Ýȯ°ª°ú °°´Ù. µû¶ó¼,
D3DXMatrixInverse ÇÔ¼ö¸¦ ´Ù¸¥ ÇÔ¼öÀÇ Àμö·Î¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
*.
D3DXMatrixTranspose ÇÔ¼ö ; Çà·ÄÀÇ ÀüÄ¡Çà·ÄÀ» µ¹·ÁÁØ´Ù.
D3DXMATRIX *
D3DXMatrixTranspose(
D3DXMATRIX *pOut, - [in, out] ¿¬»ê °á°úÀÎ
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
CONST
D3DXMATRIX *pM ); - ó¸®ÀÇ ±âº»À¸·Î µÇ´Â
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¹Ýȯ°ª ; Çà·ÄÀÇ ÀüÄ¡Çà·ÄÀÎ
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
*.
D3DXVec3Transform ÇÔ¼ö ; ÁöÁ¤µÈ Çà·Ä¿¡ ÀÇÇØ º¤ÅÍ (x, y, z, 1)¸¦ º¯È¯ ÇÑ´Ù.
D3DXVECTOR4 *WINAPI
D3DXVec3Transform(
D3DXVECTOR4 *pOut, - pOut [in, out] ¿¬»ê °á°úÀÎ
D3DXVECTOR4 ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
CONST
D3DXVECTOR3 *pV, -
in ó¸®ÀÇ ±âº»À¸·Î µÇ´Â
D3DXVECTOR3 ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
CONST
D3DXMATRIX *pM ); -
in ó¸®ÀÇ ±âº»À¸·Î µÇ´Â
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¹Ýȯ°ª ; º¯È¯ µÈ º¤ÅÍÀÇ
D3DXVECTOR4 ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
*.3
DXMatrixMultiply ÇÔ¼ö ; 2 °³ÀÇ Çà·ÄÀÇ ÀûÀ» °è»êÇÑ´Ù.
D3DXMATRIX *
D3DXMatrixMultiply(
D3DXMATRIX *pOut, - [in, out] ¿¬»ê °á°úÀÎ
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
CONST
D3DXMATRIX *pM1, -
in ó¸®ÀÇ ±âº»À¸·Î µÇ´Â
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
CONST
D3DXMATRIX *pM2 ); -
in ó¸®ÀÇ ±âº»À¸·Î µÇ´Â
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¹Ýȯ°ª ; 2 °³ÀÇ Çà·ÄÀÇ ÀûÀÎ
D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¢¹
D3DXMatrixRotationYawPitchRoll ÇÔ¼ö´Â ȸÀüÀ¸·Î Çà·ÄÀ» ¸¸µé ¶§,
Roll (Z) * Pitch(X) * Yaw(Y) ¼ø¼·Î °è»ê
¢¹ ¿À¸¥¼Õ ÁÂÇ¥°è¿¡¼´Â
Yaw´Â ZÃà¿¡ ´ëÇÑ ¹Ý½Ã°è¹æÇâ ȸÀü
Pitch´Â YÃà¿¡ ´ëÇÑ ¹Ý½Ã°è¹æÇâ ȸÀü
RollÀº XÃà¿¡ ´ëÇÑ ¹Ý½Ã°è¹æÇâ ȸÀü
°í·Î, Z * Y * X ¼øÀ¸·Î °öÇÏ¿© ȸÀü Çà·Ä½ÄÀ» ¸¸µç´Ù.
¸Þ¸ðÀåÀ¸·Î µ¹¾Æ°¡±â