BSP¸¦ ÀÌ¿ëÇÑ 3D Game Programming

 

½Å¿ë¿ì

http://www.gamesync.com.ne.kr/

 

 

°­ÁÂ 1. BSPÀÇ ÀÌÇØ

 

Àå¸é °ü¸®(Scene Management)

        ½ÇÁ¦ °ÔÀÓ¿¡ »ç¿ëÇÏ´Â Æú¸®°ïÀÇ °³¼ö´Â °¥¼ö·Ï ´Ã¾î°¡´Â Ãß¼¼À̸ç ÀÌ´Â Çϵå¿þ¾îÀÇ ¹ß´Þ¿¡ ÈûÀÔÀº ¹Ù°¡ Å©´Ù. ÃÖ½ÅÀÇ ºñµð¿À Ä«µåµéÀº CPU¸¦ ´É°¡ÇÏ´Â GPU(Graphics Processing Unit)À» žÀçÇϰí ÀÖÀ¸¸ç ÀÌ´Â ÃÊ´ç ¼ö¹é¸¸ Æú¸®°ïÀ» È­¸é¿¡ ¹«¸®¾øÀÌ ±×·Á³½´Ù. ±×·³¿¡µµ ºÒ±¸Çϰí 3Â÷¿ø °ÔÀÓ °³¹ßÀÌ ¾î·Á¿î ÀÌÀ¯´Â ¹«¾ùÀΰ¡? ¿ª¼³ÀûÀÏÁö´Â ¸ð¸£Áö¸¸ °³¹ßÀÚÀÇ ÀÔÀå¿¡¼­ º¸¸é Çϵå¿þ¾î°¡ °ÔÀÓÀ» ¸ðµÎ Á¤¼®´ë·Î ¼ÒÈ­Çϱ⿣ ¿©ÀüÈ÷ ´À¸®±â ¶§¹®ÀÌ´Ù. ¸ðµç °³¹ßÀÚµéÀº ÀÚ½ÅÀÌ ¸¸µç °ÔÀÓÀÌ ½Ã½ºÅÛ »ç¾ç°ú °ü°è¾øÀÌ ÃÊ´ç 30ÇÁ·¹ÀÓ ÀÌ»óÀ¸·Î Àß µ¿ÀÛÇϱ⸦ ¹Ù¶õ´Ù. À̸¦ À§ÇØ ÇÊ¿¬ÀûÀ¸·Î CPU¿Í GPUÀÇ ¿¬»êÀ» ÁÙÀ̴ Ưº°ÇÑ ¹æ¹ý(¾î¶² ¸é¿¡¼­´Â trick¿¡ °¡±î¿î)ÀÌ ÇÊ¿äÇÏ´Ù. °³¹ßÀÚµéÀº ÀÌ·¯ÇÑ ¹æ¹ýµéÀ» Ãß»óÈ­ ÇÏ¿© ½±°Ô °³¹ßÇϱâ À§ÇØ °ÔÀÓ ¿£ÁøÀ» ¼³°èÇÑ´Ù.

        °³¹ßÀÚÀÇ ÀÔÀå¿¡¼­ °ÔÀÓ ½Ã³ª¸®¿À°¡ È®Á¤µÈ ÀÌÈÄ 3Â÷¿ø °ÔÀÓÀ» °³¹ßÀ» ½ÃÀÛÇÏ·Á°í ÇÒ ¶§ óÀ½ ÇØ¾ßÇÏ´Â ÀÏÀº °ÔÀÓ ¿£ÁøÀÇ ±âÃʸ¦ È®¸³ÇÏ´Â °ÍÀÌ´Ù. °³¹ßÇÏ·Á´Â °ÔÀÓÀÇ Æ¯¼º¿¡ µû¶ó °¢±â Â÷ÀÌÁ¡Àº ÀÖ°ÚÁö¸¸ ¿£ÁøÀº ±âº»ÀûÀ¸·Î º¹ÀâÇÑ Àå¸é(Complex Scene)À» °ü¸®ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. Àå¸é(Scene)Àº Å©°Ô Á¤Àû °´Ã¼(Static Object)¿Í µ¿Àû °´Ã¼(Dynamic Object)·Î ±¸ºÐÇÒ ¼ö ÀÖ´Ù. Á¤Àû °´Ã¼¶õ °ÔÀÓÀÇ ½ÇÇà½Ã Çѹø ·ÎµùÇÑ ÀÌÈÄ º¯ÇÏÁö ¾Ê´Â °´Ã¼, Áï Á¤Àû °ÔÀÓ ¸Ê(Static Game Map)À» ÀǹÌÇÑ´Ù. ±×·¯³ª ¿òÁ÷ÀÌ´Â ¹®À̳ª µ¿Àû ±¤¿ø, ij¸¯ÅÍ, ¾ÆÀÌÅÛÀº ¸ðµÎ µ¿Àû °´Ã¼¿¡ ¼ÓÇÑ´Ù. ±×·¯³ª Àå¸é °ü¸®¸¦ Á¦¾îÇϱâ À§ÇÑ °ÔÀÓ ¿£ÁøÀÇ ¼³°è´Â ¸»Ã³·³ ½±Áö´Â ¾Ê´Ù. ¸¹Àº °³¹ßÀÚµéÀº º¸´Ù ¶Ù¾î³­ Àå¸é °ü¸®¸¦ À§ÇÑ ¹æ¹ýµéÀ» °í¾ÈÇÏ¿´À¸¸ç ÀÌÁß  ´ëÇ¥ÀûÀÎ °ÍÀÌ ÄùÀÌÅ©(Quake)¿¡¼­ »ç¿ëÇÑ BSP ±â¹Ý °ÔÀÓ ¿£ÁøÀÌ´Ù.

 

