Object Oriented Bounding Box ¸¦ ÀÌ¿ëÇÑ Collision Detection

96419-044

¾È¿ø¼±

Ãâó; http://mimosa.snu.ac.kr/~rabbit2/

 

<¸ñÂ÷>

  1. ¼Ò°³±Û
  2. ÀÌ·Ð
  3. ÄÚµå ´Ù¿î·Îµå ¹× »ç¿ë¹ý
  4. Âü°í ¹®Çå
  5. À¥ÆäÀÌÁö ´Ù¿î·Îµå

 

1. ¼Ò°³±Û

Áö±Ý±îÁö ¸®¼­Ä¡ ÁÖÁ¦·Î BSP tree ¶ó´øÁö bounding sphere¿¡ ÀÇÇÑ collision detection(ÀÌÇÏ CD)Àº ¸¹ÀÌ ÀÖ¾ú´Âµ¥, ±×¿¡ ºñÇØ bounding box¿¡ ÀÇÇÑ CD¿¡ ´ëÇÑ ±ÛÀº ¾ø¾ú´ø °Í °°´Ù. ¹°·Ð, bounding sphere¿¡ ÀÇÇÑ CDÀÇ ¾²ÀÓ»õµµ ¸¹Áö¸¸(¿¹¸¦ µé¾î ´ç±¸°ø¿¡ ÀÇÇÑ CD¶ó´øÁö), »ý°¢ÇØ º¸¸é ¿ì¸® ÁÖÀ§¿¡ ÀÖ´Â ¹°Ã¼ Áß¿¡¼­ µÕ±Ù °Íº¸´Ù´Â ³×¸ð³­ °ÍÀÌ ÈξÀ ´õ ¸¹´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ¸¸ÀÏ Á÷À°¸éü¿¡ °¡±î¿î ¹°Ã¼¸¦ bounding sphere·Î ¸ðµ¨¸µÇÏ°Ô µÇ¸é, ¹Ø¿¡ ±×¸²¿¡¼­ º¼ ¼ö ÀÖµíÀÌ ¸¹Àº °ø°£ÀÌ ³²°Ô µÇ°í, ÀÌ °ø°£À» ÁÙÀ̱â À§Çؼ­´Â depth°¡ ¿©·¯ ·¹º§ÀÎ sphere tree¸¦ ±¸¼ºÇÒ ¼ö ¹Û¿¡ ¾ø´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í bounding sphere°¡ ³Î¸® ÀÌ¿ëµÇ´Â °¡Àå Å« ÀÌÀ¯´Â, bounding sphere°¡ ±¸ÇöÇϱⰡ °¡Àå ½±±â ¶§¹®ÀÎ °Í °°´Ù. Bounding sphere·Î ÀÏ´Ü ¸ðµ¨¸µÇÏ°í ³ª¸é CD¸¦ Çϱâ À§Çؼ­ ´Ü¼øÈ÷ µÎ ±¸ »çÀÌÀÇ °Å¸®¸¦ ÃøÁ¤Çؼ­ °¢ ±¸ÀÇ ¹ÝÁö¸§ÀÇ ÇÕ°ú ºñ±³Çϱ⸸ ÇÏ¸é µÈ´Ù.
Bounding box
¿¡ ÀÇÇÑ ¸ðµ¨¸µÀº axis-aligned bounding box(ÀÌÇÏ AABB)¿Í object-oriented bounding box(ÀÌÇÏ OBB) µÎ °¡Áö ¹æ¹ýÀÌ ÀÖ´Ù. AABB´Â bounding box¸¦ ÀâÀ» ¶§ Ç×»ó world coordinate systemÀÇ 3°³ÀÇ Ãà°ú ÆòÇàÇÑ ¹æÇâÀ¸·Î¸¸ Àâ´Â °ÍÀÌ°í, ÀÌ°ÍÀº bounding sphere¿Í ¸¶Âù°¡Áö·Î ±¸ÇöÇϱâ´Â ¸Å¿ì ½¬¿ì³ª, ¿ª½Ã ¹°Ã¼°¡ world coordinate system Ãà°ú ´Ù¸¥ ¹æÇâÀ¸·Î ³õÀÌ°Ô µÇ¸é ¸¹Àº ºó°ø°£ÀÌ »ý±â°Ô µÇ¾î È¿À²ÀÌ ±Þ°ÝÇÏ°Ô ¶³¾îÁö°Ô µÈ´Ù. ´ç¿¬È÷ Á÷À°¸éü ¸ð¾çÀÇ ¹°Ã¼¸¦ °¡Àå È¿À²ÀûÀ¸·Î ¸ðµ¨¸µÇϱâ À§Çؼ­´Â ±× ¹°Ã¼°¡ ³õ¿© ÀÖ´Â ¹æÇâÀ¸·Î bounding box¸¦ Àâ´Â °ÍÀε¥, ÀÌ°ÍÀÌ ¹Ù·Î OBBÀÌ´Ù. ÇÏÁö¸¸ OBB´Â ±¸ÇöÇϱⰡ ºñ±³Àû ³­ÇØÇϹǷΠÁö±Ý±îÁö ¸®¼­Ä¡°¡ ¾È µÇ¾ú¾ú´ø °Í °°Àºµ¥, ÇÊÀÚ´Â ÃÖ´ëÇÑ Àß ¼³¸íÇÏ·Á°í ³ë·ÂÇÏ°Ú´Ù -_-;;;

