์ด๋ฒ์ ์๊ฐํ ๋ด์ฉ์ Raycast๋ผ๋ ์ญ์ ์์ฃผ ์ค๋๋ ํ ํฌ๋์ด์ผ.
์ด ๊ธฐ๋ฒ์ ์ฌ์ฉํ ๊ฐ์ฅ ์ ๋ช ํ ๊ฒ์์ผ๋ก๋ ์ญ์ id ์ํํธ์ ์ธํ์ํ์ธ3D๊ฐ ์๋๊น
์ด๊ฑด ์ง์ ๊ตฌํํ ํ๋ฉด. ์ฉ๋์ ์ค์ด๋ ค๊ณ FPS๋ฅผ 10fps๋ก ๋ง์ถ๋ ๋๊ฒจ ๋ณด์ด๋ค ใ
ํด๋ฆฌ๊ณค๋ ์๋๋ฐ ์ด๋ฐ 3D ํจ๊ณผ๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ํต์ฌ ์๊ณ ๋ฆฌ์ฆ ์์ฃผ๋ก ์๊ฐํด๋ณผ๊ป.
1. ๊ด์ฐฐ์๋ก๋ถํฐ 2์ฐจ์ TopView์์ Ray๋ฅผ ์์ ๋ฒฝ(๊ฒ๊ฒ ์น ํด์ง ๋ถ๋ถ)๊ณผ ๊ต์ฐจ์ ์ ๊ตฌํ๋ค.
2. ๊ต์ฐจ์ ๊ณผ ๊ด์ฐฐ์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฒฝ์ ์์ง์ ์ ํ๋ฉด์ ํฌ์.
๋์ถฉ ์์ฌ์ฝ๋๋ ์ ์ด๋ดค์ด.
์ด์ ์ข ๋ ์์ธํ ํ๋์ฉ ์ดํด๋ณด์.
๋จผ์ ๊ต์ฐจ์ ๊ตฌํ๊ธฐ๋ถํฐ.
์ฐ๋ฆฌ๋ ๋ช๊ฐ์ง ์ ํ์ ์ ๊ฐ์ง๊ณ ์๋๋ฐ,
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์ ์ ๋ถ์ ์์ง์ ๊ณผ ์ํ์ ์ผ๋ก ๋๋์ด์ ์๊ฐํด๋ณด์.
์์ง์ ์ ๊ฒฝ์ฐ,
์์ง์ ์ ๊ฒฝ์ฐ ์์๊ฐ์ด ray์ xdelta ๊ธธ์ด๋ง๋ค ํ ์ ์ฉ ๊ต์ฐจํ๋ ๊ฒ์ ์ ์ ์์ (Grid ๊ฐ๊ฒฉ์ 1.0)
ray์ ์๋ ๊ธธ์ด๊ฐ 1(ray.dir์ ๋จ์๋ฒกํฐ)์ด๋ผ๋ฉด ์ผ๊ฐํ๋น๋ก ์ฝ๊ฒ xdelta๋ฅผ ๊ตฌํ ์ ์๋ค.
์ํ์ ๋ ๋ง์ฐฌ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ ์ ์์.
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๊ต์ฐจ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์์ด.
์ด์ ํ์ํ ์ ๋ณด๋ ๋ค ์์์ผ๋ ์์๋ฅผ ๋ฐ์ ธ๊ฐ๋ฉฐ ์ดํด๋ณด์.
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์ ๋ฒฝ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๊ฒ๊น์ง ์ดํด๋ณด์๋๋ฐ, ์ด์ ๋จ์ ๊ฒ์ ์ด ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฒฝ์ ์์ง์ ์ ๊ทธ๋ ค์ฃผ๋ฉด ๋จ.
๊ทธ๋ฐ๋ฐ, ์ฌ๊ธฐ์ ํ๊ฐ์ง ์ฃผ์ํ ์ ์ ๊ต์ฐจ์ ๊ณผ ์นด๋ฉ๋ผ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ์จ๋ฒ๋ฆฌ๋ฉด ์ด์๋ ์ฆ์ ๊ฐ์ด ๋์ด๋ฒ๋ ค.
๋ฒฝ์ ๋ฐ๋ก ์ ๋ฉด์์ ๋ฐ๋ผ๋ณด์์ ๋ C,D,E๊ฐ ํ๋ฉด์ ํํํ๊ฒ ๋ณด์ด๊ธฐ๋ฅผ ๊ธฐ๋ํ์ง๋ง ray์ ๊ฑฐ๋ฆฌ๊ฐ C์ E๊ฐ D์ ๋นํด์ ๋ ๊ธธ๊ธฐ ๋๋ฌธ์
์์ ๊ฐ์ด ์๊ณก๋์ด ๋ณด์ฌ์ง.
์ด๊ฒ์ ํผํ๊ธฐ ์ํด ํ๋์ ๊ณผ ๊ฐ์ด ์นด๋ฉ๋ผ ์ ์ค์์ ๋ฐฉํฅ์ ๋ฐ๋ฅธ ray์ ๊ธธ์ด(๋ด์ ์ผ๋ก ๊ฐ๋จํ ๊ณ์ฐ ๊ฐ๋ฅ)๋ฅผ ๊ณ์ฐํ๋ฉด
์ด์๋ ์ฆ ํ์์ ํผํ ์ ์์.
์ด๊ฑธ๋ก ๋ฒฝ๊ทธ๋ฆฌ๊ธฐ ๊น์ง ๋.
์ง๊ธ๊น์ง ๋งต์ ๊ทธ๋ ธ๋ค๋ฉด ๋จ์ ๊ฒ์ ๋ฌผ์ฒด์ ํด๋นํ๋ ์คํ๋ผ์ดํธ ๊ทธ๋ฆฌ๊ธฐ.
์คํ๋ผ์ดํธ๋ ๋ฒฝ์ ๋ค ๊ทธ๋ฆฐ ํ ๊ทธ๋ฆฌ๊ฒ ๋๋๋ฐ ๋ฌธ์ ๋ ๋ฒฝ์ ๊ฐ๋ ค์ง ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ํ๋ฉด ๋ ๊น?
์คํ๋ผ์ดํธ๊ฐ ๋ฒฝ ๋ค์ ์๊ณ ๊ด์ฐฐ์์๊ฒ๋ ์ผ๋ถ๋ง ๋ณด์.
์ด์ ๊ฐ์ด ๋ฒฝ์ ๊ฐ๋ ค์ง ๋ถ๋ถ์ ๊ทธ๋ ค์ง์ง ์๊ฒ ํ๊ธฐ ์ํด์ ํ๋์ ๊น์ด๋ฒํผ์ ๊ฐ์ ๊ฒ์ 1์ฐจ์์ผ๋ก ๋ง๋ค์ด์ ์ฒ๋ฆฌํจ.
์คํ๋ผ์ดํธ๋ ๋ฒฝ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ง์ ๋ฐฉํฅ์ผ๋ก ์ชผ๊ฐ์ ํ๋์ฉ ๊ทธ๋ฆฌ๊ฒ ๋๋๋ฐ,
์ฐ๋ฆฌ๊ฐ ์์ ๊ณ์ฐํ CamFwd ๊ธฐ์ค ๊ฑฐ๋ฆฌ๋ฅผ 1์ฐจ์ ๊น์ด ๋ฒํผ์ ์ ์ฅํ๊ณ ์คํ๋ผ์ดํธ์ ๊ฑฐ๋ฆฌ๊ฐ ๊ทธ ๊น์ด๋ฒํผ๋ณด๋ค ์์ ๋๋ง ๊ทธ๋ฆฌ๊ฒ ํ๋ฉด ๋.
์ฌ๊ธฐ๊น์ง raycast์ ํต์ฌ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด๋ณด์์..
๋ํ ์ผํ ๋ด์ฉ๊ณผ ์ฝ๋๊ฐ ๊ถ๊ธํ๋ค๋ฉด ์๋ ์ฐธ๊ณ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋.
๊นํ๋ธ๋ ๋ค์ ธ๋ณด์๋ฉด ์ธํ์ํ์ธ3D ์์ค ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ผ๋ ๊ทธ๊ฒ๋ ํ๋ฒ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์.
๋ค์์ ๊ธฐํ๊ฐ ๋๋ฉด ๋ฌธ ๊ทธ๋ฆฌ๊ธฐ, ์จ๊ฒจ์ง ๋ฒฝ๊ทธ๋ฆฌ๊ธฐ ๋ฑ์ ๋ํด์๋ ์ ๋ฆฌํด๋ณผ๊ป.
๋ด์ฉ๋ค์ด ์ ์ ๋ณต์กํด์ง๋ ์ฐ๋ ๊ฒ๋ ์ผ์ด๊ตฌ๋ง. ๋๋๋ก ํ๋ฒ์ ๋๋ด๊ณ ์ถ์๋ฐ ๋ค์์๋ ์ชผ๊ฐ์ ์จ์ผํ๋ ๊ณ ๋ฏผ์ค.
์ฐธ๊ณ ์ฌ์ดํธ :
https://lodev.org/cgtutor/raycasting.html
์ค์ค ใท ใท ใท ใท ์ฅ๋์๋๋ค์
๊ฐ์ถ
๊ตณ
์น๊ตณ
๋ ๋๋ง ํ๋ ๋๋ค์ ์ง์ง ๊ณต๋ถ ์ด์ฌํ ํ๊ตฌ๋... ๋ฏธ์ณค๋ค ์ง์ง
์ญ๊ณ ์
์ด์ ๋๋ฉด ๋ง์ธํฌ๋ํํธ๋ ๋ง๋ค ์ ์๋ ์์ค ์๋๋ ธ
๋ง์ธํฌ๋ ๊ณ ์ธ๋ฌผ๋ค ํ๋ฃจ๋ฉด ๋ง๋ค๊ณ ๊ทธ๋ฌ๋๋ผ ใ ใ
๋ช ์ ํํํ๋๊ฒ ๊ฐ์ด๋ ต๊ฒ ๋ค