ÄùÀÌÅ© °ÔÀÓ ¿£Áø

        µÒ ½Ã¸®Áî·Î À¯¸íÇÑ ID¼ÒÇÁÆ®¿þ¾îÀÇ Á¸ Ä®¸·(John Calmak)Àº 1995³âµµ¿¡ ¿ÏÀüÇÑ 3D ȯ°æÀÇ °ÔÀÓÀÎ ÄùÀÌÅ©¸¦ Ãâ½ÃÇÏ¿´´Âµ¥ ÀÌ´Â BSP, PVS, Light Mapµî ±× ´ç½Ã·Î¼­´Â ¸Å¿ì ȹ±âÀûÀÎ ±â¼úµéÀ» µµÀÔÇÑ ³î¶ó¿ï¸¸ÇÑ °ÔÀÓÀ̾ú´Ù. ÀÌÈÄ ¸¹Àº °³¹ßÀÚµéÀÌ ÄùÀÌÅ©¿Í À¯»çÇÑ °ÔÀÓ ¿£ÁøÀ» °³¹ßÇϱâ À§ÇØ ºÎ´ÜÈ÷ ³ë·ÂÇÏ¿´À¸¸ç ÀÌ´Â ÄùÀÌÅ© À帣ÀÇ °ÔÀÓµéÀÌ ½ñ¾ÆÁ® ³ª¿À´Â °è±â°¡ µÇ¾ú´Ù. ÀúÀÚ ¶ÇÇÑ ÄùÀÌÅ© °ÔÀÓ ¿£ÁøÀÇ ºÐ¼®À» ÅëÇØ ¸¹Àº °ÍÀ» ¹è¿ï ¼ö ÀÖ¾ú´Ù. ÀÌ ¹®¼­ ¶ÇÇÑ ±×¿Í À¯»çÇÑ °ÔÀÓ ¿£ÁøÀ» Á¦ÀÛÇÏ´Â ±â¹ý¿¡ ´ëÇÑ ¹æ¹ýÀ» ´Ù·ê °ÍÀÌ´Ù.

 

 

[±×¸² 1]. Quake (ID Software)

 

        ½ºÅ©¸°¼¦ÀÌ ÃֽаÔÀӵ鿡 ºñÇØ ÃʶóÇØ º¸À̴°¡? ±×·¯³ª ÃֽаÔÀÓµé Á¶Â÷µµ ÀÌ °ÔÀÓ¿¡ Àû¿ëµÈ ¸ðµç ±â¼úµéÀ» ¾ÆÁ÷µµ º¹½ÀÇØ¼­ »ç¿ëÇϰí ÀÖ´Ù. ±×·³ ÀÌ¿Í °°Àº °ÔÀÓÀ» ¸¸µé·Á¸é ¾î¶»°Ô ÇØ¾ß Çϴ°¡? °£´ÜÇÏ°Ô ¼³¸íÇÏ¸é ´ÙÀ½°ú °°´Ù.

1. °ÔÀÓ ¸Ê µ¥ÀÌÅ͸¦ ¹ÙÅÁÀ¸·Î ÇÏ¿© BSP Æ®¸®¸¦ ±¸ÃàÇÑ´Ù.

2. ÀÌ Æ®¸® ±¸Á¶¸¦ ÀÀ¿ëÇÏ¿© PVS¸¦ »ý¼ºÇÑ´Ù.

3. µ¿Àû °´Ã¼¿¡ ´ëÇÑ Object PVS¸¦ »ý¼ºÇÑ´Ù.

4. ¶óÀÌÆ®¸Ê(Light Map)À» »ý¼ºÇÑ´Ù.

ÀÌ°Ô ¹«½¼¸»ÀÎÁö ¸ð¸¥´Ù°í ÇØ¼­ °ÆÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¸¸¾à ¿©·¯ºÐÀÌ À§ÀÇ ³»¿ëÀ» ´Ù ¾Ë°í ÀÖ´Ù¸é ÀÌ ¹®¼­¸¦ º¼ ÀÌÀ¯°¡ ¾ø´Ù. ÀÌÁ¦ Â÷±ÙÂ÷±Ù µµÇ¥¿Í ¿¹Á¦¸¦ ÅëÇØ ¼³¸íÇØ ³ª°¥ °ÍÀÌ´Ù.

 

»çÀü Áö½Ä

        ÀÌ ±ÛÀº µ¶ÀÚµéÀÌ ´ÙÀ½°ú °°Àº »çÀü Áö½ÄÀÌ ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. ¸¸¾à ÀÚ½ÅÀÌ ºÎÁ·ÇÏ´Ù°í »ý°¢ÇÑ´Ù¸é ´Ù¸¥ Ã¥µéÀ» Âü°íÇÏ±æ ¹Ù¶õ´Ù.

1. Standard C & C++ ÇÁ·Î±×·¡¹Ö

2. STL (Standard Template Library)

3. Visual C++À» ÀÌ¿ëÇÑ Win32 ÇÁ·Î±×·¡¹Ö

4. OpenGL

5. 3Â÷¿ø ±×·¡ÇȽº¿¡ ´ëÇÑ ±âÃÊ ¼öÇÐ (ƯÈ÷ º¤ÅÍ, Çà·Ä)

        ±ÛÀº µÇµµ·Ï ½±°Ô ¾²·Á°í ³ë·ÂÇÏ¿´À¸³ª ±ÛÀçÁÖ°¡ ¾û¸ÁÀÌ¶ó ³»°¡ ºÁµµ Á» ÇѽÉÇÑ ºÎºÐÀÌ ÀÖ´Ù. ¶È¶ÈÇÑ »ç¶÷Àϼö·Ï ±ÛÀ» ½±°Ô ¾´´Ù´Â ¸»ÀÌ Àϸ®°¡ ÀÖ´Â °Í °°´Ù. ºÎÁ·ÇÑ Á¡ÀÌ ÀÖ´õ¶óµµ ÀÌ»Ú°Ô ºÁÁÖ±æ ¹Ù¶õ´Ù.

 