<bounding sphere>

Á÷À°¸éüÀÇ ¹°Ã¼¸¦ ¸ðµ¨¸µÇϱâ À§Çؼ­´Â ¿©·¯ °³ÀÇ ±¸°¡ ÇÊ¿äÇÏ°í, ±¸¿¡ ºó°ø°£ÀÌ »ý°Ü¼­ Á¤È®È÷ ¸ðµ¨¸µÀÌ µÇÁö ¾Ê´Â´Ù.

 

 

<axis-aligned bounding box>

¹°Ã¼°¡ world coordinate axis¿Í ´Ù¸¥ ¹æÇâÀ¸·Î ³õ¿© ÀÖÀ» ¶§ È¿À²ÀÌ ±Þ°ÝÇÏ°Ô ¶³¾îÁø´Ù.

 

 

<object-oriented bounding box>

¹°Ã¼ÀÇ ¹æÇâÀ» Áß½ÉÀ¸·Î bounding box¸¦ Àâ±â ¶§¹®¿¡, Á÷À°¸éü ¸ð¾çÀÇ ¹°Ã¼¸¦ °¡Àå È¿À²ÀûÀ¸·Î ¸ðµ¨¸µÇÒ ¼ö ÀÖ´Ù.

anigray09_up.gif À§·Î

2. ÀÌ·Ð

Mesh¸¦ »ý¼ºÇÒ ¶§ bounding boxµµ °°ÀÌ »ý¼ºÇÏ¿©, mesh¸¦ transform ÇÒ ¶§ bounding boxµµ °°ÀÌ transformÀ» ÇØ ÁÖ¸é Ç×»ó ¸ðµç mesh¿¡ ´ëÇØ OBB¸¦ À¯ÁöÇÒ ¼ö°¡ ÀÖ´Ù. ±×·¸´Ù¸é ¿ì¸®´Â ÀÌÁ¦ mesh°¡ ¿òÁ÷À̸鼭 °°ÀÌ µ¹¾Æ´ó±â´Â ¿©·µÀÇ OBB¸¦ °®°í ÀÖ´Ù. ÀÌ ¶§, OBB°¡ ¼­·Î Ãæµ¹Çß´ÂÁö´Â ¾î¶»°Ô °¨ÁöÇÒ ¼ö°¡ ÀÖÀ»±î? °¡Àå ¹«½ÄÇÑ ¹æ¹ýÀº µÎ °³ÀÇ OBBÀÇ ¸ðµç ¸é°ú ¸ðµç edge¿¡ ´ëÇؼ­ ¸éÀ» Åë°úÇÏ´Â edge°¡ ÀÖ´ÂÁö °Ë»çÇÏ´Â ¹æ½ÄÀÏ °ÍÀÌ´Ù. ±×·±µ¥ ÀÌ ¹æ½ÄÀº 144¹øÀÇ ºñ±³°¡ ÇÊ¿äÇÏ°í, »ó´çÈ÷ ºñ½Ñ Å×½ºÆ®ÀÌ´Ù. ¿©±â¼­´Â ÈξÀ ´õ È¿À²ÀûÀÎ 'axial projection'À» ÀÌ¿ëÇÑ Å×½ºÆ®¸¦ ¼Ò°³ÇÑ´Ù.

