๊ธ€

Simple Intersection Tests For Games (์˜์—ญ)

์ด๋ฏธ์ง€
[์›๋ฌธ] http://www.gamasutra.com/view/feature/131790/simple_intersection_tests_for_games.php?page=1  ๋‹น์‹ ์˜ ์ฐจ๊ฐ€ ์‹œ์† 180๋งˆ์ผ๋กœ finish line์„ ํ†ต๊ณผํ•˜๋“ , ์ด์•Œ์ด ๋‹น์‹  ์ ˆ์นœ์˜ ๊ฐ€์Šด์„ ๊ฟฐ๋šซ๋“ , ๋ชจ๋“  ๊ฒŒ์ž„์˜ Object Intersection์—์„œ๋Š” ์ถฉ๋Œํƒ์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.  ์ด ๊ธฐ์‚ฌ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํ˜•์ƒ(Shape)์— ํ™œ์šฉ๋˜๋Š” ๋ช‡๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ Intersection Test๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. => [Sphere, Box] Sweep Tests for Moving Objects Collision Detection์˜ ๊ฐ€์žฅ ๊ณตํ†ต์ ์ธ ์ ‘๊ทผ๋ฒ•์€  ๋งค Frame์ด ๋๋‚  ๋•Œ, ๋‘ ๋ฌผ์ฒด๊ฐ€ Overlap๋˜๋Š”์ง€๋ฅผ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ด ๋ฐฉ๋ฒ•์ด ๋‘ ๋Œ€์ƒ์ด ์„œ๋กœ ๋น ๋ฅด๊ฒŒ ์›€์ง์ด๋ฉด์„œ ๊ต์ฐจํ•  ๋•Œ, ํƒ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.  ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, ๋ฌผ์ฒด๋“ค์˜ ๊ถค์ ์„ ์ž‘๊ฒŒ ๋ถ„ํ• ํ•œ ๋‹ค์Œ, ๋งค Point์—์„œ Check ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ๋ฌผ์ฒด์˜ (Frame ์‚ฌ์ด) ์ด๋™ ๊ฐ„๊ฒฉ์ด ๋„“์„ ๊ฒฝ์šฐ, ๋„ˆ๋ฌด ๋น„์‹ผ ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.  ๋ฐ˜๋ฉด์—, Sweep Test๋Š” ํšจ์œจ์ ์œผ๋กœ (๋ฌผ์ฒด๊ฐ€) Overlap๋˜๋Š” ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” Subdivision ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ตœ์ ์˜ ์‹œ์ž‘์ ์œผ๋กœ ์ด์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. A Sphere-Plane Sweep Test [Figure1. ํ‰๋ฉด์„ ํ†ต๊ณผํ•˜๋Š” ๊ตฌ]  ์œ„์˜ ๊ทธ๋ฆผ์€, ํ‰๋ฉด์„ ๋น ๋ฅด๊ฒŒ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ๊ตฌ์˜ ์˜ˆ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๋Š” ์  C 0 ๊ฐ€ ํ‰๋ฉด์˜ positive side์—, ์  C 1 ๊ฐ€ negative side์— ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  ์ผ๋ฐ˜์ ์œผ๋กœ, ๊ตฌ๊ฐ€ (Frame์˜ ์–ด๋Š ์‹œ์ ์—) ํ‰๋ฉด์„ ๊ฐ€๋กœ์ง€๋ฅผ ๋•Œ, d0 > r ์ด๊ณ  d1 < r ์ž…๋‹ˆ๋‹ค.  (r์€ ๊ตฌ์˜ ๋ฐ˜์ง€๋ฆ„, d0๊ณผ d1์€ ์  ...

(์˜์—ญ) Separating Axis Theorem(SAT) ์„ค๋ช…

