Rotation Matrix

 

Rotation Matrix¿¡ ´ëÇØ¼­ ¾Ë¾Æº»´Ù.

´ÙÀÌ·ºÆ® X´Â ¿Þ¼ÕÁÂÇ¥°è¸¦ »ç¿ëÇϰí Maxtrix´Â Çà¿ì¼±(row major), OpenGLÀº ¿­¿ì¼±(column major)À»
»ç¿ëÇÑ´Ù.
3DSMAX¿¡¼­ º¼¼ö ÀÖ´Â ÁÂÇ¥°¡ Z-UP ¿À¸¥¼Õ ÁÂÇ¥°èÀÌ´Ù.

¿ÀÀÏ·¯ ȸÀü¿¡ ´ëÇØ ¼³¸íÇÑ´Ù. ¿À¸¥¼Õ ÁÂÇ¥°è¿Í ¿Þ¼Õ ÁÂÇ¥°èÀÇ  È¸Àü½ÄÀ» ¼­·Î ºñ±³ÇÏ¿©
¿Þ¼Ó ÁÂÇ¥°è¿Í ¿À¸¥¼Õ ÁÂÇ¥°èÀÇ Matrix Å¬·¡½º¸¦ ¸¸µé¾î º»´Ù.

X, Y, Z ÃàÀ» ȸÀüÇÒ ¶§, ȸÀü ±×¸²°ú °ø½ÄÀº ´ÙÀ½°ú °°´Ù.

 

X Ãà ȸÀü ( YZ Æò¸é )

Y Ãà ȸÀü (  ZX Æò¸é )

Z Ãà ȸÀü ( XY Æò¸é )

X' = x
Y' = y cos ¥è - z sin ¥è
Z' = y sin ¥è + z cos ¥è

X' = z sin ¥è + x cos ¥è
Y' = y
Z' = z cos ¥è - x sin ¥è

X' = x cos ¥è - y sin ¥è
Y' = x sin ¥è + y cos ¥è
Z' = z

XÃà ȸÀü°ú ZÃà ȸÀüÀº °íµîÇб³¶§ ÀÚÁÖ º¸´ø ¿ÀÀÏ·¯ ¹æ½ÄÀÇ È¸Àü º¯È¯ÀÌ´Ù.
YÃàÀÇ °æ¿ì´Â ZX Æò¸éÀ¸·Î 2D XY Æò¸é ó·³ º¸À̵µ·Ï ÇÒ·Á¸é ½Ã°è¹æÇâÀ¸·Î 90µµ ȸÀüÇØ¾ß ÇÑ´Ù.
90µµ Çϸé, ZÃàÀÌ XÃà ¿ªÇÒÀ» Çϰí XÃàÀÌ YÃà ¿ªÇÒÀ» ÇÑ´Ù. ±×·¡¼­ ½ÄÀº À§¿Í °°´Ù.

¿ÀÀÏ·¯ ¹æ½ÄÀÇ È¸Àü º¯È¯À» ¸ÅÆ®¸¯½º ¹æ½ÄÀ¸·Î º¯È¯ÇÏ¸é ´ÙÀ½°ú °°´Ù.

¿Þ¼Õ ÁÂÇ¥°è ¿À¸¥¼Õ ÁÂÇ¥°è
x Rotation

1

0

0

0

0

cos ¥è

sin ¥è

0

0

-sin ¥è

cos ¥è

0

0

0

0

1

y Rotation

cos ¥è

0

-sin ¥è

0

0

1

0

0

sin ¥è

0

cos ¥è

0

0

0

0

1

z Rotation

cos ¥è

sin ¥è

0

0

-sin ¥è

cos ¥è

0

0

0

0

1

0

0

0

0

1

x Rotation

1

0

0

0

0

cos ¥è

-sin ¥è

0

0

sin ¥è

cos ¥è

0

0

0

0

1

y Rotation

cos ¥è

0

sin ¥è

0

0

1

0

0

-sin ¥è

0

cos ¥è

0

0

0

0

1

z Rotation

cos ¥è

-sin ¥è

0

0

sin ¥è

cos ¥è

0

0

0

0

1

0

0

0

0

1

 

¿Þ¼Õ ÁÂÇ¥°è

¿À¸¥¼Õ ÁÂÇ¥°è

X RotationÀÇ Çà·Ä½ÄÀÌ´Ù

 

1

0

0

0

0

cos ¥è

sin ¥è

0

0

-sin ¥è

cos ¥è

0

0

0

0

1

[  x, y, z, 1 ]

 

X RotationÀÇ Çà·Ä½ÄÀÌ´Ù