Axial projection À̶õ ¹«¾ùÀΰ¡?

µÎ °³ÀÇ OBB°¡ ¼­·Î ºÐ¸®µÇ¾î ÀÖ´ÂÁö¸¦ ¾Ë±â À§ÇÑ ½¬¿î ¹æ¹ý Áß Çϳª´Â, °¢ OBB¸¦ °ø°£»óÀÇ ¾î¶² Ãà(¹Ýµå½Ã x,y,zÃàÀÏ ÇÊ¿ä´Â ¾ø´Ù)¿¡ Åõ¿µÇÏ´Â °ÍÀÌ´Ù. ÀÌ Åõ¿µÀ» 'axial projection'À̶ó°í Çϸç, ÀÌ Åõ¿µÀ» ÅëÇØ °¢ OBB´Â Ãà »ó¿¡ ¾î¶² intervalÀ» Çü¼ºÇÑ´Ù. ¸¸ÀÏ ÀÌ·¸°Ô Çü¼ºµÈ 2°³ÀÇ intervalÀÌ ¼­·Î °ãÄ¡Áö ¾ÊÀ¸¸é 2°³ÀÇ OBB´Â ¼­·Î ºÐ¸®µÇ¾î ÀÖ´Â °ÍÀÌ È®½ÇÇϸç, À̶§ ÀÌ ÃàÀ» 'separating axis'¶ó°í ÇÑ´Ù. ¸¸ÀÏ 2°³ÀÇ intervalÀÌ ¼­·Î °ãÄ£´Ù¸é 2°³ÀÇ OBB´Â ¼­·Î ºÐ¸®µÇ¾î ÀÖÀ» ¼öµµ ÀÖ°í ¾Æ´Ò ¼öµµ Àֱ⠶§¹®¿¡ ´õ ¸¹Àº °Ë»ç°¡ ÇÊ¿äÇÏ´Ù.

2°³ÀÇ OBB°¡ Ãæµ¹Çß´ÂÁö ¾Ë±â À§Çؼ­´Â axial projectionÀ» ¸î ¹ø ÇØ¾ß Çϴ°¡?

(°ø¸®)
°ø°£»óÀÇ 2°³ÀÇ ºÐ¸®µÈ convexÇÑ ´Ù°¢¸éü´Â 1) µÎ °³ÀÇ ´Ù°¢¸éü Áß ÇϳªÀÇ ¾î´À ¸é°ú ÆòÇàÀÎ ¸é, ¶Ç´Â 2) µÎ °³ÀÇ ´Ù°¢¸éü °¢°¢¿¡¼­ ÇϳªÀÇ edge¿Í ÆòÇàÇÑ ¸é¿¡ ÀÇÇØ ºÐ¸®µÉ ¼ö ÀÖ´Ù.

ÀÌ °ø¸®¸¦ Áõ¸íÇÑ ³í¹®µµ ÀÖ±ä ÇÏÁö¸¸, ±×°ÍÀº °ü½ÉÀÖ´Â ºÐÀº ã¾Æ º¸½Ã°í. ¾î·µç ÀÌ °ø¸®ÀÇ °á°ú·Î¼­, ¿ì¸®´Â ´ÙÀ½À» ¾Ë ¼ö ÀÖ´Ù:
°ø°£»óÀÇ 2°³ÀÇ convexÇÑ ´Ù°¢¸éü°¡ ºÐ¸®µÇ±â À§ÇÑ ÇÊ¿äÃæºÐ Á¶°ÇÀº, 1) µÎ °³ÀÇ ´Ù°¢¸éü Áß ÇϳªÀÇ ¾î´À ¸é°ú ¼öÁ÷ÀÎ separating axis°¡ Á¸ÀçÇϰųª, 2) µÎ °³ÀÇ ´Ù°¢¸éü °¢°¢¿¡¼­ ÇϳªÀÇ edge¿Í ¼öÁ÷ÀÎ separating axis°¡ Á¸ÀçÇÏ´Â °ÍÀÌ´Ù.