์ด๋ฏธ์ง€
[์›๋ฌธ] https://www.sevenson.com.au/actionscript/sat/ Separating Axis Theorem(SAT)๋Š” ๋ณผ๋ก๋‹ค๊ฐํ˜•(convex polygons) ์‚ฌ์ด์˜ ์ถฉ๋Œ์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.  ์ „ ๊ฒฐ์ฝ” ์ „๋ฌธ๊ฐ€๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์ €์—๊ฒŒ Collision Detection์ด ํ•„์š”ํ•ด์ง„ ๋‹ค์Œ๋ถ€ํ„ฐ, ์ €๋Š” ๊ด€๋ จ ์ž๋ฃŒ๋“ค์„ ๋ชจ์•„์™”๊ณ , ๊ฒฐ๊ตญ ์ด๋ฅผ ActionScript 3๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ด๋“ค์ด (์ €์™€ ๊ฐ™์ด) ๊ณ ํ†ต์„ ๊ฒช์ง€ ์•Š์•˜์œผ๋ฉด ํ•˜๋Š” ๋งˆ์Œ์—, ์ด๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. Flash์—์„œ Polygon๋“ค ์‚ฌ์ด์˜ ์ถฉ๋Œ๊ณ„์‚ฐ์ด ํ•„์š”ํ•จ์„ ๋Š๊ผˆ์„ ๋•Œ๋ถ€ํ„ฐ, ์ €๋Š” ์ผ๋ช… '๋ถ„๋ฆฌ์ถ• ๊ฒ€์‚ฌ ์ด๋ก (SAT)'๋กœ ์•Œ๋ ค์ง„ ์ด ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ๋ฌธ์ œ๋Š”, ์ œ๊ฐ€ ์ด๋ฅผ ์ œ ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ์œ„ํ•ด ์—„์ฒญ๋‚˜๊ฒŒ ๊ณ ์ƒํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด์ง€์š”. ์•„์ฃผ ๋งŽ์€ Collision Detection ์ž๋ฃŒ๋ฅผ ์ฝ๊ณ , ์ฝ”๋“œ ์ƒ˜ํ”Œ์„ ์กฐ์‚ฌํ•œ ๋’ค์—์•ผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํฌ์ž(?)๋“ค์„ ์œ„ํ•ด, ๋จผ์ € ์ด ์ด๋ก ์˜ ๊ธฐ๋ณธ์ ์ธ ์›๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€๋ฅผ ๊ฐ€๋ณ๊ฒŒ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. The quick rundown ์ผ๋ฐ˜์ ์œผ๋กœ, SAT์˜ ๋ชฉ์ (๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  Collision Detection ๊ธฐ๋ฒ•) ์˜ ๋ชฉํ‘œ๋Š” ๋‘ Shape ์‚ฌ์ด์— ๊ฐ„๊ฒฉ์ด ์กด์žฌํ•˜๋Š” ์ง€๋ฅผ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.  ์ œ๊ฐ€ ์•„๋Š”, SAT์— ๋Œ€ํ•œ ๊ฐ€์žฅ ์ข‹์€ ๋น„์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. [ ํšƒ๋ถˆ์„ ์ผ  ๋‹ค์Œ, ๋‹น์‹ ์ด ํ…Œ์ŠคํŠธ ํ•˜๋ ค๋Š” ๋‘ Shape๋ฅผ ๋‹ค๋ฅธ ๊ฐ๋„๋กœ ๋น„์ถ˜๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์„ธ์š”.  ์–ด๋–ค ๊ทธ๋ฆผ์ž์˜ ํ˜•ํƒœ๊ฐ€, ๊ทธ ๋‘ Shape ๋ฐ”๋กœ ๋’ค์˜ ๋ฒฝ์— ๋‚˜ํƒ€๋‚ ๊นŒ์š”? ] ๋งŒ์•ฝ ๋‹น์‹ ์ด ๊ทธ Shape๋“ค ์ฃผ์œ„๋ฅผ ๋Œ๋ฉด์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ณ , ๊ทธ ๊ทธ๋ฆผ์ž๋“ค ์‚ฌ์ด์—์„œ ์•„๋ฌด๋Ÿฐ ๊ฐ„๊ฒฉ(gap)์„ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ๊ทธ ๋‘ Shape๋Š” ํ‹€๋ฆผ์—†์ด ์ ‘์ด‰ํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.  ๋ฐ˜๋Œ€๋กœ ๋งŒ์•ฝ ๊ฐ„๊ฒฉ์„ ์ฐพ๋Š”๋‹ค๋ฉด, ๋ถ„๋ช…ํžˆ ์ ‘์ด‰ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Programming์˜ ๊ด€์ ์—์„œ, ์ด๋Š” ์–ด~์—„์ฒญ ๋งŽ...

Collision Detecting / Collision Responding