BSPÀÇ °³³ä

        BSP(Binary Space Partitioning)À̶õ °ø°£À» ºÐÇÒÇÏ´Â Á¤º¸¸¦ ´ã°íÀÖ´Â 2Áø Æ®¸®¸¦ ÀǹÌÇÑ´Ù. BSP´Â ¿ø·¡ Àº¸é Á¦°Å(Hidden Surface Removal)À» ¸ñÀûÀ¸·Î °í¾ÈÇÏ¿´À¸³ª BSPÀÇ °ø°£ ºÐÇÒ¿¡ ´ëÇÑ Æ¯¼ºÀ¸·Î ÀÎÇØ ±× ÀÀ¿ë ¹üÀ§´Â ³Ð°Ô È®ÀåµÇ¾ú´Ù. ÀÌ Àå¿¡¼­´Â °íÀüÀûÀÎ BSPÀÇ Á¦ÀÛ ¹æ¹ýÀ» ´Ù·ê°ÍÀÌ´Ù. ¿©±â¼­ °íÀüÀûÀ̶õ Àǹ̴ ÀϹÝÀûÀ¸·Î ±×·¡ÇȽº¿¡¼­ »ç¿ëÇÏ´Â BSP¸¦ ÀǹÌÇÑ´Ù. °íÀüÀû BSP´Â ½ÇÁ¦ °ÔÀÓ¿¡¼­ »ç¿ëÇÏ´Â BSP¿Í´Â ¾à°£ Ʋ¸°Á¡ÀÌ ÀÖÁö¸¸ º»ÁúÀûÀ¸·Î °³³äÀº µ¿ÀÏÇÏ´Ù. °ÔÀÓ¿¡¼­ »ç¿ëÇÏ´Â BSP´Â °íÀüÀûÀÎ BSP¸¦ º¯ÇüÇÑ Solid Leaf BSP¸¦ ÁÖ·Î »ç¿ëÇϴµ¥ ÀÌ´Â °ø°£À» °³¹ßÀÚµéÀÌ °ü¸®ÇÒ ¼ö ÀÖ´Â ÇüÅ·ΠºÐÇÒÇϴµ¥ µµ¿òÀ» ÁØ´Ù. ¶ÇÇÑ ÀûÀýÈ÷ ºÐÇÒÇÑ °ø°£À» ÀÌ¿ëÇÏ¿© PVS(Potential Visiblity Set)¸¦ ±¸¼ºÇÒ ¼ö ÀÖ´Â ±â¹ÝÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

±×·³ ¾î¶»°Ô BSP¸¦ »ý¼ºÇÒ °ÍÀΰ¡? Æú¸®°ïÀ¸·Î ±¸¼ºµÈ ÀÔü¸¦ BSP Æ®¸® ÇüÅ·ΠǥÇöÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.

1. ÀÔü¸¦ ±¸¼ºÇÏ´Â Æú¸®°ï ¸®½ºÆ®¿¡¼­ Çϳª¸¦ ¼±ÅÃÇÏ¿© ±âÁØÀ¸·Î »ï´Â´Ù.

2. »õ·Î¿î BSP ³ëµå¸¦ »ý¼ºÇÏ¿© ¼±ÅÃÇÑ Æú¸®°ïÀ» ³ëµå¿¡ Ãß°¡ÇÑ´Ù.

3. ¼±ÅÃÇÑ Æú¸®°ïÀÇ Æò¸éÀÇ ¹æÁ¤½ÄÀ» ±¸ÇÑ ÈÄ¿¡ ³ª¸ÓÁö Æú¸®°ïÀ» ¸ðµÎ Å×½ºÆ®ÇÏ¿© Æò¸éÀÇ ¾Õ¿¡ ÀÖ´Â Æú¸®°ï°ú µÚ¿¡ ÀÖ´Â Æú¸®°ïÀ» ºÐ·ùÇÏ¿© ¸®½ºÆ®¸¦ ¸¸µç´Ù. Áï, ¾ÕÂÊ ¸®½ºÆ®¿Í µÚÂÊ ¸®½ºÆ®¸¦ ¿Ï¼ºÇÑ´Ù.

4. ¾ÕÂÊ ¸®½ºÆ®¿¡¼­ ÇϳªÀÇ Æú¸®°ïÀ» ¼±ÅÃÇÏ¿© ±âÁØÀ¸·Î »ï´Â´Ù. ¼±ÅÃÇÑ Æú¸®°ïÀº ÀÌÀü¿¡ ¼±ÅÃÇÑ Æú¸®°ïÀÇ ÇÏÀ§ Front ³ëµå¿¡ ÀúÀåÇÑ´Ù. ¸®½ºÆ®¿¡ ³²´Â Æú¸®°ïÀÌ ¾øÀ» ¶§ ±îÁö 2ÀÇ °úÁ¤À» Àç±ÍÀûÀ¸·Î ¹Ýº¹ÇÑ´Ù.