1

0

0

0

0

cos ¥è

-sin ¥è

0

0

sin ¥è

cos ¥è

0

0

0

0

1

x

 

y

 

z

 

1

 
X Rotation X Rotation

x' = x
y' = ycos¥è - zsin¥è
z' = ysin¥è + zcos¥è

x' = x
y' = ycos¥è - zsin¥è
z' = ysin¥è + zcos¥è

Y Rotation Y Rotation

x' = xcos¥è + zsin¥è
y' = y
z' = -xsin¥è + zcos¥è = zcos¥è - xsin¥è

x' = xcos¥è + zsin¥è
y' = y
z' = -xsin¥è + zcos¥è = zcos¥è - xsin¥è

Z Rotation Z Rotation

x' = xcos¥è - ysin¥è
y' = xsin¥è + ycos¥è
z' = z

x' = xcos¥è - ysin¥è
y' = xsin¥è + ycos¥è
z' = z

Çà¿ì¼± matrix Ŭ·¡½º´Â LMaxtrix Ŭ·¡½º

¿­¿ì¼± matrix Ŭ·¡½º´Â RMatrix Ŭ·¡½º

½ÇÁ¦ ¾î¶»°Ô »ç¿ëµÇ´ÂÁö º¸ÀÚ ÄÚµå´Â ´ÙÀ½°ú °°´Ù.
GetRightHandCoordinate()°¡ trueÀÌ¸é ¿À¸¥¼Õ ÁÂÇ¥°èÀ϶§ÀÌ´Ù. ÁÖ¼®Àº D3DXMATRIX·Î
ó¸® ÇÒ¶§ÀÌ´Ù.

void CTestApp::Render()

{

    //m_cameraRef.fRotateX = -14.0f;

    //m_cameraRef.fRotateX = 0.0f;

    if( GetRightHandCoordinate() )

    {

#if  0

        D3DXMATRIX   matTranslation, matRot, matWorld;

        D3DXMatrixTranslation( &matTranslation, 0.0f, m_cameraRef.wheel * 2.0f, 0.0f);

        D3DXMatrixRotationYawPitchRoll( &matRot, 0.0f, D3DXToRadian(-m_cameraRef.fRotateY), D3DXToRadian(-m_cameraRef.fRotateX));

 

        IDirect3DDevice9 * pDevice = m_pGraphics->GetDevice();

 

        matWorld = matRot * matTranslation;

        pDevice->SetTransform( D3DTS_WORLD, &matWorld);

 

        m_pXFile->Draw();

#else   

        RMatrix matTranslation;

        matTranslation.Translate( 0.0f, m_cameraRef.wheel * 2.0f, 0.0f);

        RMatrix  matRot;

        matRot.YawPitchRoll( DEGTORAD(-m_cameraRef.fRotateX), DEGTORAD(-m_cameraRef.fRotateY), 0.0f );

        matRot = matTranslation * matRot;

        matRot.Transpose();

 

        IDirect3DDevice9 * pDevice = m_pGraphics->GetDevice();

        D3DXMATRIX matWorld = matRot;

        pDevice->SetTransform( D3DTS_WORLD, &matWorld);

 

        m_pXFile->Draw();

#endif

    }

    else

    {

#if  0

        D3DXMATRIX   matTranslation, matRot, matWorld;

        D3DXMatrixTranslation( &matTranslation, 0.0f, 0.0f, m_cameraRef.wheel * 2.0f);

        D3DXMatrixRotationYawPitchRoll( &matRot, D3DXToRadian(m_cameraRef.fRotateX), D3DXToRadian(m_cameraRef.fRotateY), 0.0f );

        IDirect3DDevice9 * pDevice = m_pGraphics->GetDevice();

 

        matWorld = matRot * matTranslation;

        pDevice->SetTransform( D3DTS_WORLD, &matWorld);

 

        m_pXFile->Draw();

#else

        LMatrix matTranslation;

        matTranslation.Translate(0.0f, 0.0f, m_cameraRef.wheel * 2.0f);

        LMatrix  matRot;

        matRot.YawPitchRoll( DEGTORAD(m_cameraRef.fRotateX), DEGTORAD(m_cameraRef.fRotateY), 0.0f );

        matRot = matRot * matTranslation;

        D3DXMATRIX matWorld = matRot;

 

        IDirect3DDevice9 * pDevice = m_pGraphics->GetDevice();

        pDevice->SetTransform( D3DTS_WORLD, &matWorld);

        m_pXFile->Draw();

 

        m_pXFile->Draw();

#endif

    }

}