์ด๋ฒˆ์— ์†Œ๊ฐœํ•  ๋‚ด์šฉ์€ Raycast๋ผ๋Š” ์—ญ์‹œ ์•„์ฃผ ์˜ค๋ž˜๋œ ํ…Œํฌ๋‹‰์ด์•ผ.

์ด ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๊ฒŒ์ž„์œผ๋กœ๋Š” ์—ญ์‹œ id ์†Œํ”„ํŠธ์˜ ์šธํŽœ์Šˆํƒ€์ธ3D๊ฐ€ ์•„๋‹๊นŒ

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed908dc6f5173abd3ccc409218b6d3bece6a15ddfcb098d94

์ด๊ฑด ์ง์ ‘ ๊ตฌํ˜„ํ•œ ํ™”๋ฉด. ์šฉ๋Ÿ‰์„ ์ค„์ด๋ ค๊ณ  FPS๋ฅผ 10fps๋กœ ๋งž์ถ”๋‹ˆ ๋Š๊ฒจ ๋ณด์ด๋„ค ใ…Ž

ํด๋ฆฌ๊ณค๋„ ์•„๋‹Œ๋ฐ ์ด๋Ÿฐ 3D ํšจ๊ณผ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ„์ฃผ๋กœ ์†Œ๊ฐœํ•ด๋ณผ๊ป˜.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80393776a6d1c285fb62a656dac57ef5f74dae99fea7ebcac4a3


1. ๊ด€์ฐฐ์ž๋กœ๋ถ€ํ„ฐ 2์ฐจ์› TopView์—์„œ Ray๋ฅผ ์˜์•„ ๋ฒฝ(๊ฒ€๊ฒŒ ์น ํ•ด์ง„ ๋ถ€๋ถ„)๊ณผ ๊ต์ฐจ์ ์„ ๊ตฌํ•œ๋‹ค.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80395a1baddccf568e4f6f604d544e7d4c4acd2bf0f21e5ea34940



2. ๊ต์ฐจ์ ๊ณผ ๊ด€์ฐฐ์ž์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒฝ์˜ ์ˆ˜์ง์„ ์„ ํ™”๋ฉด์— ํˆฌ์˜.




viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80393776a6d1c285fb62a656dac57ef7a019ff97aea4eb71c907

๋Œ€์ถฉ ์˜์‚ฌ์ฝ”๋“œ๋„ ์ ์–ด๋ดค์–ด.




์ด์ œ ์ข€ ๋” ์ž์„ธํžˆ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์ž.

๋จผ์ € ๊ต์ฐจ์  ๊ตฌํ•˜๊ธฐ๋ถ€ํ„ฐ.

์šฐ๋ฆฌ๋Š” ๋ช‡๊ฐ€์ง€ ์ œํ•œ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ,

1. ๋ฒฝ๊ณผ ๋นˆ๊ณต๊ฐ„๋งŒ ์žˆ๋Š” ์‚ฌ์‹ค์ƒ 2D์›”๋“œ

2. ๋ฒฝ์€ Grid๋กœ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ๊ณผ ์ผ์ •ํ•œ ํฌ๊ธฐ๋กœ ์กด์žฌํ•œ๋‹ค.

3. ์นด๋ฉ”๋ผ์˜ ์ขŒ์šฐํšŒ์ „๋งŒ(yaw) ํ—ˆ์šฉํ•œ๋‹ค.(pitch, roll ์•ˆ๋จ)

์œ„ ์ œํ•œ์„ ๋ฐ”ํƒ•์œผ๋กœ Ray์™€ ๋ฒฝ์˜ ๊ต์ฐจ๋Š” 2D์—์„œ ๊ฒฉ์ž๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์–ด.

์ฆ‰, ๊ต์ฐจ์ ์€ ํ•ญ์ƒ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์žˆ๋Š” Grid ์„  ์œ„์—'๋งŒ' ์กด์žฌํ•จ.

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๋น ๋ฅด๊ฒŒ ๊ต์ฐจ์ ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋Š”๋ฐ ๊ทธ๊ฒƒ์„ DDA(Digital differential analyzer) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ๋ถˆ๋Ÿฌ.


๊ต์ฐจ์  A~F ๋ชจ๋‘ ๊ฐ„๊ฒฉ์ด 1์ธ Grid ์„ ๋ถ„ ์œ„์— ์žˆ์Œ.