°¢ OBB´Â 3°³ÀÇ uniqueÇÑ ¸é ¹æÇâÀÌ ÀÖ°í, 3°³ÀÇ uniqueÇÑ edge ¹æÇâÀÌ ÀÖ´Ù. µû¶ó¼­ À§ÀÇ Á¶°ÇÀ» °Ë»çÇϱâ À§Çؼ­´Â 15°³ÀÇ separating axis¸¦ °Ë»çÇØ¾ß ÇÑ´Ù.(ÇϳªÀÇ OBB¿¡¼­ 3°³ÀÇ ¸é, ´Ù¸¥ OBB¿¡¼­ 3°³ÀÇ ¸é, 9°³ÀÇ 2°³ÀÇ OBB¿¡¼­ edgeµéÀÇ Á¶ÇÕ) ¸¸ÀÏ 2°³ÀÇ OBB°¡ ¼­·Î ºÐ¸®µÇ¾î ÀÖ´Ù¸é(Ãæµ¹ÇÏÁö ¾Ê¾Ò´Ù¸é) separating axis°¡ ¹Ýµå½Ã Á¸ÀçÇØ¾ß ÇÏ°í À§¿¡¼­ ¾ð±ÞÇÑ 15°³ÀÇ axis Áß Çϳª°¡ ±× axis°¡ µÇ¾î¾ß ÇÑ´Ù. ¸¸ÀÏ OBBµéÀÌ Ãæµ¹Çß´Ù¸é separating axis°¡ Á¸ÀçÇÏÁö¸¦ ¾ÊÀ» °ÍÀÌ´Ù. µû¶ó¼­, 2°³ÀÇ OBBÀÇ Ãæµ¹ ¿©ºÎ¸¦ °Ë»çÇϱâ À§Çؼ­´Â 15°³ÀÇ seperating axisÀÇ °Ë»ç·Î ÃæºÐÇÏ´Ù.

Separating axis °Ë»ç´Â ¾î¶² ¹æ½ÄÀ¸·Î ÇÒ ¼ö°¡ Àִ°¡?

ÀÌ °Ë»ç¸¦ ÇÏ´Â ±âº»ÀûÀÎ Àü·«Àº ´ÙÀ½°ú °°´Ù:
1)
°¢ OBBÀÇ Áß½ÉÀ» ÇØ´ç axis¿¡ Åõ¿µÇÑ´Ù.
2)
°¢ OBB°¡ ÇØ´ç axis¿¡ Åõ¿µµÇ¾úÀ» intervalÀÇ radius(±æÀÌÀÇ ¹Ý)À» °è»êÇÑ´Ù.
3)
¸¸ÀÏ ÇØ´ç axis¿¡ Åõ¿µÇßÀ» ¶§ OBBÀÇ Á᫐ »çÀÌÀÇ °Å¸®°¡ °¢ OBBÀÇ interval radiusÀÇ ÇÕº¸´Ù Å©¸é, µÎ °³ÀÇ OBB´Â ºÐ¸®µÈ °ÍÀ¸·Î º¼ ¼ö ÀÖ´Ù.

¹Ø¿¡ ÀÖ´Â ±×¸²À» º¸¸é ÀÌÇØ°¡ ´õ ½±°Ô °¥ °ÍÀÌ´Ù. ±×¸²¿¡¼­ A¿Í B´Â °¢°¢ OBBÀÌ°í B´Â A·ÎºÎÅÍ rotation R°ú translation T¸¸Å­ À̵¿ÇÑ À§Ä¡¿¡ ÀÖ´Ù. A¿Í BÀÇ half dimension(¶Ç´Â radius) ´Â °¢°¢ ai, bi·Î Ç¥±âÇÑ´Ù(i=1,2,3). A¿Í B¿¡¼­ °¢ edge¿Í ÆòÇàÀ» ÀÌ·ç´Â axisÀÇ ´ÜÀ§ º¤Å͸¦ °¢°¢ Ai¿Í Bi¶ó°í Ç¥±âÇÑ´Ù(i=1,2,3). ÀÌ·¸°Ô Çؼ­ »ý±ä 6°³ÀÇ ´ÜÀ§ º¤Å͸¦ box axis¶ó°í ÇÏÀÚ. ¿©±â¼­ ÁÖ¸ñÇÒ °ÍÀº AÀÇ box axis¸¦ basis·Î »ç¿ëÇϸé, ȸÀü ¸ÅÆ®¸¯½º RÀÇ 3°³ÀÇ columnµé(Áï, x,y,z ´ÜÀ§º¤Å͸¦ transform ÇßÀ» ¶§ ³ª¿À´Â º¤ÅÍ)ÀÌ 3°³ÀÇ Bi axis º¤ÅÍ¿Í °°´Ù´Â »ç½ÇÀÌ´Ù.