5. µÚÂÊ ¸®½ºÆ®¿¡¼­ ÇϳªÀÇ Æú¸®°ïÀ» ¼±ÅÃÇÏ¿© ±âÁØÀ¸·Î »ï´Â´Ù. ¼±ÅÃÇÑ Æú¸®°ïÀº ÀÌÀü¿¡ ¼±ÅÃÇÑ Æú¸®°ïÀÇ ÇÏÀ§ Back ³ëµå¿¡ ÀúÀåÇÑ´Ù. ¸®½ºÆ®¿¡ ³²´Â Æú¸®°ïÀÌ ¾øÀ» ¶§ ±îÁö 2ÀÇ °úÁ¤À» Àç±ÍÀûÀ¸·Î ¹Ýº¹ÇÑ´Ù.

À§ÀÇ ³»¿ëÀÌ Àß ÀÌÇØ°¡ µÇ´Â°¡? ¹«½¼ ¸»ÀÎÁö ¸ð¸£°Ú´Ù¸é ´ç½ÅÀº Á¤»óÀÌ´Ù. ±×·³ ¿¹¸¦ µé¾î »ìÆìº¸ÀÚ.


BSP Æ®¸® ±¸¼ºÀÇ ±âÃÊ

        °ÔÀÓ ¸ÊÀº Æú¸®°ïÀÇ ÁýÇÕÀÌ´Ù. ÀÌ·¯ÇÑ Æú¸®°ïÀº ÃÖ¼Ò ¼¼°³ÀÇ Á¤Á¡(Vertex)À» °¡Áö°í ÀÖÀ¸¸ç À̵é Á¤Á¡µéÀº ÇϳªÀÇ Æò¸éÀ» °áÁ¤ÇÑ´Ù. µû¶ó¼­ ¸ðµç Æú¸®°ïÀº ÀÚ½ÅÀÌ ¼ÓÇÑ Æò¸éÀÇ ¹æÁ¤½ÄÀ» ¾òÀ» ¼ö ÀÖ´Ù. [±×¸² 2]´Â ÇϳªÀÇ Æú¸®°ïÀÌ ÇϳªÀÇ Æò¸é¿¡ ¼ÓÇØ ÀÖÀ½À» º¸¿©ÁØ´Ù. ±×·³ ÀÌ·¯ÇÑ Æò¸éÀ» ¾î¶»°Ô ±¸ÇÒ °ÍÀÎÁö ¾Ë¾Æº¸ÀÚ.

[±×¸² 2] »ï°¢ Æú¸®°ï ABC°¡ ÇϳªÀÇ Æò¸éÀ» °áÁ¤Çϰí ÀÖÀ½

 

        ±×·¸´Ù¸é ¾î¶»°Ô Æú¸®°ïÀÇ Á¤º¸¸¦ ÀÌ¿ëÇÏ¿© Æú¸®°ïÀÌ ¼ÓÇÑ Æò¸éÀ» ±¸ÇÒ ¼ö ÀÖÀ»±î? ´Ù ¾Ë°í ÀÖ°ÚÁö¸¸ Ãʺ¸ÀÚµéÀ» À§ÇØ °£´ÜÈ÷ ¼³¸íÇϰڴÙ. ÀϹÝÀûÀ¸·Î Æò¸éÀÇ ¹æÁ¤½ÄÀº ´ÙÀ½°ú °°´Ù.

ax + by + cz + d = 0

(x, y, z´Â º¯¼öÀ̰í a, b, c, d´Â »ó¼ö)

ÀÌÁß a, b, c´Â Æò¸éÀÇ ¹æÇ⺤ÅÍ(Normal Vector)À̹ǷΠº¤ÅÍ AB¿Í BCÀÇ Cross Product¸¦ ¾òÀ¸¸é ±× °ªÀº a, b, c¿Í ÀÏÄ¡ÇÑ´Ù.

Vector(a, b, c) = AB CrossProduct BC

¸¸¾à Æú¸®°ïÀÇ È¸Àü ¹æÇâ¿¡ ´ëÇÑ Ç¥Çö¹ýÀÌ CW(Clock Wise) ¹æ½ÄÀ̶ó¸é Vector(a, b, c)´Â Æò¸éÀÇ ¹æÇ⺤ÅÍ¿Í ÀÏÄ¡ÇÒ °ÍÀÌ´Ù. ±×·¯³ª Æú¸®°ïÀÇ È¸Àü¹æÇâÀÌ CCW(Clock Counter Wise)¶ó¸é Æò¸éÀÇ ¹æÇ⺤ÅÍ¿Í ¹Ý´ë¹æÇâÀÇ °ªÀ» ¾ò´Â´Ù. ÀÌÁ¡¿¡ ÁÖÀÇÇ϶ó.

Âü°í - CW¶õ ½ÃÁ¡¿¡¼­ Æú¸®°ïÀ» ¹Ù¶óº¼¶§ Æú¸®°ïÀ» ±¸¼ºÇÏ´Â Á¤Á¡ÀÇ ¼ø¼­°¡ ½Ã°è ¹æÇâÀ¸·Î µ¹¾Æ°¥ °æ¿ì Æò¸éÀÌ ½ÃÁ¡¿¡ ´ëÇÏ¿© ¾Õ¸éÀ» ÇâÇÑ´Ù°í Á¤ÀÇÇÏ´Â ¹æ¹ýÀÌ´Ù. ¹Ý´ë·Î CCW´Â Á¤Á¡ÀÇ ¼ø¼­°¡ ¹Ý½Ã°è ¹æÇâÀ¸·Î µ¹¾Æ°¥¶§ Æò¸éÀÌ ½ÃÁ¡¿¡ ´ëÇÏ¿© ¾Õ¸éÀ» ÇâÇÑ´Ù°í Á¤ÀÇÇÑ´Ù. ÀϹÝÀûÀ¸·Î OpenGL¿¡¼­´Â CW¸¦ ±âº»°ªÀ¸·Î »ç¿ëÇϸç D3D ¿¡¼­´Â CCW¸¦ »ç¿ëÇÑ´Ù.