๊ต์ฐจ๋Š” A->B->C->D->E->F ์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๊ต์ฐจ๋˜๋Š”๋ฐ, ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๋จผ์ € Grid์˜ ์„ ๋ถ„์„ ์ˆ˜์ง์„ ๊ณผ ์ˆ˜ํ‰์„ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ƒ๊ฐํ•ด๋ณด์ž.

์ˆ˜์ง์„ ์˜ ๊ฒฝ์šฐ,

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80393776a6d1c285fb62a656dac52bf7f44ea8c5aca4ebfc9770



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80395a1baddccf568e4f6f604d544e291d439e2cf6f11bf64bc6c1




์ˆ˜์ง์„ ์˜ ๊ฒฝ์šฐ ์œ„์™€๊ฐ™์ด ray์˜ xdelta ๊ธธ์ด๋งˆ๋‹ค ํ•œ ์ ์”ฉ ๊ต์ฐจํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Œ (Grid ๊ฐ„๊ฒฉ์€ 1.0)

ray์˜ ์›๋ž˜ ๊ธธ์ด๊ฐ€ 1(ray.dir์€ ๋‹จ์œ„๋ฒกํ„ฐ)์ด๋ผ๋ฉด ์‚ผ๊ฐํ˜•๋น„๋กœ ์‰ฝ๊ฒŒ xdelta๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.



์ˆ˜ํ‰์„ ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80393776a6d1c285fb62a656dac52ca3a215fe92abf7eb133f24

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80395a1baddccf568e4f6f604d544e7b48479b7da2f64f4fca84fa







xdelta์™€ ydelta๋ฅผ ์•Œ๋ฉด ๋‹ค์Œ x๊ต์ฐจ์ ๊ณผ ๋‹ค์Œ y๊ต์ฐจ์ ์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ.

๋‹ค์Œ x๊ต์ฐจ์  = ํ˜„์žฌx๊ต์ฐจ์  ๊ฑฐ๋ฆฌ(xdist) + xdelta

๋‹ค์Œ y๊ต์ฐจ์  = ํ˜„์žฌy๊ต์ฐจ์  ๊ฑฐ๋ฆฌ(ydist) + ydelta


๊ทธ๋Ÿผ ์ตœ์ดˆ์˜ x๊ต์ฐจ์ ๊ณผ y๊ต์ฐจ์ ์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ•˜๋ฉด ๋ ๊นŒ?

xdelta์™€ ydetal์˜ ์˜๋ฏธ๋Š” ๊ฐ๊ฐ 1๋งŒํผ ์ด๋™ํ–ˆ์„ ๋•Œ ray์˜ ๊ฑฐ๋ฆฌ.

๋”ฐ๋ผ์„œ ์˜จ์ „ํžˆ 1์ด ์•„๋‹ˆ๋ผ ์ฒ˜์Œ ๊ทธ๋ฆฌ๋“œ ๊ฐ„๊ฒฉ์—(xoffset, yoffset)์— xdelta์™€ ydelta๋ฅผ ๊ณฑํ•˜๋ฉด ์ตœ์ดˆ์˜ x๊ต์ฐจ์  ๊ฑฐ๋ฆฌ์™€ y๊ต์ฐจ์  ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์–ด.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80395a1baddccf568e4f6f604d544e2c4846ca2cf6a01f7929f912



์ด์ œ ํ•„์š”ํ•œ ์ •๋ณด๋Š” ๋‹ค ์•Œ์•˜์œผ๋‹ˆ ์ˆœ์„œ๋ฅผ ๋”ฐ์ ธ๊ฐ€๋ฉฐ ์‚ดํŽด๋ณด์ž.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80393776a6d1c285fb62a656dac578a4a448fc97fef2eb40b2b3


1. xdelta, ydelta, xdist, ydist๋ฅผ ๊ตฌํ•œ๋‹ค.

2. ydist < xdist์ด๋‹ค. A๊ฐ€ ๊ต์ฐจ์ ์ด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ydist = ydist + ydelta๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

3. ydist < xdist์ด๋‹ค. B๊ฐ€ ๊ต์ฐจ์ ์ด ๋œ๋‹ค. ๋‹ค์‹œ ydist= ydist + ydelta๋กœ ๊ฐฑ์‹ 