axis_projection.gif

<¿©±â¼­ A¿Í B¸¦ L¿¡ Åõ¿µÇÏ¸é ¼­·Î ºÐ¸®µÈ intervalÀÌ µÇ¹Ç·Î LÀº OBB A¿Í B¿¡ ´ëÇÑ separating axisÀÌ´Ù.>

º¸´Ù½ÃÇÇ °¢ OBBÀÇ Áß½ÉÀº Åõ¿µµÈ intervalÀÇ Áß°£¿¡ Åõ¿µµÈ´Ù. °¢ box radius¸¦ axis L¿¡ Åõ¿µÇÏ°í Åõ¿µµÈ ±æÀÌÀÇ ÇÕÀ» ±¸ÇÔÀ¸·Î½á ¿ì¸®´Â °¢ OBBÀÇ Åõ¿µµÈ intervalÀ» ±¸ÇÒ ¼ö°¡ ÀÖ´Ù. À§¿¡¼­ OBB AÀÇ intervalÀÇ radius´Â ´ÙÀ½°ú °°´Ù:
equation1.gif

OBB B
¿¡ ´ëÇؼ­µµ ºñ½ÁÇÑ ½ÄÀ» ¼¼¿ï ¼ö°¡ ÀÖ´Ù. Seperating axisÀÇ À§Ä¡´Â °Ë»ç¿¡ ¾Æ¹«·± ¿µÇâÀ» ³¢Ä¡Áö ¾ÊÀ¸¹Ç·Î ¿ì¸®´Â axis°¡ AÀÇ Áß½ÉÀ» Åë°úÇÑ´Ù°í °¡Á¤ÇÑ´Ù. ÀÌ ¶§, 2°³ÀÇ interval »çÀÌÀÇ °Å¸®´Â equation2.gif°¡ µÈ´Ù(±×¸² Âü°í). µû¶ó¼­, 2°³ÀÇ interval ºÐ¸®µÇ¾î ÀÖ±â À§ÇÑ ÇÊ¿äÃæºÐ Á¶°ÇÀº ´ÙÀ½°ú °°´Ù:
equation3.gif
ÀÌ ½ÄÀº ¾×¸éÀ¸·Î´Â º¹ÀâÇÏÁö¸¸, 15°³ÀÇ separating axis¿¡ Àû¿ëÇÏ°Ô µÇ¸é LÀÌ box axisÀ̰ųª box axisÀÇ cross product°¡ µÇ±â ¶§¹®¿¡ ¸¹ÀÌ ´Ü¼øÈ­ µÈ´Ù. ¿¹¸¦ µé¾î, equation4.gifÀ̶ó°í ÇÏÀÚ. À§ÀÇ ½Ä¿¡¼­ ù ¹ø° summationÀÇ µÎ ¹ø° Ç×Àº ´ÙÀ½°ú °°ÀÌ ´Ü¼øÈ­ µÈ´Ù.
equation5.gif
¸¶Áö¸· ´Ü°è´Â Àü¿¡ ¾ð±ÞÇßµíÀÌ BÀÇ box axis´Â A¿¡ ´ëÇÑ BÀÇ rotation matrix RÀÇ column¿¡ ÇØ´çÇÑ´Ù´Â »ç½ÇÀ» ÀÌ¿ëÇÑ °ÍÀÌ´Ù. ÀÌ·± ½ÄÀ¸·Î ¸ðµç Ç×µéÀº ´Ü¼øÈ­µÇ°í ¶§·Î´Â °ªÀÌ 0ÀÌ µÇ¾î ¾ø¾îÁö±âµµ ÇÑ´Ù. ÀÌ·¸°Ô ´Ü¼øÈ­ÇÑ ÀÌÈÄÀÇ À§ÀÇ seperating axis L¿¡ ´ëÇÑ °Ë»ç´Â ´ÙÀ½°ú °°ÀÌ µÈ´Ù:
equation6.gif
¸ðµç 15°³ÀÇ seperating axis¿¡ ´ëÇÑ °Ë»ç´Â ÀÌ·± ¹æ½ÄÀ¸·Î ´Ü¼øÈ­µÇ¸ç, ÀÌ °Ë»çÀÇ °úÁ¤¿¡¼­ matrix RÀÇ °¢ Ç×Àº 4¹ø¾¿ »ç¿ëÀÌ µÇ¹Ç·Î ¸ðµç °Ë»ç¸¦ ½ÃÀÛÇϱâ Àü¿¡ matrix RÀ» ¹Ì¸® °è»êÇØ ³õ´Â´Ù. ¸¸ÀÏ ÀÌ °Ë»ç µµÁß ½ÄÀÌ ¸¸Á·ÀÌ µÇ¸é, seperating axis¸¦ ¹ß°ßÇÑ °ÍÀÌ°í, ±×·¸´Ù¸é 2°³ÀÇ OBB´Â ¼­·Î ºÐ¸®µÇ¾î ÀÖÀ½À» ¹àÈù °ÍÀÌ µÇ±â ¶§¹®¿¡ ³ª¸ÓÁö °Ë»ç´Â ÇÒ ÇÊ¿ä°¡ ¾ø¾îÁø´Ù. ¾Æ·¡ÀÇ Ç¥´Â 15°³ÀÇ seperating axis¿¡ ´ëÇÑ ½ÄÀ» Á¤¸®ÇÑ °ÍÀÌ´Ù:

table.gif
*
¿©±â¼­ R0 Ç׸ñÀº OBB AÀÇ interval radius, R1 Ç׸ñÀº OBB BÀÇ interval radius, R Ç׸ñÀº 2°³ÀÇ OBBÀÇ Á᫐ °£ÀÇ Åõ¿µµÈ °Å¸®¸¦ ³ªÅ¸³½´Ù.
* D
º¤ÅÍ´Â 2°³ÀÇ OBBÀÇ Áß½ÉÀ» ÀÕ´Â º¤Å͸¦ ³ªÅ¸³½´Ù.
* Cij
´Â rotation matrix R¿¡¼­ÀÇ (i,j) Ç×À» ³ªÅ¸³½´Ù.

anigray09_up.gif À§·Î

3. ÄÚµå ´Ù¿î·Îµå ¹× »ç¿ë¹ý

aniapple_red.gifÄÚµå ´Ù¿î·Îµå

aniberry02_red.gif½ÇÇàÆÄÀÏ(exe) ´Ù¿î·Îµå

<½ÇÇà¹æ¹ý>
 
±×³É °¡¸¸È÷ ½ÇÇà½ÃÅ°°í ±â´Ù¸®°í ÀÖÀ¸¸é Â÷°¡ °Ç¹°¿¡ °¡¼­ Äô.. ÇÏ°í ¹Ú´Â´Ù -_- È­»ìÇ¥·Î ½ÃÁ¡À» ¾à°£ º¯È­½Ãų ¼ö ÀÖ´Ù.

<Äڵ弳¸í>
circle01_black.gifCBox
Ŭ·¡½º

CBox

Object oriented bounding box¸¦ Ç¥ÇöÇϴ Ŭ·¡½º

CBox::center[3]

Bounding boxÀÇ Á᫐ ÁÂÇ¥

CBox::axis[3][3]

Bounding boxÀÇ 3 ¹æÇâÀ¸·ÎÀÇ axis º¤ÅÍ

CBox::extent[3]

Bounding boxÀÇ °¢ axis º¤ÅÍ ¹æÇâÀ¸·ÎÀÇ radius

