¼¼Á¡ÀÇ ¹æÇâ ÆÇ´Ü

Á¡ A, B, C °¡ ÀÖÀ» ¶§, ÁÂÇ¥¿¡ µû¶ó¼­ CW( ½Ã°è¹æÇâ ), CCW(  ¹Ý½Ã°è ¹æÇâ )ÀÌ µÉ ¼öÀÖ´Ù.
¹æÇâÀ» ÆÇ´Ü ÇÒ·Á¸é, º¤ÅÍÀÇ ¿ÜÀûÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù.

¿À¸¥¼Õ ¹ýÄ¢¿¡ ÀÇÇØ ¼¼ Á¡ÀÇ ¹æÇâÀÌ ½Ã°è¹æÇâÀÌ¸é º¤ÅÍÀÇ ¿ÜÀûÀº À½¼ö(-)°¡ µÇ°í ½Ã°è ¹Ý´ë ¹æÇâÀÌ¸é ¾ç¼ö(+)°¡ µÈ´Ù.
 

º¤ÅÍ v1 = ( Á¡B - Á¡A ) = (Bx - Ax,  By - Ay, 0 )
º¤ÅÍ v2 = ( Á¡C - Á¡A ) = (Cx - Ax, Cy - Ay, 0 )

°á°ú)   º¤ÅÍ v1°ú v2ÀÇ ¿ÜÀû  = v1 X v2 = ( 0, 0, BxCy - AyBx - AxCy - ByCx + AxBy + AyCx )

°á°ú ½Ä¿¡ ÀÇÇØ Z ¼ººÐÀÌ ¾ç¼ö(+)ÀÌ¸é ¹Ý½Ã°è ¹æÇâ, À½¼ö(-)ÀÌ¸é ½Ã°è ¹æÇâÀÌ µÈ´Ù.

 

´ÙÀÌ·ºÆ® X ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ¼¼Á¡ÀÇ ³ë¸Ö °ªÀ» ±¸ÇØ º¸ÀÚ.

void ComputeNormal( D3DXVECTOR3* out, D3DXVECTOR3* p0, D3DXVECTOR3* p1, D3DXVECTOR3* p2 )

{

    D3DXVECTOR3 u = *p1 - *p0; 

    D3DXVECTOR3 v = *p2 - *p0;

 

      D3DXVec3Cross(out, &u, &v);

      D3DXVec3Normalize(out, out);

}

 

    // ¿©±â¼­ Å×½ºÆ® ÇÑ´Ù.

    D3DXVECTOR3 out;

    D3DXVECTOR3 p0 = D3DXVECTOR3( -1, -1, 0 );

    D3DXVECTOR3 p1 = D3DXVECTOR3( -1,  1, 0 );

    D3DXVECTOR3 p2 = D3DXVECTOR3(  1,  0, 0 );

 

    ComputeNormal( &out, &p0, &p1, &p2 ); //0, 0, -1 ¿Þ¼Õ ÁÂÇ¥°è¿¡¼­´Â ½Ã°è¹æÇâÀ¸·Î ±¸ÇÑ´Ù.

    ComputeNormal( &out, &p0, &p2, &p1 ); //0, 0, 1 ¿À¸¥¼Õ ÁÂÇ¥°è¿¡¼­´Â ¹Ý½Ã°è¹æÇâÀ¸·Î ±¸ÇÑ´Ù.

¶È °°Àº Á¡ÀÌÁö¸¸ ½Ã°è ¹æÇâÀ¸·Î ±¸Çϸé z °ªÀÌ À½¼ö°¡ ³ª¿ÀÁö¸¸, ¿À¸¥¼Õ ÁÂÇ¥°èÀÎ ¹Ý½Ã°è ¹æÇâÀ¸·Î °è»êÇϸé z°ªÀº ¾ç¼ö°¡ ³ª¿Â´Ù.

¿Þ¼Õ°ú ¿À¸¥¼Õ ÁÂÇ¥°è¿¡ µû¶ó ³ë¸Ö °ªÀ» ±¸ÇÒ‹š´Â ȸÀü ¹æÇâÀÌ ´Ù¸£´Ù.