4. xdist < ydist, ์ด์ œ xdist๊ฐ€ ๋” ์งง๋‹ค. ๋”ฐ๋ผ์„œ C๊ฐ€ ๊ต์ฐจ์ ์ด๋œ๋‹ค. ๋‹ค์Œ ์ˆ˜์ง์„ ๊ณผ์˜ ๊ต์ฐจ์ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค. xdist = xdist + xdelta

5. ydisy < xdist, D๊ฐ€ ๊ต์ฐจ์ ์ด ๋œ๋‹ค. ๋‹ค์Œ ์ˆ˜ํ‰์„ ๊ณผ์˜ ๊ต์ฐจ๊ฑฐ๋ฆฌ๋Š” ydist = ydist + ydelta์ด๋‹ค.

6. ์—ฌ์ „ํžˆ ydist์™€ ๊ต์ฐจํ•˜๋Š” ์ˆ˜ํ‰์„  ์œ„ ๊ต์ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ xdist๋กœ ๊ต์ฐจํ•˜๋Š” ์ˆ˜์ง์„  ์œ„ ๊ต์ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ณด๋‹ค ์งง๋‹ค. ๋”ฐ๋ผ์„œ E๊ฐ€ ๊ต์ฐจ์ ์ด ๋œ๋‹ค.
ydist = ydist + ydelta

7. xdist < ydist, F๊ฐ€ ๊ต์ฐจ์ ์ด ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ˜„์žฌ ๊ต์ฐจ์ ์ด ์žˆ๋Š” ๊ณณ์˜ ์œ„์น˜๋Š” (2,1)์ด๊ณ  ์ด๊ณณ์€ ๋ฒฝ์ด๋‹ค. ์—ฌ๊ธฐ์„œ raycast๋ฅผ ๋งˆ์นœ๋‹ค.

์ด๊ฑธ๋กœ ray์™€ ๋ฒฝ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ, ์ด์ œ ๋‚จ์€ ๊ฒƒ์€ ์ด ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒฝ์˜ ์ˆ˜์ง์„ ์„ ๊ทธ๋ ค์ฃผ๋ฉด ๋จ.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80393776a6d1c285fb62a656dac57da1a61ea599f4f6ebb7b127





๊ทธ๋Ÿฐ๋ฐ, ์—ฌ๊ธฐ์„œ ํ•œ๊ฐ€์ง€ ์ฃผ์˜ํ•  ์ ์€ ๊ต์ฐจ์ ๊ณผ ์นด๋ฉ”๋ผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์จ๋ฒ„๋ฆฌ๋ฉด ์–ด์•ˆ๋ Œ์ฆˆ์™€ ๊ฐ™์ด ๋˜์–ด๋ฒ„๋ ค.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80395a1baddccf568e4f6f604d544e2e41449b78f5a11099a4b59a


๋ฒฝ์„ ๋ฐ”๋กœ ์ •๋ฉด์—์„œ ๋ฐ”๋ผ๋ณด์•˜์„ ๋•Œ C,D,E๊ฐ€ ํ™”๋ฉด์ƒ ํ‰ํ‰ํ•˜๊ฒŒ ๋ณด์ด๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜์ง€๋งŒ ray์˜ ๊ฑฐ๋ฆฌ๊ฐ€ C์™€ E๊ฐ€ D์— ๋น„ํ•ด์„œ ๋” ๊ธธ๊ธฐ ๋•Œ๋ฌธ์—

์œ„์™€ ๊ฐ™์ด ์™œ๊ณก๋˜์–ด ๋ณด์—ฌ์ง.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80393776a6d1c285fb62a656dac57cfaa318a995aef6eb184afc


์ด๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ๋ž€์„ ๊ณผ ๊ฐ™์ด ์นด๋ฉ”๋ผ ์ •์ค‘์•™์˜ ๋ฐฉํ–ฅ์— ๋”ฐ๋ฅธ ray์˜ ๊ธธ์ด(๋‚ด์ ์œผ๋กœ ๊ฐ„๋‹จํžˆ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ)๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด

์–ด์•ˆ๋ Œ์ฆˆ ํ˜„์ƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Œ.



์ด๊ฑธ๋กœ ๋ฒฝ๊ทธ๋ฆฌ๊ธฐ ๊นŒ์ง€ ๋.


์ง€๊ธˆ๊นŒ์ง€ ๋งต์„ ๊ทธ๋ ธ๋‹ค๋ฉด ๋‚จ์€ ๊ฒƒ์€ ๋ฌผ์ฒด์— ํ•ด๋‹นํ•˜๋Š” ์Šคํ”„๋ผ์ดํŠธ ๊ทธ๋ฆฌ๊ธฐ.