circle01_black.gifint BoxBoxIntersectionTest(const CBox& box0,const CBox& box1)
box0
¿Í box1ÀÌ ¼­·Î ±³Â÷ÇÏ´ÂÁö °Ë»ç¸¦ Çؼ­ ±³Â÷¸¦ Çϸé 1, ±×·¸Áö ¾ÊÀ¸¸é 0À» ¸®ÅÏÇÑ´Ù. ÇÔ¼öÀÇ µ¿ÀÛ¹æ½ÄÀº À§ÀÇ Ç¥¿¡ ÀÖ´Â 15°³ÀÇ seperating axis¸¦ Çϳª¾¿ °Ë»çÇÏ´Â ¹æ½ÄÀÌ´Ù. ÁÖ¼®À» º¸°í Ç¥¸¦ Âü°íÇϸé ÀÌÇØÇϴµ¥ ¾Æ¹«·± ¾î·Á¿òÀÌ ¾øÀ» °ÍÀÌ´Ù.

circle01_black.gifD3DXMATRIX* GetBoxTransform(D3DXMATRIX *pMat, CBox* pBox)
pBox
ÀÇ transformÀ» D3DXMATRIX ÇüÅ·Πº¯È¯½ÃÄÑ ÁÖ´Â ÀÏÁ¾ÀÇ wrapper ÇÔ¼öÀÌ´Ù.

circle01_black.gifvoid SetBoxTransform(const D3DXMATRIX* pMat, CBox* pBox)
À§ ÇÔ¼ö¿Í ½ÖÀ» ÀÌ·ç´Â, À̹ø¿¡´Â pMatÀÇ transformÀ» pBoxÀÇ axis º¤ÅÍ·Î º¯È¯À» ÇØ ÁÖ´Â ÇÔ¼öÀÌ´Ù.

circle01_black.gifvoid initBox(CBox *pBox, const D3DXVECTOR3& vecMin, const D3DXVECTOR3& vecMax)
Mesh
·ÎºÎÅÍ ±¸ÇØ ¿Â bounding boxÀÇ minimum ÁÂÇ¥, maximum ÁÂÇ¥¸¦ ¹Þ¾Æ¼­ pBoxÀÇ center¿Í extent¸¦ °è»êÇÏ°í axis¸¦ ÃʱâÈ­ÇÑ´Ù.

circle01_black.gifvoid moveBox(CBox *pBox, const D3DXMATRIX& mat)
pBox
¸¦ mat¿¡ ÀÇÇØ ¿òÁ÷ÀδÙ. ÀÏ´Ü 3°³ÀÇ axisµéÀ» º¯È¯ÇÑ ÀÌÈÄ¿¡ center¸¦ º¯È­ÇÏ´Â ¹æ½ÄÀ¸·Î µÇ¾î ÀÖ´Ù.

circle01_black.gifÀÌ ÇÔ¼öµéÀ» ÀÌ¿ëÇؼ­ ÄÚµå´Â ´ÙÀ½ ¼ø¼­·Î µ¿ÀÛÇÏ¸é µÈ´Ù:

  1. Mesh¸¦ ·Îµå ÇÑ ÈÄ¿¡ D3DXComputeBoundingBox¸¦ ÀÌ¿ëÇÏ¿© bounding box¸¦ °è»êÇÑ´Ù.
  2. Bounding box·ÎºÎÅÍ ¾òÀº °ªÀ» ÀÌ¿ëÇÏ¿© initBox·Î CBox °´Ã¼¸¦ ÃʱâÈ­ÇÑ´Ù.
  3. ÀÌÈÄ¿¡ ¹®Á¦°¡ ¿òÁ÷ÀÏ ¶§¸¶´Ù º¯È¯ matrix¸¦ ÀÎÀÚ·Î moveBox¸¦ È£ÃâÇØ CBox °´Ã¼¸¦ °»½ÅÇØ ÁØ´Ù.
  4. ¿òÁ÷ÀÏ ¶§¸¶´Ù ±× CBox¿Í ´Ù¸¥ CBoxµéÀÌ Ãæµ¹ÀÌ ÀϾ´ÂÁö BoxBoxIntersectionTest·Î °Ë»çÇÑ´Ù.

anigray09_up.gif À§·Î

4. Âü°í ¹®Çå

5. À¥ÆäÀÌÁö ´Ù¿î·Îµå

aniberry01_red.gifÀ¥ÆäÀÌÁö Àüü ´Ù¿î·Îµå

anigray09_up.gif À§·Î