ÀÌÁ¦ a, b, cÀÇ °ªÀ» ¾Ë°í ÀÖÀ¸¹Ç·Î dÀÇ °ªÀº ´ÙÀ½°ú °°´Ù.

d = -(ax + by + cz)

Æú¸®°ïÀÇ Á¤Á¡Àº Æò¸é ³»ºÎ¿¡ À§Ä¡Çϱ⠶§¹®¿¡ x, y, z¿¡ ´ëÀÔÇÏ¸é ¼º¸³ÇÑ´Ù. µû¶ó¼­ x, y, z¿¡ Æú¸®°ïÀÇ Á¤Á¡ Áß Çϳª¸¦ ¼±ÅÃÇÏ¿© ´ëÀÔÇϸé dÀÇ °ªÀ» ½±°Ô ¾òÀ» ¼ö ÀÖ´Ù. Æú¸®°ïÀÌ Æò¸éÀ» °áÁ¤ÇÏ´Â ¹æ¹ýÀº BSP¸¦ Á¦ÀÛÇϴµ¥ ÀÚÁÖ »ç¿ëÇÒ °ÍÀÌ´Ù. ÀÌÁ¦ Æú¸®°ï°ú Æò¸éÀÇ Â÷À̸¦ ÀÌÇØÇÏ¿´À¸¸é ´ÙÀ½À¸·Î ±×¸²ÀÇ Ç¥Çö¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.

[±×¸² 3]À» º¸¸é ÀÌ ¸ÊÀº 4°³ÀÇ Æú¸®°ïÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. ÀÌ ±×¸²Àº 3Â÷¿øÀûÀ¸·Î Æú¸®°ïÀ» Ç¥ÇöÇϰí ÀÖÁö¸¸ [±×¸² 4]´Â µ¿ÀÏÇÑ ³»¿ëÀ» 2Â÷¿øÀûÀ¸·Î Ç¥ÇöÇϰí ÀÖ´Ù. ¾ÕÀ¸·Î´Â[±×¸² 4]¿Í °°Àº ÇüÅ·ΠÆú¸®°ïÀÇ ¹èÄ¡¸¦ Ç¥ÇöÇÒ °ÍÀÌ´Ù.

 

[±×¸² 3]

 

 

[±×¸² 4]

 

        [±×¸² 4]¿¡¼­ È­»ìÇ¥´Â Æò¸éÀÇ ¹æÇâÀ» ÀǹÌÇÑ´Ù. ±×·³ À̸¦ ¹ÙÅÁÀ¸·Î BSP¸¦ Á÷Á¢ »ý¼ºÇØ º¸ÀÚ. ¸ÕÀú BSP´Â ÀÌÁø Æ®¸® ±¸Á¶(Binary Tree)ÀÌ´Ù. ÀÌÁø Æ®¸® ±¸Á¶¶õ ÇϳªÀÇ ³ëµå°¡ 2°³ÀÇ ÇÏÀ§ ³ëµå¸¦ °¡ÁüÀ» ÀǹÌÇÑ´Ù. BSPÀÇ Ã¹¹øÂ° ÇÏÀ§ ³ëµå¿¡´Â ÀÚ½ÅÀ» ±âÁØÀ¸·Î ¾ÕÂÊ¿¡ À§Ä¡ÇÑ Æú¸®°ïÀ» ÀúÀåÇϸç, µÎ¹øÂ° ÇÏÀ§ ³ëµå¿¡´Â µÚÂÊ¿¡ À§Ä¡½ÃŰ´Â °ÍÀ» ±ÔÄ¢À¸·Î ÇÑ´Ù. ¸ÕÀú ÃÖ»óÀ§ ·çÆ®(root) ³ëµå·Î B¸¦ ¼±ÅÃÇÏÀÚ.

[±×¸² 5]

 

        ¿Ö ÇÏÇÊ B¸¦ ·çÆ® ³ëµå·Î ¼±ÅÃÇßÀ»±î? Áö±ÝÀ¸·Î¼± º° ÀÇ¹Ì ¾ø´Ù. ¾Æ¹«°Å³ª ¼±ÅÃÇØµµ »ó°ü¾ø´Ù. ÀÌÁ¦ Æ®¸® ±¸Á¶ÀÇ ·çÆ®¿¡ B°¡ À§Ä¡ÇÒ °ÍÀÌ´Ù. [±×¸² 5]¸¦ º¸¸é ·çÆ®¿¡  B°¡ À§Ä¡ÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. B¸¦ ±âÁØÀ¸·Î ÇÏÀ§ ³ëµå 2°³°¡ ÀÖÀ½À» ¾Ë ¼ö Àִµ¥ ÀÌ´Â °¢°¢ ÀÚ½ÅÀ» ±âÁØÀ¸·Î ¾ÕÂÊ¿¡ À§Ä¡ÇÑ Æú¸®°ïÀ» °¡¸®Å°´Â Front ³ëµå¿Í µÚÂÊÀ» °¡¸®Å°´Â Back ³ëµå¸¦ °¡Áö°í ÀÖ´Ù. ÇöÀç´Â Front¿Í Back³ëµå ¸ðµÎ ºñ¾îÀÖ´Â »óÅÂÀÌ´Ù.

        ÀÌÁ¦ A¸¦ ¼±ÅÃÇÏÀÚ. [±×¸² 4]À» º¸¸é B¸¦ ±âÁØÀ¸·Î º¼ ¶§ A´Â BÀÇ µÚ¿¡ À§Ä¡ÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. ·çÆ®¿¡´Â ÀÌ¹Ì B°¡ À§Ä¡Çϰí ÀÖÀ¸¹Ç·Î BÀÇ ÇÏÀ§ Front ³ëµå¿¡ A¸¦ Ãß°¡ÇÑ´Ù.

 

 