์Šคํ”„๋ผ์ดํŠธ๋Š” ๋ฒฝ์„ ๋‹ค ๊ทธ๋ฆฐ ํ›„ ๊ทธ๋ฆฌ๊ฒŒ ๋˜๋Š”๋ฐ ๋ฌธ์ œ๋Š” ๋ฒฝ์— ๊ฐ€๋ ค์ง„ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ ๊นŒ?




viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80395a1baddccf568e4f6f604d544e754e16982bf2a71c517f41d5


์Šคํ”„๋ผ์ดํŠธ๊ฐ€ ๋ฒฝ ๋’ค์— ์žˆ๊ณ  ๊ด€์ฐฐ์ž์—๊ฒŒ๋Š” ์ผ๋ถ€๋งŒ ๋ณด์ž„.

์ด์™€ ๊ฐ™์ด ๋ฒฝ์— ๊ฐ€๋ ค์ง„ ๋ถ€๋ถ„์€ ๊ทธ๋ ค์ง€์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ˜„๋Œ€์˜ ๊นŠ์ด๋ฒ„ํผ์™€ ๊ฐ™์€ ๊ฒƒ์„ 1์ฐจ์›์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์ฒ˜๋ฆฌํ•จ.


์Šคํ”„๋ผ์ดํŠธ๋„ ๋ฒฝ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ˆ˜์ง์„  ๋ฐฉํ–ฅ์œผ๋กœ ์ชผ๊ฐœ์„œ ํ•˜๋‚˜์”ฉ ๊ทธ๋ฆฌ๊ฒŒ ๋˜๋Š”๋ฐ,

์šฐ๋ฆฌ๊ฐ€ ์•ž์„œ ๊ณ„์‚ฐํ•œ CamFwd ๊ธฐ์ค€ ๊ฑฐ๋ฆฌ๋ฅผ 1์ฐจ์› ๊นŠ์ด ๋ฒ„ํผ์— ์ €์žฅํ•˜๊ณ  ์Šคํ”„๋ผ์ดํŠธ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ทธ ๊นŠ์ด๋ฒ„ํผ๋ณด๋‹ค ์ž‘์„ ๋•Œ๋งŒ ๊ทธ๋ฆฌ๊ฒŒ ํ•˜๋ฉด ๋.






viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403212d05ed900ce4b737cb7ed94d80395a1baddccf568e4f6f604d544e2c1911c87ff1f51d2be2dc81




์—ฌ๊ธฐ๊นŒ์ง€ raycast์˜ ํ•ต์‹ฌ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์†Œ๊ฐœํ•ด๋ณด์•˜์Œ..

๋””ํ…Œ์ผํ•œ ๋‚ด์šฉ๊ณผ ์ฝ”๋“œ๊ฐ€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์•„๋ž˜ ์ฐธ๊ณ  ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธธ ๋ฐ”๋žŒ.

๊นƒํ—ˆ๋ธŒ๋„ ๋’ค์ ธ๋ณด์‹œ๋ฉด ์šธํŽœ์Šˆํƒ€์ธ3D ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ทธ๊ฒƒ๋„ ํ•œ๋ฒˆ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„.


๋‹ค์Œ์— ๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด ๋ฌธ ๊ทธ๋ฆฌ๊ธฐ, ์ˆจ๊ฒจ์ง„ ๋ฒฝ๊ทธ๋ฆฌ๊ธฐ ๋“ฑ์— ๋Œ€ํ•ด์„œ๋„ ์ •๋ฆฌํ•ด๋ณผ๊ป˜.

๋‚ด์šฉ๋“ค์ด ์ ์  ๋ณต์žกํ•ด์ง€๋‹ˆ ์“ฐ๋Š” ๊ฒƒ๋„ ์ผ์ด๊ตฌ๋งŒ. ๋˜๋„๋ก ํ•œ๋ฒˆ์— ๋๋‚ด๊ณ  ์‹ถ์€๋ฐ ๋‹ค์Œ์—๋Š” ์ชผ๊ฐœ์„œ ์จ์•ผํ•˜๋‚˜ ๊ณ ๋ฏผ์ค‘.


์ฐธ๊ณ  ์‚ฌ์ดํŠธ :

https://lodev.org/cgtutor/raycasting.html