@ 2004-08-03 @
# º» ¾Ö´Ï´Â ½ºÆ¼Äª ¾Ö´Ï¿Í ½ºÅ°´× ¾Ö´Ï µÎ°³·Î ³ª´ ¼ö Àִµ¥,
½ºÆ¼Äª ¾Ö´ÏÀÇ ´ëÇ¥ÀûÀÎ ÆÄÀÏÆ÷¸äÀÌ 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
<ID> ¢ç Bone index,
<PosX><PosY><PosZ> ¢ç ºÎ¸ð¿¡¼ ºÎÅÍÀÇ Local À§Ä¡°ª
- ºÎ¸ð·Î ºÎÅÍ <PosX><PosY><PosZ> ¶³¾îÁø Á¡ÀÇ(ȸÀüÀÌ ¾ø´Â ¿ø·¡ ÁÂÇ¥) <RotX><RotY<RotZ> ¢ç Local Euler ¶óµð¾È ȸÀü°ª,ºÎ¸ðÀÇ local ȸÀü°ª ...
time 1 ¾Ö´Ï¸ÞÀ̼ÇÀÇ °æ¿ì time ºí·ÏÀÌ Ãß°¡
... end
Triangles --------------------------------------
Triangles ¸®½ºÆ®
¡°bitmapname.bmp¡±<Parent><PosX><PosY><PosZ><NormX><NormY><NormZ><TexU><TexV> ¡¦
<Parent> ¢ç vertexÀÇ ºÎ¸ð boneÀÇ ID¹øÈ£
¹öÅؽº 3°³¾¿ ±â·Ï<PosX><PosY><PosZ> ¢ç ¿ùµå ÁÂÇ¥°è¿¡¼ÀÇ vertexÀ§Ä¡°ª <NormX><NormY><NormZ> ¢ç ½º¹«½ÌÀ» À§ÇÑ vertex normal vector <TexU><TexV> ¢ç vertexÀÇ texture ÁÂÇ¥°ª ... end
¢¹ NodeÀÇ Hierarchy ±¸Á¶
Vertex Morphing ¹æ½Äó·³, ¸Å ÇÁ·¹ÀÓ¸¶´Ù »ï°¢ÇüÀÇ ¸ðµç Á¤º¸¸¦ °®´Â °ÍÀÌ ¾Æ´Ï¶ó, ´ÜÁö BoneÀÇ À§Ä¡°ª°ú ȸÀü°ªÀ» °®´Â ¾Ö´Ï¸ÞÀ̼ÇÀÌ´Ù. À̸¦ À§Çؼ ¸ðµç º»Àº ÇÏÀ̾î¶óÅ° ±¸Á¶( °èÃþ±¸Á¶)·Î ÀÌ·ç¾îÁ® ÀÖÀ¸¸ç, ÀÚ½Ä º»Àº ºÎ¸ð º»À» µû¶ó ¿òÁ÷ÀÌ°Ô µÈ´Ù. Áï, ÃÖ»óÀ§¿¡¼ ÃÖÇÏÀ§·Î À̾îÁö´Â ³ëµå(node)¸¸ ¾Ë°í ÀÖÀ¸¸é ½±°Ô ¿¡´Ï¸ÞÀ̼ÇÀ» ±¸ÇöÇÒ ¼ö Àִµ¥, ÀÚ½Ä º»Àº 3Â÷¿ø °ø°£»óÀÇ ºÎ¸ð º»À» Áß½ÉÀ¸·Î ȸÀüÇØ¾ß ÇÑ´Ù.
#.ȸÀü Matrix±×·¯±â À§Çؼ´Â, ÀÓÀÇÃà ȸÀüÀ» °¡´ÉÄÉ ÇÏ´Â Matrix°¡ ÇÊ¿äÇѵ¥, ÀÌ°ÍÀ» ÇØ°áÇØ ÁÖ´Â °ÍÀÌ Half_Life SDK¿¡ Æ÷ÇԵǾî ÀÖ´Â AngleMatrix ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö´Â 3Â÷¿ø °ø°£»óÀÇ ÇϳªÀÇ º¤Å͸¦ ÀÓÀÇÀÇ Ãà¿¡ ´ëÇØ È¸Àü½Ãų ¼ö ÀÖµµ·Ï ÇÏ´Â 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(
*.D3DXMatrixInverse ÇÔ¼ö ; Çà·ÄÀÇ ¿ªÇà¿À» °è»êÇÑ´Ù.
D3DXMATRIX *pOut, - [in, out] ¿¬»ê °á°úÀÎ D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¹Ýȯ°ª ; ÁöÁ¤µÈ ¿ä¡¤ÇÇÄ¡¡¤·ÑÀ» °¡Áö´Â D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ. FLOAT Yaw, - in y ÃàÀ» Áß½ÉÀ¸·Î ÇÏ´Â ¿ä (¶óµð¾È ´ÜÀ§). FLOAT Pitch, - in x ÃàÀ» Áß½ÉÀ¸·Î ÇÏ´Â ÇÇÄ¡ (¶óµð¾È ´ÜÀ§). FLOAT Roll ); - in z ÃàÀ» Áß½ÉÀ¸·Î ÇÏ´Â ·Ñ (¶óµð¾È ´ÜÀ§).
D3DXMATRIX *D3DXMatrixInverse(
*.D3DXMatrixTranspose ÇÔ¼ö ; Çà·ÄÀÇ ÀüÄ¡Çà·ÄÀ» µ¹·ÁÁØ´Ù.
D3DXMATRIX *pOut, - [in, out] ¿¬»ê °á°úÀÎ D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¹Ýȯ°ª ; Çà·ÄÀÇ ¿ªÇà¿ÀÎ D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ. FLOAT *pDeterminant, - [in, out] Çà·ÄÀÇ Çà·Ä½ÄÀ» Æ÷ÇÔÇÑ FLOAT °ªÀÇ Æ÷ÀÎÅÍ.
Çà·Ä½ÄÀÌ ºÒ¿äÀÇ °æ¿ì´Â, ÀÌ ÆĶó¹ÌÅÍ¿¡ NULL ¸¦ ¼³Á¤ÇÑ´Ù.
CONST D3DXMATRIX *pM ); - in ó¸®ÀÇ ±âº»À¸·Î µÇ´Â D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¿ªÇà¿ÀÇ °è»êÀÌ ½ÇÆÐÇßÀ» °æ¿ì´Â, NULL ¸¦ µ¹·ÁÁØ´Ù.
ÀÌ ÇÔ¼öÀÇ ¹Ýȯ°ªÀº,pOut ÆĶó¹ÌÅÍÀÇ ¹Ýȯ°ª°ú °°´Ù. µû¶ó¼,D3DXMatrixInverse ÇÔ¼ö¸¦ ´Ù¸¥ ÇÔ¼öÀÇ Àμö·Î¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
D3DXMATRIX *D3DXMatrixTranspose(
*.D3DXVec3Transform ÇÔ¼ö ; ÁöÁ¤µÈ Çà·Ä¿¡ ÀÇÇØ º¤ÅÍ (x, y, z, 1)¸¦ º¯È¯ ÇÑ´Ù.
D3DXMATRIX *pOut, - [in, out] ¿¬»ê °á°úÀÎ D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¹Ýȯ°ª ; Çà·ÄÀÇ ÀüÄ¡Çà·ÄÀÎ D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ. CONST D3DXMATRIX *pM ); - ó¸®ÀÇ ±âº»À¸·Î µÇ´Â D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
D3DXVECTOR4 *WINAPI D3DXVec3Transform(
*.3DXMatrixMultiply ÇÔ¼ö ; 2 °³ÀÇ Çà·ÄÀÇ ÀûÀ» °è»êÇÑ´Ù.
D3DXVECTOR4 *pOut, - pOut [in, out] ¿¬»ê °á°úÀÎ D3DXVECTOR4 ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¹Ýȯ°ª ; º¯È¯ µÈ º¤ÅÍÀÇ D3DXVECTOR4 ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ. CONST D3DXVECTOR3 *pV, - in ó¸®ÀÇ ±âº»À¸·Î µÇ´Â D3DXVECTOR3 ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ. CONST D3DXMATRIX *pM ); - in ó¸®ÀÇ ±âº»À¸·Î µÇ´Â D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
D3DXMATRIX *D3DXMatrixMultiply(
¢¹ D3DXMatrixRotationYawPitchRoll ÇÔ¼ö´Â ȸÀüÀ¸·Î Çà·ÄÀ» ¸¸µé ¶§,
D3DXMATRIX *pOut, - [in, out] ¿¬»ê °á°úÀÎ D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
¹Ýȯ°ª ; 2 °³ÀÇ Çà·ÄÀÇ ÀûÀÎ D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ. CONST D3DXMATRIX *pM1, - in ó¸®ÀÇ ±âº»À¸·Î µÇ´Â D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ. CONST D3DXMATRIX *pM2 ); - in ó¸®ÀÇ ±âº»À¸·Î µÇ´Â D3DXMATRIX ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ.
Roll (Z) * Pitch(X) * Yaw(Y) ¼ø¼·Î °è»ê
¢¹ ¿À¸¥¼Õ ÁÂÇ¥°è¿¡¼´Â
Yaw´Â ZÃà¿¡ ´ëÇÑ ¹Ý½Ã°è¹æÇâ ȸÀü
¸Þ¸ðÀåÀ¸·Î µ¹¾Æ°¡±âPitch´Â YÃà¿¡ ´ëÇÑ ¹Ý½Ã°è¹æÇâ ȸÀü RollÀº XÃà¿¡ ´ëÇÑ ¹Ý½Ã°è¹æÇâ ȸÀü °í·Î, Z * Y * X ¼øÀ¸·Î °öÇÏ¿© ȸÀü Çà·Ä½ÄÀ» ¸¸µç´Ù. |
"Say it, don't spray it!" DropDown_MenuList namespace ¸Þ¸ðÀå_Cg Ã¥°¥ÇÇ_book_KnowHow |