MoniWiki¸Þ¸ðÀå_SMD
Login:
Password:
´ë¹®|ã±â|¹Ù²ï±Û|¸ñ·Ï|¸Þ¸ðÀå|Ã¥°¥ÇÇ|¿¬²É|¸µÅ©
Edit Diff Reload Search Print Info Mail Help RSS

@ 2004-08-03 @

  SMD(Half-Life File Format)

# º» ¾Ö´Ï´Â ½ºÆ¼Äª ¾Ö´Ï¿Í ½ºÅ°´× ¾Ö´Ï µÎ°³·Î ³ª´­ ¼ö Àִµ¥,
½ºÆ¼Äª ¾Ö´ÏÀÇ ´ëÇ¥ÀûÀÎ ÆÄÀÏÆ÷¸äÀÌ 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¡± ¹öÀüÀ» Ç¥½Ã

nodes ----------------------------------------
Node tree »ÀÀÇ ¸ðµç º»ÀÇ ¸ñ·ÏÀ» ³ªÅ¸³½´Ù. - ºÎ¸ð°¡ ¾ø´Â Objects´Â ºÎ¸ðÀÇ ID°¡ -1ÀÌ´Ù.

<ID> ¡°Bone Name¡± <Parent ID>
¡¦
end

Skeleton --------------------------------------
Time 0
<ID><PosX><PosY><PosZ><RotX><RotY<RotZ>

<ID> ¢ç Bone index,
<PosX><PosY><PosZ> ¢ç ºÎ¸ð¿¡¼­ ºÎÅÍÀÇ Local À§Ä¡°ª
<RotX><RotY<RotZ> ¢ç Local Euler ¶óµð¾È ȸÀü°ª,ºÎ¸ðÀÇ local ȸÀü°ª
- ºÎ¸ð·Î ºÎÅÍ <PosX><PosY><PosZ> ¶³¾îÁø Á¡ÀÇ(ȸÀüÀÌ ¾ø´Â ¿ø·¡ ÁÂÇ¥)
<RotX><RotY><RotZ> ȸÀü°ª
...

time 1 ¾Ö´Ï¸ÞÀ̼ÇÀÇ °æ¿ì time ºí·ÏÀÌ Ãß°¡
...
end

Triangles --------------------------------------
Triangles ¸®½ºÆ®

¡°bitmapname.bmp¡±
<Parent><PosX><PosY><PosZ><NormX><NormY><NormZ><TexU><TexV>
¡¦
<Parent> ¢ç vertexÀÇ ºÎ¸ð boneÀÇ ID¹øÈ£
<PosX><PosY><PosZ> ¢ç ¿ùµå ÁÂÇ¥°è¿¡¼­ÀÇ vertexÀ§Ä¡°ª
<NormX><NormY><NormZ> ¢ç ½º¹«½ÌÀ» À§ÇÑ vertex normal vector
<TexU><TexV> ¢ç vertexÀÇ texture ÁÂÇ¥°ª
¹öÅؽº 3°³¾¿ ±â·Ï
...
end

¢¹ 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 ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.

*.3DXMatrixMultiply ÇÔ¼ö ; 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 ¼øÀ¸·Î °öÇÏ¿© ȸÀü Çà·Ä½ÄÀ» ¸¸µç´Ù.

{_r} ¸Þ¸ðÀåÀ¸·Î µ¹¾Æ°¡±â

December, 2024
1234567
891011121314
15161718192021
22232425262728
293031 

"Say it, don't spray it!"

DropDown_MenuList
namespace
¸Þ¸ðÀå_Cg
Ã¥°¥ÇÇ_book_KnowHow
last modified 2004-08-17 10:03:41
°íÄ¡±â|ã±â|ÂÊ Áö¿ì±â|ºñ½ÁÇÑ ÂÊ Valid XHTML 1.0! Valid CSS! powerd by MoniWiki
0.2205 sec