[±×¸² 6]

 

±×·±µ¥ Á» ÀÌ»óÇÏÁö ¾ÊÀº°¡? È®½ÇÈ÷ A³ëµå´Â BÀÇ µÚ¿¡ À§Ä¡Çϴ°¡? [±×¸² 7]¿Í [±×¸² 8]À» ºñ±³ÇØ º¸¶ó.

 

[±×¸² 7]

 

[±×¸² 8]

 

        [±×¸² 7]¿Í [±×¸² 8]Àº AÀÇ ¹æÇâ º¤ÅͰ¡ ¹Ý´ë ¹æÇâÀ¸·Î À§Ä¡ÇØ ÀÖ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í µÎ °æ¿ì ¸ðµÎ B¸¦ ±âÁØÀ¸·Î A´Â µÚ¿¡ À§Ä¡ÇÑ´Ù°í ÆÇ´ÜÇÑ´Ù. ¿Ö ÀÌ·± °á°ú¸¦ ¾ò´Â°¡? Æú¸®°ï A¸¦ ±¸¼ºÇÏ´Â ¸ðµç Á¤Á¡Àº Æú¸®°ï BÀÇ µÚ¿¡ À§Ä¡Çϱ⠶§¹®¿¡ °á±¹ A´Â BÀÇ µÚ¿¡ À§Ä¡ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ´Ù½Ã ¸»ÇÏ¸é ±âÁØÀÌ µÇ´Â BÀÇ ¹æÇ⼺¸¸ Àǹ̰¡ ÀÖÀ» »Ó AÀÇ ¹æÇ⼺Àº ¹«½ÃÇÑ´Ù. µû¶ó¼­ [±×¸² 7]°ú [±×¸² 8]Àº ¸ðµÎ [±×¸² 6]ÀÇ ÇüÅ·Π¹èÄ¡ÇÔÀ» ¿øÄ¢À¸·Î ÇÑ´Ù.

        ±×·¸´Ù¸é A¸¦ ±âÁØÀ¸·Î ¼±ÅÃÇÑ´Ù¸é ¾î¶»°Ô µÉ±î? [±×¸² 7]ÀÇ °æ¿ì Æú¸®°ï B´Â A¿¡ ´ëÇØ µÚÂÊ¿¡ À§Ä¡ÇÑ´Ù. [±×¸² 8]ÀÇ °æ¿ì Æú¸®°ï B´Â A¿¡ ´ëÇØ ¾ÕÂÊ¿¡ À§Ä¡ÇÑ´Ù.

        ´ÙÀ½À¸·Î ³²Àº Æú¸®°ï C, DÁß¿¡¼­ D¸¦ ¸ÕÀú ¼±ÅÃÇÏÀÚ. D¸¦ Æ®¸®¿¡ ³Ö±â À§ÇØ ¸ÕÀú ·çÆ® ³ëµå B¿Í ºñ±³¸¦ ÇÑ´Ù. D´Â BÀÇ ¾ÕÂÊ¿¡ À§Ä¡ÇϹǷΠBÀÇ ÇÏÀ§ Front ³ëµå¿¡ ÀúÀåÇÑ´Ù. [±×¸² 9]

        ÀÌÁ¦ ¸¶Áö¸·À¸·Î ³²Àº Æú¸®°ï C¸¦ Æ®¸®¿¡ ³Ö´Â´Ù. C¸¦ B¿Í ºñ±³ÇØ º¸´Ï BÀÇ ¾Õ¿¡ À§Ä¡ÇÑ´Ù. µû¶ó¼­ C¸¦ BÀÇ ÇÏÀ§ Front ³ëµå¿¡ Ãß°¡ÇÏ¸é Æ®¸®´Â [±×¸² 10]¿Í °°Àº ÇüŸ¦ ÀÌ·é´Ù. ÇÏÀ§ Front ³ëµå¿¡´Â C, D µÎ°³ÀÇÆú¸®°ïÀ» ÀúÀåÇϰí ÀÖÀ¸¹Ç·Î ´ÙÀ½¿£ C¿Í D¸¦ À§ÀÇ ¿ä·ÉÀ¸·Î ´Ù½Ã ºÐÇÒÇÏÀÚ. À̹ø¿¡´Â D¸¦ ±âÁØ Æú¸®°ïÀ¸·Î ÀâÀ¸¸é DÀÇ µÚ¿¡ C°¡ À§Ä¡ÇϹǷΠDÀÇ ÇÏÀ§ Back ³ëµå¿¡ C¸¦ º¸³½´Ù. ÀÌÁ¦ BSP Æ®¸®¸¦ ¿Ï¼ºÇÏ¿´´Ù. [±×¸² 11]

 