์ผ์ฃผ์ผ ์ด์ƒ, ํ˜ผ์ž ๋จธ๋ฆฌ ์ฅ์–ด์‹ธ๊ณ  ๋™๋™๋Œ€๋˜ Babel์˜ ์œ ๋‹› ๋ณ„ ์ถฉ๋Œ์ฒ˜๋ฆฌ ๋ฌธ์ œ. ์ •ํ˜•ํ™”๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐพ์•„๋ณด์ง€ ์•Š๊ณ  ํ˜ผ์ž ๋„ˆ๋ฌด ์‚ฝ์งˆํ•œ ๊ฒƒ ๊ฐ™์•„ ์†์ด ์“ฐ๋ฆฌ๋‹ค.. ์—ญ์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋ ค๋ฉด, ๊ณต๋ถ€ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ๋งŽ์ด ๊ฐœ์„ ์‹œ์ผœ์•ผ ํ•  ๋“ฏ ์‹ถ๋‹ค https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection 2D ์ถฉ๋Œ์ฒ˜๋ฆฌ์— ๊ด€ํ•œ, ์ข‹์€ ํฌ์ŠคํŠธ๊ฐ€ ์ •๋ฆฌ๋œ ๋งํฌ. ํฌ์ŠคํŠธ ํ•˜๋‚˜ ํ•˜๋‚˜์”ฉ ๋ฒˆ์—ญํ•ด๋ด์•ผ๊ฒ ๋‹ค.

ํ•จ์ˆ˜ ํฌ์ธํ„ฐ, std::bind, ๋žŒ๋‹ค์‹๊นŒ์ง€..

Babel ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ๊ณผ์ •์—์„œ, ๋ฐœ์ƒํ•˜๋Š” Event๋“ค์„ ์ผ๊ด„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ(์ปจํ…Œ์ด๋„ˆ์™€ ๊ด€๋ฆฌ์ž)๋ฅผ  ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ๋‹ค.  ์˜ˆ๋ฅผ ๋“ค๋ฉด,   - Karma๊ฐ€ ์ผ์ •๋†’์ด์— ๋„๋‹ฌํ–ˆ์„ ์‹œ, ๋ณด์Šค๊ฐ€ ์ž ์‹œ ์ถœํ˜„ํ•ด ๋ฉ”์‹œ์ง€ ๋ช‡๋งˆ๋””๋ฅผ ๋˜์ง€๊ณ  ์‚ฌ๋ผ์ง€๋Š”..  - ์ผ์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ–ˆ์„ ๋•Œ, ํ™”๋ คํ•œ ์ดํŽ™ํŠธ์™€ ํ•จ๊ป˜ ์ˆจ๊ฒจ์ง„ ์•„์ดํ…œ์„ ํš๋“ํ•˜๋Š”.. ๊ณผ ๊ฐ™์€ Plot Event ๋ง์ด๋‹ค.   ๊ตฌํ˜„์„ ์œ„ํ•ด, ์šฐ์„  ์ €์žฅํ•  Event๋ฅผ ์ž๋ฃŒ๋กœ ์ƒ๊ฐํ•  ๋•Œ, ํ•„์š”์กฐ๊ฑด๋“ค์„ ๋ช…ํ™•ํžˆ ํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋‚ด ์ƒ๊ฐ์—, Event๋ž€ ํ•ด๋‹น 2๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ํ”„๋กœ์‹œ์ ธ๋ฅผ ๋งํ•œ๋‹ค.  ์ผ์ •ํ•œ ์ˆœ์„œ(Sequence)๋ฅผ ๊ฐ€์ง€๊ณ , ์—ฐ์†์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ณตํ•ฉ ํ”„๋กœ์‹œ์ ธ  CallBack์˜ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ”„๋กœ์‹œ์ ธ ์œ ์ € ์ž…๋ ฅ์— ๋Œ€ํ•ด, ์ง์ ‘์ด ์•„๋‹Œ ๊ฐ„์ ‘์  ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ชจ๋“  Manage ํ”„๋กœ์‹œ์ ธ๋ฅผ ๋งํ•œ๋‹ค.  ์ข…๋ฅ˜๋Š”, ์•ก์…˜์ด ๋  ์ˆ˜๋„ ์žˆ๊ณ  ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ, ํŒŒ๋ผ๋ฉ”ํ„ฐ ๋ณ€๊ฒฝ ๋“ฑ ๋ชจ๋“  ์กฐ์ž‘์œผ๋กœ ๋Š์Šจํ•œ ๋ฒ”์œ„๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ,  ๋ฌด์—‡๋ณด๋‹ค ์ผ์ •ํ•œ ์‹œํ€€์Šค์— ์˜ํ•ด Event๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋งค๋‹ˆ์ €๊ฐ€ ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (+์ฐธ๊ณ ) -  http://carstart.tistory.com/183

l-value ์™€ r-value์— ๋Œ€ํ•˜์—ฌ

http://blog.naver.com/PostView.nhn?blogId=han95173&logNo=220765490854