2Áø Æ®¸®±¸Á¶¿Í È¿À²¼º

        À§ÀÇ ¿¹Á¦¿¡¼­ Æú¸®°ï A, B, C, D¿¡ ´ëÇÏ¿© B-A-D-CÀÇ ¼ø¼­·Î BSP Æ®¸®¸¦ »ý¼ºÇÏ¿´´Ù. ±×·±µ¥ ¾î¶°ÇÑ Æú¸®°ïÀ» ¸ÕÀú ¼±ÅÃÇÏ´À³Ä¿¡ µû¶ó ¿©·¯°¡Áö Æ®¸® ÇüŰ¡ ³ªÅ¸³¯ ¼ö ÀÖ´Ù. °á±¹ Æ®¸® ÇüÅ´ Æú¸®°ïÀÇ ¼±Åà ¼ø¼­¿¡ ´Þ¸° °ÍÀÌ´Ù. ¸¸¾à Æú¸®°ïÀ» D-C-B-AÀÇ ¼ø¼­·Î ¼±ÅÃÇÏ¿© Æ®¸®¸¦ ±¸¼ºÇÑ´Ù¸é ¾î¶»°Ô µÉ±î? [±×¸² 12]¿Í °°Àº ÇüŸ¦ ÀÌ·é´Ù.

 

        [±×¸² 12]°¡ [±×¸² 11]¿¡ ºñÇØ È¿À²ÀûÀÎ Æ®¸®¶ó°í ¸»ÇÒ ¼ö Àִ°¡? ±×·¸Áö ¾Ê´Ù. [±×¸² 11]ÀÇ °æ¿ì Æ®¸®ÀÇ ±íÀ̰¡ 3Àε¥ ¹ÝÇØ [±×¸² 12]´Â 4ÀÌ´Ù. µû¶ó¼­ Æ®¸®¸¦ Ž»öÇÏ·Á ÇÒ °æ¿ì [±×¸² 11]ÀÇ °æ¿ì°¡ ´õ À¯¸®ÇÏ´Ù°í ÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ BSP¸¦ »ý¼ºÇÒ ¶§ ±âÁØ Æú¸®°ïÀÇ ¼±ÅÃÀ» ÃÖÀûÈ­ÇÏ¿© Æ®¸®ÀÇ ±íÀ̸¦ ÃÖ¼ÒÈ­ÇÒ Çʿ伺ÀÌ ÀÖ´Ù.

 

 

µ¿ÀÏ Æò¸é»óÀÇ Æú¸®°ï

        BSP´Â ƯÁ¤ Æú¸®°ïÀÌ ´Ù¸¥ Æú¸®°ï¿¡ ´ëÇÏ¿© ¾ÕÂÊ¿¡ Àִ°¡ µÚÂÊ¿¡ Àִ°¡¸¦ ÆÇ´ÜÇÏ´Â ±Ù°Å¸¦ Á¦°øÇÑ´Ù. ±×·¯±â À§Çؼ­ ƯÁ¤ Æú¸®°ïÀ» ¼±ÅÃÇÏ¿© À̸¦ ±âÁØÀ¸·Î »ï¾Æ ³ª¸ÓÁö Æú¸®°ïµéÀ» Àç¹èÄ¡(Classify)ÇÏ¿´´Ù. ±×·±µ¥ ¼±ÅÃÇÑ ±âÁØ Æú¸®°ïÀÇ Æò¸é¿¡ ´ëÇÏ¿© µ¿ÀÏÇÑ Æò¸é¿¡ À§Ä¡ÇÏ´Â Æú¸®°ïÀº ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡? À̶§¿¡´Â ±âÁØ Æú¸®°ïÀ» Æ÷ÇÔÇÏ´Â ³ëµå¿¡ °°ÀÌ Ãß°¡ÇÑ´Ù.

 

        À§ÀÇ ±×¸²¿¡¼­ A¸¦ ±âÁØ Æú¸®°ïÀ¸·Î ¼±ÅÃÇÏ¿´´Ù °¡Á¤ÇÏÀÚ. ³ª¸ÓÁö Æú¸®°ï B, C, D¸¦ AÀÇ Æò¸é¿¡ °üÇØ ºÐ·ùÇÏ·Á°í º¸´Ï ¸ðµÎ µ¿ÀÏ Æò¸é¿¡ À§Ä¡Çϰí ÀÖ´Ù. °Ô´Ù°¡ C¿Í °°Àº °æ¿ì µ¿ÀÏ Æò¸é»ó¿¡ À§Ä¡Çϰí ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í ¹Ý´ë ¹æÇâÀ» ÇâÇϰí ÀÖ´Ù. ÀÌ °æ¿ì ¾î¶»°Ô ÇÒ °ÍÀΰ¡? Á¤´äÀº B, C, D¸¦ A¸¦ Æ÷ÇÔÇÏ´Â ³ëµå¿¡ ±×³É Ãß°¡ÇÏ´Â °ÍÀÌ´Ù. BSP ³ëµå´Â 2°³ÀÇ ¿¬°á ¸®½ºÆ®(Linked List)¸¦ °¡Áö°í Àִµ¥ ±×Áß Çϳª´Â µ¿ÀÏ Æò¸é»ó¿¡ À§Ä¡ÇÏ¸ç µ¿ÀÏÇÑ ¹æÇ⼺À» °¡Áö´Â Æú¸®°ïÀ» ÀúÀåÇϰí, ³ª¸ÓÁö Çϳª´Â µ¿ÀÏ Æò¸é»ó¿¡ À§Ä¡ÇÏÁö¸¸ ¹Ý´ë ¹æÇ⼺À» °¡Áö´Â Æú¸®°ïÀ» ÀúÀåÇÑ´Ù.

ÀÌ¿Í °°Àº Á¤º¸¸¦ ÀúÀåÇϱâ À§ÇÑ BSP ³ëµåÀÇ Å¬·¡½º¸¦ Á¤ÀÇÇÏ¸é ´ÙÀ½°ú °°´Ù.

 

class CBspNode

{

public:

float PlaneEquation[4];                 // ±âÁØ Æú¸®°ï¿¡¼­ ¾òÀº Æò¸éÀÇ ¹æÁ¤½Ä

LinkedList SamePolyList;             // µ¿ÀÏ Æò¸é, µ¿ÀÏ ¹æÇâÀÇ Æú¸®°ï ÀúÀå

LinkedList OppositePolyList;         // µ¿ÀÏ Æò¸é, ¹Ý´ë ¹æÇâÀÇ Æú¸®°ï ÀúÀå

CBspNode *pFrontNode; // ÇÏÀ§ Front ³ëµå

CBspNode *pBackNode; // ÇÏÀ§ Back ³ëµå

};

 

 

[±×¸² 14]

 

        [±×¸² 14]¿¡¼­ ±âÁØ Æú¸®°ï A´Â Æú¸®°ï B¸¦ °¡·ÎÁö¸£°í ÀÖ´Ù. Æú¸®°ï BÀÇ ÀϺδ AÀÇ ¾Õ¿¡ ÀÖ°í ÀϺδ µÚ¿¡ ÀÖ´Ù. ÀÌ·¯ÇÑ °æ¿ì Æú¸®°ï B¸¦ µÎ Á¶°¢À¸·Î ºÐÇÒÇÏ¿© °¢±â ÀúÀåÇÑ´Ù. [±×¸² 15] À» º¸¸é A¸¦ Æ÷ÇÔÇÏ´Â Æò¸é¿¡ ´ëÇØ B°¡ B1°ú B2·Î ºÐÇÒµÈ °ÍÀ» º¼ ¼ö ÀÖ´Ù. ¿©±â¼­ B1Àº AÀÇ ¾ÕÂÊÀÌ ÀÖ°í B2´Â µÚÂÊ¿¡ ÀÖÀ¸¹Ç·Î °¢°¢ AÀÇ ÇÏÀ§ Front ³ëµå¿Í ÇÏÀ§ Back ³ëµå¿¡ Ãß°¡ÇÑ´Ù.

 

¿¹Á¦

        Áö±Ý±îÁö ´Ù·é ³»¿ëÀÌ BSP Æ®¸®¸¦ ±¸ÃàÇϱâ À§ÇØ ÇÊ¿äÇÑ ¸ðµç ³»¿ëÀÌ´Ù. À§ÀÇ ³»¿ëÀ» Á¤È®ÇÏ°Ô ¾Ë ¼ö ÀÖ´ÂÁö ÀÚ½ÅÀÌ ¾ø´Ù¸é ´ÙÀ½ ¹®Á¦¸¦ º¸¸ç ¿¬½ÀÇÏ±æ ¹Ù¶õ´Ù. [±×¸² 16]¿¡ Á» ´õ ¸¹Àº ¼ýÀÚÀÇ Æú¸®°ïÀ» ¹èÄ¡ÇÏ¿´´Ù.  ±×¸²¿¡¼­ º¸µíÀÌ Æú¸®°ï A, K, LÀº µ¿ÀÏ Æò¸é¿¡ À§Ä¡ÇÏ°í Æú¸®°ï B´Â Æú¸®°ï E¸¦ ºÐÇÒÇÔ¿¡ ÁÖÀÇÇØ¼­ ½º½º·Î BSP¸¦ ºÐÇÒÇØ º¸°í °á°ú¸¦ ºñ±³ÇØ º¸ÀÚ. Æú¸®°ïÀÇ ¼±Åà ¼ø¼­¿¡ µû¶ó °á°ú°¡ ´Þ¶óÁü¿¡ ÁÖÀÇÇ϶ó.

 

[±×¸² 16]

 

1. A¸¦ ±âÁØ Æú¸®°ïÀ¸·Î ¼±ÅÃÇÑ´Ù. K¿Í LÀÌ µ¿ÀÏ Æò¸é¿¡ À§Ä¡ÇϹǷΠA¸¦ Æ÷ÇÔÇÏ´Â ³ëµå¿¡ Ãß°¡ÇÑ ÈÄ¿¡ ÇÏÀ§ Front¿Í ÇÏÀ§ Back³ëµå¸¦ Ãß°¡ÇÑ´Ù

 

 

2. ÇÏÀ§ Front ³ëµå¸¦ ±¸¼ºÇÏ´Â B, C, D, E, F, GÁß¿¡¼­ B¸¦ ±âÁØ Æú¸®°ïÀ¸·Î ¼±ÅÃÇÏ¿© ´Ù½Ã ºÐ·ùÇÑ´Ù. À̶§ B´Â E¸¦ ºÐÇÒ(Subdiv)ÇÏ¿© ¾ÕÂÊ¿¡ À§Ä¡ÇÑ E1°ú µÚÂÊ¿¡ À§Ä¡ÇÑ E2¸¦ ¾òÀº ÈÄ¿¡ °¢°¢ÀÇ ÇÏÀ§ ³ëµå¿¡ ÀúÀåÇÑ´Ù.

3. ³ª¸ÓÁö Æú¸®°ïµéµµ À§ÀÇ ¿ä·ÉÀ¸·Î Àç±ÍÀûÀ¸·Î ±¸¼ºÇÑ´Ù. °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

        ÀÚ, ´ëÃæ ÀÌÇØÇߴ°¡? ´ÙÀ½ °­Á¿¡¼­´Â ½ÇÁ¦ÀûÀ¸·Î ÀÌ·¯ÇÑ BSP¸¦ C++À» ÀÌ¿ëÇØ ±¸ÇöÇÏ´Â ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¼ °ÍÀÌ´Ù. Áö±Ý ´Ù·ç´Â ³»¿ëÀº °íÀüÀûÀÎ BSPÀÌ°í ½ÇÁ¦ °ÔÀÓ¿¡¼­ »ç¿ëÇÏ´Â BSP¿Í´Â Á¶±Ý ´Ù¸£´Ù´Â°ÍÀ» ±â¾ïÇÏ°í ´ÙÀ½ °­Á¸¦ ±â´ëÇÏ±æ ¹Ù¶õ´Ù.