์์ :)
View, Projection Matrix · eazuooz/YamYamEngine@5746341
Show file tree Showing 23 changed files with 385 additions and 117 deletions.
github.com
3์ฐจ์ ๊ณต๊ฐ์ ์ค๊ณํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๊ตฌ๋ถ๋๋ค.
Z๊ฐ์ด ๋ชจ๋ํฐ ๋ค์ชฝ์ผ๋ก ์ฆ๊ฐํ๋ ์ผ์ ์ขํ๊ณ์ z๊ฐ์ด ๋ชจ๋ํฐ ์์ชฝ์ผ๋ก ์ฆ๊ฐํ๋ ์ค๋ฅธ์ ์ขํ๊ณ์ด๋ค.
ํ๋์ ๋ฌผ์ฒด๋ฅผ ํํํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๋ฉ์ ๋ฐ์ดํฐ๋ ์์ ๋ง์ ๊ณต๊ฐ์์ ๋ฌผ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ ์ ์ ์ ์์น์ ๋ณด๊ฐ ์ ์ฅ๋๋ค. ์ด๋ ๊ฒ ๋ฌผ์ฒด์ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํด ๋ถ์ฌํ ๊ณต๊ฐ์ ๋ก์ปฌ๊ณต๊ฐ์ด๋ผ๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ฒ์์ฝํ ์ธ ๋ ๋จ์ผ ๋ฌผ์ฒด๊ฐ ์๋ ๋ค์ํ ์ข ๋ฅ์ ๋ฌผ์ฒด๊ฐ ๋ชจ์ฌ ๋ฐฐ๊ฒฝ์ ์ด๋ฃจ๋ฏ๋ก, ์ฌ๋ฌ๊ฐ์ง ๋ฌผ์ฒด๋ฅผ ๋ชจ์ ๋ด์ ์ ์๋ ๋ณ๋์ ๊ณต๊ฐ์ด ์์ด์ผ ํ๋ค. ์ฌ๋ฌ ๋ฌผ์ฒด๋ฅผ ๋ชจ์ ๊ฒ์์ฝํ ์ธ ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ ๋๋ ์๋ก์ด ๊ณต๊ฐ์ ์๋ ๊ณต๊ฐ์ด๋ผ๊ณ ํ๋ค.
ํฌ๊ธฐ ๋ณํ ํ๋ ฌ
ํ์ ๋ณํ ํ๋ ฌ ( ์ค์ผ๋ฌ ๊ฐ )
์ด๋ ํ๋ ฌ
Directx ๋ ํ์ฐ์ ํ๋ ฌ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ํ๋ ฌ์ p1, p2, p3๊ฐ ์ข์ธกํ๋จ์ ์์นํ๋ค.
์นด๋ฉ๋ผ๊ณต๊ฐ
์๋์์์ ์ขํ๊ฐ ์ด๋ป๋ ์นด๋ฉ๋ผ ๊ด์ ์์ ๋ดค์ ๋ ์นด๋ฉ๋ผ๋ ์ธ์์ ์ขํ์ ๋ฐ๋๋ก ๋ฐ๋ผ๋ณด๋ ๋ชจ์ต์ด ๋ฉ๋๋ค.
๊ฒฐ๊ตญ ์๋ก ๋ฐ๋๋๋ ์ขํ๊ณ๋ก ์ธํด x์ y๊ฐ์ด ์์๊ณผ ๋ค๋ฅด๊ฒ ๋ฐ๋๋ก ๋ค์งํ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์๋ ์ขํ๊ณ๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ์นด๋ฉ๋ผ๋ฅผ 180๋ ํ์ ์์ผ์ +z์ถ์ด ์นด๋ฉ๋ผ ๋คํธ์ ํฅํ๊ฒ ํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ขํ๊ณ๋ก ๋ฌผ์ฒด๊ฐ ๋ํ๋ฉ๋๋ค.
์นด๋ฉ๋ผ์๋ ํฌ๊ธฐ์ ๊ฐ๋ ์ด ์๊ธฐ ๋๋ฌธ์, ์นด๋ฉ๋ผ์ ํธ๋์คํผ์ ํฌ๊ธฐ ๋ณํ์ ์ ์ธํ ํ์ ๊ณผ ์ด๋๋ณํ์ผ๋ก๋ง ๊ตฌ์ฑ ๋๋ค. ์นด๋ฉ๋ผ์ ํธ๋์คํผ์ ์ ์ฅ๋ ์์น ๊ฐ์ t(t1, t2, t3)๋ก ์ง์ ํ๊ณ ๋ก์ปฌ ์ถ ๊ฐ์ ๊ฐ๊ฐ x = (x1, x2, x3)
y = (y1, y2, y3), z = (z1, z2, z3)๋ก ์ง์ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด ์ด๋ํ๋ ฌ T์ ํ์ ํ๋ ฌ R์ ๋ค์๊ณผ ๊ฐ๋ค.
ํ์ ๋ณํ ์ญ์ ์ด๋ ๋ณํ๊ณผ ๋์ผํ๊ฒ ์ญํ๋ ฌ์ ์ ์ฉ์ํจ๋ค. ์๋ฅผ ๋ค์ด ๋ฌผ์ฒด๋ ๊ฐ๋งํ ์๋๋ฐ ์นด๋ฉ๋ผ๊ฐ 30๋ ํ์ ํ๋ ์ํฉ์ด๋ผ๋ฉด, ํ๋ฉด์ ๋ฐ๋ผ๋ณด๋ ์ฌ์ฉ์๋ ๋ง์น ๋ฌผ์ฒด๊ฐ -30๋ ํ์ ํ๋ ๊ฒ์ผ๋ก ๋๋ ๊ฒ์ด๋ค. ์ง๊ตํ๋ ฌ์ธ ํ์ ๋ณํํ๋ ฌ R์ ์ญํ๋ ฌ R-1์ ๋ค์๊ณผ ๊ฐ์ด ์ ์น ํ๋ ฌ๋ก ๊ตฌํ ์ ์๋ค.
์ด๋ํ๋ ฌ์ ์ญํ๋ ฌ๋ ๋ง์ ๊ตฌํด๋ณด์.
์ด ๋์ ๊ณฑํ ์ต์ข ๋ทฐ ๋ณํ ํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋์ ์ญํ๋ ฌ์ ๋จผ์ ์ ์ฉํ ์ง, ํ์ ์ ์ญํ๋ ฌ์ ๋จผ์ ์ ์ฉํ ์ง๋ฅผ ์ ํํด์ผ ํ๋ค. ์ ์ฉ ์์๋ฅผ ๊ณฐ๊ณฐํ ์๊ฐํด ๋ณธ๋ค๋ฉด ์ด๋์ ์ญํ๋ ฌ์ ์ ์ฉํ ํ์ ํ์ ์ ์ญํ๋ ฌ์ ์ ์ฉํด์ผ ํจ์ ์ ์ ์๋ค. ์๋ํ๋ฉด ์นด๋ฉ๋ผ์ ํ์ ์ ์ ์ฉํ ์์ ์ ๋ชจ๋ ์ขํ๋ ์นด๋ฉ๋ผ๋ฅผ ์ค์ฌ์ผ๋ก ๋ณํ๋์ด ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ํธ๋์คํผ ์์๋ฅผ ๊ฑฐ๊พธ๋ก ๋๋ฆฌ๋ ๊ฒ๊ณผ ๋์ผํ ์๋ฆฌ๋ก ๋ณผ์ ์๋ค.
์ ๋ฆฌํ๋ฉด ํฌ๊ธฐ๋ณํ S๋ฅผ ์ ์ธํ ์นด๋ฉ๋ผ์ ํธ๋์คํผ์ผ๋ก ๋ถํฐ ์ป์ด์ง๋ ๋ชจ๋ธ๋ง ํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ๋ค.
M = R * T
๋ชจ๋ธ๋ง ํ๋ ฌ์ ์ญํ๋ ฌ M(-1) ์ ๋ฐ๋ก ๋ทฐ ํ๋ ฌ์ด ๋๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ด ์ ๊ฐ๋๋ค.
M(-1) = ( T * R ) (-1) = R(-1) * T(-1)
์๊ทผ ํฌ์
์ฐ๋ฆฌ๊ฐ ์ฌ๋ ์ธ์์ 3์ฐจ์์ผ๋ก ์ด๋ค์ ธ ์๊ณ , ์ด๋ฅผ ๋ชจ๋ฐฉํ ๊ฐ์์ ๊ฒ์ ๊ณต๊ฐ๋ 3์ฐจ์์ ์ฒด๊ณ๋ก ๊ตฌ์ฑ๋๋ค. ๊ทธ๋ฐ๋ฐ 3์ฐจ์์ผ๋ก ๊ฐ์๊ณต๊ฐ์ ๊ตฌ์ฑํ๋๋ผ๋ ๋ชจ๋ํฐ ํ๋ฉด์ ๋ณด์ด๋ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ 2์ฐจ์ ํ๋ฉด์ด ๋ ์ ๋ฐ์ ์๋ค.
2์ฐจ์์ ํ๋ฉด์์ 3์ฐจ์ ๊ณต๊ฐ๊ฐ์ ๋๋ ์ ์๊ฒ ํ๋ ค๋ฉด ๊ณต๊ฐ์ ์ด๋ป๊ฒ ๋ณํํด์ผ ํ ๊น?
ํด๋ต์ ์ฐ๋ฆฌ ๋์ด ๋ณด๋ ์ธ์์ ๋ณด๋ ๋ฐฉ์์ผ๋ก ๊ณต๊ฐ์ ๋ณํํ๋ ๊ฒ์ด๋ค. ์ฐ๋ฆฌ ๋์ด ์ธ์์ ๋ณด๋ ๋ฐฉ์์ผ๋ก ๋ณํํ๋ ๋ฐฉ์์ ์๊ทผ ํฌ์ ๋ณํ์ด๋ผ๊ณ ํ๋ค.
์๊ทผ ํฌ์๋ณํ์ ์๋ฆฌ
์๊ทผ ๊ธฐ๋ฒ์ ๋ฅด๋ค์์ค ์๋์ ํ๊ฐ๋ค์ ์ํด ์ฐฝ์๋์๋ค. ๋น์ ๋ฅด๋ค์์ค ํ๊ฐ๋ค์ ๋์ ๋ณด์ด๋ ์์ ๊ทธ๋๋ก ํํญ์ ๋ด๊ธฐ ์ํด ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์์ ์ ํ ์ ์ ๊ณ ์ ์ํค๊ณ ๊ณ ์ ๋ ์ ์ผ๋ก๋ถํฐ ํํญ๊น์ง ๊ณง๊ฒ ๋ป์ ์ค์ ํ์ฉํด ๊ทธ๋ฆผ์ ๊ทธ๋ ธ๋ค. ์ด๋ฌํ ํ๋ฒ์ ํฌ์ ์๊ทผ๋ฒ ์ด๋ผ๊ณ ํ๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง๋ 3์ฐจ์ ๊ณต๊ฐ์ ํฌ์ ์๊ทผ๋ฒ์ ์๋ฆฌ๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ณต๊ฐ์ ๋ชจ๋ ์ ์ด ํ์ ์ ํฅํด ๋ชจ์ด๋ ํํ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค.
์๊ทผ ํฌ์์ด๋ ์ฐ๋ฆฌ๋์ด ๋ฐ๋ผ๋ณด๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ ๊ณต๊ฐ์ ๋ณํํ๋ ๊ฒ์ด๋ค. ๊ฐ์ ๊ณต๊ฐ์์ ๋์ ๋์ํ๋ ๋ฌผ์ฒด๋ ์นด๋ฉ๋ผ๋ค. ๊ทธ๋์ ์๊ทผ ํฌ์ ๋ณํ์ ์ค๊ณํ๊ธฐ ์ํด์๋ ๋์ ๋ณด์ด๋ ๋ฒ์๋ฅผ ์นด๋ฉ๋ผ์๋ ์ค์ ํด์ผ ํ๋๋ฐ ์ด๋ฅผ ํ๊ฐ(filed of view)๋ผ๊ณ ํ๋ค. ์นด๋ฉ๋ผ์ ํ๊ฐ์ ์ค์ ํ๋ฉด ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ข์ฐ์ ์์๋๊ฐ ๊ท ๋ฑํ ์ฌ๊ฐ๋ฟ ์์ญ์ด ๋ง๋ค์ด์ง๋ค.
์๊ทผ ํฌ์ ๋ณํ์ x, y, z์ถ์ด ๋ชจ๋ ์ง๊ตํ๋ ์ ์ก๋ฉด์ฒด ํํ๋ฅผ ๊ฐ์ง ๋ทฐ ๊ณต๊ฐ์ ์นด๋ฉ๋ผ์ ํ์ ์ผ๋ก ๋ชจ์ด๋ ์ฌ๊ฐ๋ฟ ํํ๋ฅผ ๊ฐ์ง ๊ณต๊ฐ์ผ๋ก ๋ณํํ๋ ์์ ์ด๋ผ๊ณ ํ ์ ์๋ค.
3์ฐจ์ ๊ณต๊ฐ์ ๋ณํํํ์๋ ๊ณต๊ฐ์ ๋ฌผ์ฒด๋ฅผ ํฌ์ํด 2์ฐจ์ ๋ชจ๋ํฐ ํ๋ฉด์ ๋ด์๋ด์ผ ํ๋ค. ์ด๋ฅผ ์ํด์ ๋ชจ๋ ๋ฌผ์ฒด์ ์์ด ๋งบํ๋ ๊ฐ์์ ํ๋ฉด์ ์์ฑํด์ผ ํ๋๋ฐ ์ด๋ฅผ ํฌ์ ํ๋ฉด์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํฌ์ ํ๋ฉด์ ๊ฐ๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์๋์ฐจ๊ฐ Image์ ๊ทธ๋ ค์ง ํ๋ฉด์ ์ด์ผ๊ธฐํ๋ค.
ํฌ์ ํ๋ฉด์ ์์ฐจ๊ฐ ์นด๋ฉ๋ผ์ ๋ฉ์ด์ง์๋ก ํฌ์ ํ๋ฉด์ ๋ ์ปค์ง๋ค. ํฌ์ํ๋ฉด์ ์์น๋ฅผ ์ง์ ํ๊ธฐ ์ํด ์ค์ ํ ์นด๋ฉ๋ผ๋ก๋ถํฐ ํฌ์ ํ๋ฉด๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ ๊ฑฐ๋ฆฌ Forcal length๋ผ๊ณ ํ๋ค.
ํ๊ฐ์
์๊ทผ ํฌ์์ ๊ตฌํํ๊ธฐ ์ํด์๋ ์ฐ์ ํฌ์ ํ๋ฉด์ ์์น๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ํฌ์ ํ๋ฉด์ ์์น๋ ๊ณ์ฐ์ ํธ์๋ฅผ ์ํด ์์๋ ํฌ๊ธฐ๊ฐ 1์ด ๋๋ ์ง์ ์ผ๋ก ๊ฒฐ์ ํ๋ค. ์ข์ฐ ์ํ์ ํ๊ฐ์ด ๋์ผํ๋ฏ๋ก ํฌ์ํ๋ฉด
์ [-1, 1]์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ ์ ์ฌ๊ฐํ ๋ชจ์ต์ ๋๋ค.
2์ฐจ์ ํฌ์ํ๋ฉด์ ์ขํ์์คํ ์ NDC(normailized device coordinate)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ํฌ์ ํ๋ฉด์ ๋์ ํ๋ NDC๊ฐ ์ผ์ ํ ๊ฐ์ ๊ฐ์ ธ์ผ ํ๋ค๋ฉด, ์นด๋ฉ๋ผ์ ์ค์ ๋ ํ๊ฐ์ด ๋ณํ ๋ ์ด์ ๊ฑฐ๋ฆฌ๋ ๋ฌ๋ผ์ง ์ ๋ฐ์ ์๋ค. ํ๊ฐ์ด ์ปค์ง์๋ก ์ด์ ๊ฑฐ๋ฆฌ๋ ๊ฐ๊น์์ง๊ณ ํ๊ฐ์ด ์์์ง์๋ก ์ด์ ๊ฑฐ๋ฆฌ๋ ๋ฉ์ด์ง๋ค. ํ๊ฐ๊ณผ ์ด์ ๊ฑฐ๋ฆฌ์ ๊ด๊ณ๋ tanํจ์๋ก ์ค์ ๋๋ค.
Tanํจ์๋ก ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค๋ฉด, ๋ทฐ ๊ณต๊ฐ์ ์ ์ ํฌ์ ํ๋ฉด ์์ ์ ์ผ๋ก ๋์์ํค๋ ์๊ทผ ํฌ์ ๋ณํ์ ์ค๊ณํด์ผ ํ๋ค. ์ด ์ญ์ ํ๋ ฌ๋ก ์ค๊ณํ ์ ์๋ค๋ฉด ํ๋ ฌ๊ณฑ์ ์ฅ์ ์ ํ์ฉํด ๋ก์ปฌ ๊ณต๊ฐ์ ์ ์ ํฌ์ ํ๋ฉด์ ์ ์ผ๋ก ํ๋ฒ์ ๋ณํํด์ฃผ๋ ํ์ดํ๋ผ์ธ์ ๋ง๋ค์ ์๋ค.
์๊ทผ ํฌ์ ํ๋ ฌ์ ์ค๊ณํ๊ธฐ ์ํด ์นด๋ฉ๋ผ๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ณต๊ฐ์ ์ด๋ค ์ฑ์ง์ ๊ฐ์ง๊ณ ์๋์ง ์์๋ณด์. ์ง๊ธ๊น์ง ์งํํ ๊ณต๊ฐ๋ณํ์ ๋ชจ๋ ์ ์ก๋ฉด์ฒด ํํ์ 3์ฐจ์ ๊ณต๊ฐ์ด์๋ค. ์ด๋ ๊ฒ ์ธ์ถ์ด ์ง๊ตํ๋ ๊ณต๊ฐ์ ์ ํด๋ฆฌ๋ ๊ณต๊ฐ์ด๋ผ๊ณ ํ๋ค. ๋ก์ปฌ, ์๋, ์นด๋ฉ๋ผ ๊ณต๊ฐ์ด ๋ชจ๋ ์ ํด๋ฆฌ๋ ๊ณต๊ฐ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ ์ก๋ฉด์ฒด ํํ์ ์ ํด๋ฆฌ๋ ๊ณต๊ฐ์ ์๊ทผ ํฌ์ ๋ณํ์ ์ํด ์ฌ๊ฐ๋ฟ ํํ๋ก ๋ฐ๋๊ฒ ๋์๋ค. ์ด๋ฅผ ์ฌ์๊ณต๊ฐ Project Space๋ผ๊ณ ํ๋ค.
์ฌ์๊ณต๊ฐ์ x, y ์ถ์ ์ฌ์ ํ ์ง๊ตํํ๋ฅผ ๋๊ณ ์๋ค. ํ์ง๋ง z์ถ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ๋ํ์ง ์๊ณ x์ถ๊ณผ y์ถ์ ๋ชจ๋์ํฅ์ ์ค๋ค. ์ด๋ ์ด์ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ x์ถ๊ณผ y์ถ์ด ๋ง๋ค์ด๋ด๋ ํฌ์ํ๋ฉด์ ๋ฉด์ ์ด ๋ฌ๋ผ์ง๋ ์ด์ ์ด๊ธฐ๋ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์๊ทผ ํฌ์ ๋ณํ์ ๋์ํ๋ ํ๋ ฌ์ ์ด๋ป๊ฒ ์ค๊ณํด์ผ ํ ๊น? ์ ํด๋ฆฌ๋ ๊ณต๊ฐ์ด ์ฌ์๊ณต๊ฐ์ผ๋ก ๋ณํ๋๋ฉด์ x, y, z์ถ์ด ๋ชจ๋ ์ง๊ตํ๋ ์ฒด๊ณ๊ฐ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์๊ทผ ํฌ์ ๋ณํ์ ๋์ํ๋ ํ๋ ฌ์ ์ง๊ธ๊น์ง ์ฌ์ฉํ ํ์ค ๊ธฐ์ ๋ฒกํฐ์ ๋ณํ๋ฅผ ๊ด์ฐฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ์์ฑํ ์ ์๋ค. ์ด๋ฅผ ์ํด์ ์ฌ์ ๊ณต๊ฐ์ด ์ง๋๋ ํน์ง์ ํ์ ํด ํ๋ ฌ์ ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ํผ์ฆ ๋ค๋ฃจ๋ฏ์ด ํ๋์ฉ ํ์ด๊ฐ์ผ ํ๋ค. ๋ฌธ์ ๋ฅผ ๋จ์ํ ์ํค๊ธฐ ์ํด x์ถ์ ๋ฐฐ์ ํ y์ถ๊ณผ z์ถ์ผ๋ก ๊ณต๊ฐ์ ์ค์ ํ๊ณ ํฌ์ ํ๋ฉด์ ์์ ๋งบํ๋ ๊ณผ์ ์ ์๊ฐํด๋ณด์. ๋ทฐ ๊ณต๊ฐ์ ์ p๊ฐ ํ๋ฉด์ ํฌ์๋ p(ndc)๋ผ๊ณ ํ ๋ ํฌ์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
P(view) = ( 0, y, z)
p(ndc) = (0, y)
๋ ์ผ๊ฐํ์ ๋ฎ์ ๊ผด ์ฑ์ง๋ก๋ถํฐ ๋ค์์ ๋น๊ฐ ์ฑ๋ฆฝ๋๋ค.
์ ๋น๋ก์์ผ๋ก ๋ถํฐ ๋ค์์ ์์ด ์ฑ๋ฆฝ๋๋ค.
X์ถ๊ณผ y์ถ์ ๊ฐ์ ์์ผ๊ฐ์ ๊ฐ์ง๊ณ ์๋ก ์ง๊ตํ๋ฏ๋ก x์ถ๋ ๋์ผํ๊ฒ ๊ตฌํ์ด ๋๋ค.
ํฌ์๋ ์ต์ข ์ขํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด์ ๊ฐ์ด NDC ์ขํ๋ฅผ ๊ณ์ฐํ๋ค๋ฉด ๋ชจ๋ํฐ์ ์ต์ข ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์์ ์ด ๋จ์๋ค. ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด NDC ์ขํ๋ฅผ ํ๋ฉด ํด์๋๋งํผ ๊ฐ๋ก์ ์ธ๋ก๋ฅผ ๋๋ ค์ฃผ๋ฉด ์ต์ข ์คํฌ๋ฆฐ ์ขํ๊ฐ ์์ฑ๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ๋ก์ ์ธ๋ก๋ฅผ ๋๋ฆฌ๋ฉด ๋ฌผ์ฒด๊ฐ ์ฐ๊ทธ๋ฌ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ต์ข ํ๋ฉด์ด 1:1 ๋น์จ์ด ์๋ ๊ฐ๋ก๊ฐ ๋ ๊ธด ๋น์จ์ ์ฌ์ฉํ๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ข ํก๋น(๊ฐ๋ก ์ธ๋ก์ ๋น์จ)๋ฅผ ๋ฏธ๋ฆฌ ํ์ ํด, NDC ์์ญ์์ ๋ฏธ๋ฆฌ ์ฐ๊ทธ๋ฌํธ๋ฆฐ ํ์ ํผ์น๋ ๊ฒ์ด๋ค. NDC์ ์์ ํฌ์ํ ๋ ์ข ํก๋น๋ฅผ ๊ฑฐ๊พธ๋ก ๋ค์ง์ ๋น์จ์ ์ ์ฉํด ๋จผ์ ์ฐ๊ทธ๋ฌํธ๋ ค๋ณด์.
์ข ํก๋น
์ด์ NDC์ ํฌ์ ๊ฒฐ๊ณผ๋ฅผ ์ฐ๊ทธ๋ คํธ๋ ค๋ณด์. ์ข์ฐ๋ก ์ฐ๊ทธ๋ฌํธ๋ฆฌ๋ ค๋ฉด x์ถ ๊ฐ์ ๋ณ๊ฒฝํด์ผ ํ๋๋ฐ, ์ด๋ ์ข ํก๋น์ ์ญ์ a/1์ ๊ณฑํ๋ฉด ๋๋ค. ๋ฐ๋ผ์ NDC ์ขํ๋ฅผ p(ndc)๋ฅผ ๊ณ์ฐํ๋ ๊ณต์์ ๋ค์๊ณผ ๊ฐ์ด ์์ ๋๋ค.
๋ฐ๋ผ์ ์ต์ข NDC๊ฐ์ ๊ณ์ฐํ๋ ์๊ทผ ํฌ์ํ๋ ฌ P๋ ๋ค์๊ณผ ๊ฐ์ด ์ค๊ณ ํ ์ ์๋ค.
์ฌ๊ธฐ์ ํ๊ฐ์ง ์ง๊ณ ๋์ด๊ฐ์ผ ํ ๋ฌธ์ ๊ฐ ์๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์๊ทผ ํฌ์ํ๋ ฌ์ ์ฌ์ฉํ๋ค๊ณ ํ ๋, ๋ณํํ ์ ์ z๊ฐ์ด ํ๋ ฌ์ ์ฌ์ฉ๋๋ค ๋ณด๋ ๋ณํํ ์ ๋ง๋ค ํญ์ ํ๋ ฌ์ ์๋กญ๊ฒ ์์ฑํด์ผ ํ๋ค๋ ์ ์ด๋ค.
ํ๋ ฌ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋ชจ๋ ๋ณํ์ ํ๋ ฌ์ ๋ฏธ๋ฆฌ ๊ณฑํด๋ ํ๋ ฌ์ ์ ์ํจ์ผ๋ก์จ ๋ฐ๋ณต๋๋ ์ฐ์ฐ๋์ ์ค์ด๋ ๋ฐ ์์๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์๊ทผ ํฌ์ ํ๋ ฌ์ ๋ณํํ ์ ์ ๊ฐ์ด ์ฌ์ฉ ๋๋ฉด ํ๋ ฌ์ ์ฌ์ฉํ๋ ์ฅ์ ์ด ์ฌ๋ผ์ง๊ณ ๋ง๋ค.
๋ฐ๋ผ์ ์๊ทผ ํฌ์ ํ๋ ฌ์ ๊ตฌ์ฑ ํ ๋ ์ ์ ๊ฐ์ ์ฌ์ฉํ์ง ์๊ณ ์นด๋ฉ๋ผ ์ค์ ๋ง์ผ๋ก ํ๋ ฌ์ ๋ง๋ค ์ ์์ด์ผ ํ๋ค.
์ฐ๋ฆฌ๊ฐ ์ ๋ํ๋ ํฌ์ํ๋ ฌ์ ์ดํด๋ณด๋ฉด, ํ๋ ฌ์ ๊ตฌ์ฑ์์๋ ๋ชจ๋ -v(z)๊ฐ์ ๋ถ๋ชจ๋ก ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ํ๋ ฌ์์ -v(z)๊ฐ์ ์ ๊ฑฐํ๊ณ ๋์ ํ๋ ฌ์ ๊ฒฐ๊ณผ๊ฐ์์ -v(z)๊ฐ์ ๋๋์ด์ฃผ๋ฉด ์ด๋จ๊น?
NDC ๊ฐ์ ๋ง๋ค์ด๋ด๋ ๊ณผ์ ์ ๋๋จ๊ณ๋ก ๋ถ๋ฆฌํด๋ณด์. ์ฒซ๋ฒ์งธ๋ก ์์์ค๊ณํ ์๊ทผ ํฌ์ ํ๋ ฌ P๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ๊ณ ํ๋ ฌ์ ๊ณฑํ๋ ๋ฒกํฐ์ ๊ฐ์ v๋ก ์ง์ ํ์ ๋ฒกํฐ v๋ ๋ทฐ์ขํ๊ณ์ ๋์ผํ ๊ฐ์ ๊ฐ์ง๋ค.
์ด ํ๋ ฌ ๊ณฑ์์ ์์ฑ๋ ๋ฒกํฐ๋ ์ฐ๋ฆฌ๊ฐ ์ป์ด์ผ ํ NDC ์ขํ์๋ ๋ค๋ฅด์ง๋ง ์๊ทผ ํฌ์ ํ๋ ฌ P์ ๊ณผ ๋ฌด๊ดํ๊ฒ ์นด๋ฉ๋ผ ์ค์ ๊ฐ์ผ๋ก๋ง ๊ตฌ์ฑ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ชจ๋ ์ ์ ๋ํด์ ๋ณดํธ์ ์ผ๋ก ์ค๊ณ๋ ์๊ทผ ํฌ์ ํ๋ ฌ P๋ฅผ ์ฌ์ฉ ํ ์ ์์ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์๊ทผ ํฌ์ ํ๋ ฌ P๋ก ๋ณํ๋๋ ์ขํ๊ณ๋ฅผ ํด๋ฆฝ ์ขํ๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ํด๋ฆฝ์ขํ์ ์ ์ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐ๋๋ค.
๋๋ฒ์งธ๋ก๋ ํด๋ฆฝ์ขํ์ ์ P์ ๊ฐ์์๋ฅผ p์ ์ธ๋ฒ์จฐ ๊ฐ์ธ -v(z)๊ฐ์ผ๋ก ๋๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ์ํ๋ NDC ์ ์ขํ๋ฅผ ์ป์ ์ ์๋ค.
๋์ฐจ ์ขํ๊ณ
NDC๋ 2์ฐจ์ ํ๋ฉด์ ์ขํ์ง๋ง ๋ชจ๋ ์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์๊ทผ ํฌ์ํ๋ ฌ์ ์ฌ์ฉํ๋๋ก ๊ณ์ฐ ๊ณผ์ ์ ๋ ๋จ๊ณ๋ก ๊ตฌ๋ถํ๊ณ ์ฌ์ฉํ๋ ๋ฒกํฐ์ ๊ฐ๋ ํ์ฐจ์ ๋ํ๋ค. ์ด๋ ๊ฒ ํ ์ฐจ์ ๋์ธ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฒ์์ ์์์๋ ๋ณดํต ๋์ฐจ ์ขํ๊ณ๋ผ๊ณ ํ๋ค. ๋์ฐจ ์ขํ๊ณ์ ๋์ฐจ๋ ๋ชจ๋ ํญ์ ์ฐจ์๊ฐ ๊ฐ์์ ์๋ฏธํ๋ ์ํ ์ฉ์ด๋ค.
์์์ ์๊ทผ ํฌ์์ ์ํด ํ๋์ ์ ์ผ๋ก ๋ชจ์ด๋ ์ฌ๊ฐ๋ฟ์ ๊ณต๊ฐ์ ์ฌ์ ๊ณต๊ฐ์ด๋ผ ๋ถ๋ ธ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฌ์ ๊ณต๊ฐ๊ณผ ๋์ฐจ์ขํ๊ณ๋ ์ด๋ค ์ฐ๊ด์ด ์๋์ง ์์๋ณด์.
์ฌ์ฉ ๊ณต๊ฐ์์ ์ ์ด ํํ์ด๋ ํ ๋ ํฌ์๋ ์ ์ ๋ณํ
NDC ์ขํ๊ฐ์ ์ฌ์ ๊ณต๊ฐ์ ๋ง์ง๋ง ์ฐจ์ ๊ฐ z์ ๋ฐ๋น๋ก๋ก ์ํฅ์ ๋ฐ์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ ๊ฒ์ด๋ค.
NDC๊ณต๊ฐ์ ์ง์ ์ด ์ค์ ์ฌ์ ๊ณต๊ฐ์ ์ ๋ค์ด ํฌ์๋์ด ๋ง๋ค์ด ์ก๋ค๊ณ ์๊ฐํด๋ณด์.
๊ทธ๋ ๋ค๋ฉด ์ง์ ์ ๋ฐฉ์ ์์ ์ฌ์ ๊ณต๊ฐ์ ์ขํ๋ก ํํํด๋ณด์.
์ด ์์ ์๋ฉด์ z'๋ฅผ ๊ณฑํ๋ฉด ์์๊ฐ ์ฌ๋ผ์ง๊ณ ์ธ ๋ฏธ์ง์์ ์ฐจ์๊ฐ ๋ชจ๋ 1์ฐจ์์ผ๋ก ๋์ผํ ์์์ด ๊ตฌ์ฑ๋๋ค.
์ด๋ ๊ฒ ๋ฏธ์ง์์ ๋ํ ์ง์๊ฐ ๋ชจ๋ ๋์ผํ ๋ฐฉ์ ์์ ๋์ฐจ๋ฐฉ์ ์์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ด๋ฐ ์ด์ ๋ก ์ฌ์ ๊ณต๊ฐ์ด ์ฌ์ฉํ๋ ์ขํ๊ณ๋ฅผ ๋์ดค ์ขํ๊ณ๋ผ๊ณ ํ๋ค.
์๊ทผ ํฌ์ํ๋ ฌ์ ์ค๊ณํ๊ธฐ ์ํด ๊ณ์ฐ ๊ณผ์ ์ ๋ ๋จ๊ณ๋ก ๋๋ ์งํํ๋๋ฐ, ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ก ๊ตฌํ ์ขํ๋ฅผ ํด๋ฆฝ์ขํ๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์ด๋ ํฌ์ ๋๊ธฐ ์ ์ ์ฌ์ ๊ณต๊ฐ์ ์ขํ๋ฅผ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ ์๊ทผ ํฌ์ ๋ณํ์์ ๋ฑ์ฅํ ์ฌ์ ๊ณต๊ฐ, ํด๋ฆฝ๊ณต๊ฐ, ๋์ฐจ๊ณต๊ฐ์ ๋ชจ๋ ๋์ผํ ๊ณต๊ฐ์ ๊ฐ๋ฆฌํค๊ณ , ํด๋ฆฝ์ขํ, ๋์ฐจ์ขํ, ์ญ์ ๋์ผํ ์ขํ๊ณ๋ฅผ ๊ฐ๋ฅดํจ๋ค.
์ฌ์๊ณต๊ฐ์ ์ ์ด ์นด๋ฉ๋ผ๋ถํฐ ๋ฉ์ด์ง์๋ก ํฌ์๋ NDC ์ขํฏ๊ฐ์ ์์ (0, 0)์ ๊ฐ๊น์์ง๋ค. NDC์ ์์ ์ ํํ์ ํฌ์ ์๊ทผ ๊ธฐ๋ฒ์์ ์ด์ผ๊ธฐํ๋ ์์ค์ ์ ํด๋นํ๋ค.
๊น์ด ๊ฐ
3์ฐจ์ ๊ณต๊ฐ์์ ๋ค์์ ๋ฌผ์ฒด๋ฅผ ๊ทธ๋ฆด ๋ ๊ทธ๋ฆฌ๋ ์์๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ ๊ทธ๋ฆฌ๋ฉด ์ด๋ค๋ฌผ์ฒด๊ฐ ์์์๋์ง ๋ค์์๋์ง ๋์ผ๋ก ํ์ธํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์, ๋ฌผ์ฒด๊ฐ ์นด๋ฉ๋ผ๋ก๋ถํฐ ์ผ๋ง๋ ๋จ์ด์ ธ ์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ๋กํด ์์ ์๋ ๋ฌผ์ฒด๋ฅผ ๋์ค์ ๊ทธ๋ฆฌ๋๋ก ์ค์ ํ๋ ๊ฒ์ด๋ค.
NDC๊ณต๊ฐ์ 3์ฐจ์์ผ๋ก ํ์ฅํด๋ณด์.
์ฐ๋ฆฌ๊ฐ ์นด๋ฉ๋ผ์ ๋ถ์ฌํ ์์ผ๊ฐ์ ๊น์ด์ ๋ฌด๊ดํ๊ธฐ ๋๋ฌธ์ ์นด๋ฉ๋ผ์ ์ถ๊ฐ ์์ฑ์ ๋ถ์ฌํด์ผ ํ๋ค. ์ด๋ฅผ ๊ฐ๊ฐ ๊ทผํ๋ฉด(near plane) ๊ณผ ์ํ๋ฉด (far plane)์ด๋ผ๊ณ ํ๋ค.
์นด๋ฉ๋ผ ์์ผ๋ฅผ ๊ตฌ์ฑํ๋ ์ฌ์๊ณต๊ฐ์ ๊ทผํ๋ฉด๊ณผ ์ํ๋ฉด์ผ๋ก ์๋ผ์ฃผ๋ฉด ์ฌ๊ฐ๋ฟ์์ ๋พฐ์กฑํ ๋ถ๋ถ์ด ์๋ฆฐ ํํ๊ฐ ๋์ค๋๋ฐ ์ด๋ฅผ ์ ๋์ฒด๋ผ๊ณ ํ๋ค.
NDC๊น์ด๊ฐ์ ๋ฉ์ด์ง์๋ก ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ 3์ฐจ์ NDC๊ณต๊ฐ์ ์ผ์์ขํ๊ณ๋ฅผ ํ์ฑํ๋ค.
directX์์๋ 0 ~ 1์ ์ฌ์ฉํ๋ค.
๊ธฐ์กด ์๊ทผ ํฌ์ ํ๋ ฌ์ ๋ค๋ฅธ ํ๋ ฌ๊ณผ ์ ๊ณฑ์ ์ํด 3x3 ํฌ๊ธฐ์ ํ๋ ฌ์ ์ธ์์ ์ผ๋ก 4x4 ํฌ๊ธฐ๋ก ๋๋ ธ๋๋ฐ, ์ด์ ๋ ๊น์ด ๊ฐ์ ๊ณ์ฐํ ์ ์๋๋ก ๋ชจ๋ ํ๋ ฌ์ ์์ฐจ๊ฒ ํ์ฉํ ์ ์๊ฒ ๋์๋ค.
๊ธฐ์กดํ๋ ฌ์์ ์ธ๋ชจ ์๋ ํ ํ์ ์ฌ์ฉํด ๊น์ด ๊ฐ ๊น์ง ๊ตฌํ ์ ์๋ ์ต์ข ํ๋ ฌ์ ๊ตฌํด๋ณด์
๊น์ด๊ฐ์ ์ฌ์ฉํ๋ 3ํ์ ๋ค ๊ฐ์ ๋ฏธ์ง์ I,j,k,l๋ก ์ง์ ํ๋ค. ๊น์ด ๊ฐ์ ๋ทฐ ์ขํ๊ณ์ x์ถ๊ณผ y์ถ์ ๊ฐ๊ฐ ์ง๊ต ํ๋ฏ๋ก ์ํฅ์ ๋ฐ์ง ์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์์ ๋ ์์ i์ j๊ฐ์ 0์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
๋๊ฐ์ ๋ฏธ์ง์ k,l ์ด ๋จ๋๋ฐ, ์ด๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ ๋๊ฐ์ ์ํ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค.
๋ ๋ฏธ์ง์๋ฅผ ์ป๊ธฐ ์ํด ์นด๋ฉ๋ผ์ ์ค์ ๋ ๊ทผํ๋ง๊ณผ ์ํ๋ฉด์ ๊ฐ์ ์ฌ์ฉํด๋ณด์. ์นด๋ฉ๋ก๋ถํฐ ๊ทผํ๋ฉด๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ n, ์ํ๋ฉด๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ f๋ก ์ค์ ํ์.
์นด๋ฉ๋ผ ์ขํ ์ค์ฌ์ผ๋ก๋ถํฐ ์์ ๋ฐฉํฅ์ผ๋ก n๋งํผ ์ด๋ํ ๊ทผํ๋ฉด ์์ ์์นํ ์ ์ ์๊ฐํด๋ณด์. ๋ทฐ ๊ณต๊ฐ์์ ์นด๋ฉ๋ผ ์์ ๋ฐฉํฅ์ -z์ถ์ด๋ฏ๋ก ๋ทฐ ๊ณต๊ฐ์์ ์ด ์ ์ ์ขํ๋ (0, 0, -n, 1)์ด ๋๋ค. ์ด๋ ๊น์ด๊ฐ์ ์์ ์ง์ ์ด๊ธฐ ๋๋ฌธ์ NDC์ขํ (0, 0, -1)์ ๋์ํ๋ค. ๋์ผํ๊ฒ ๋ทฐ ๊ณต๊ฐ์ ์ํ๋ช ์ฐ์ ์ขํ๋ ๋์ํ๋ค.
์๊ทผ ํฌ์ ํ๋ ฌ์ ๋ทฐ ๊ณต๊ฐ์ ์ ์ ๊ณฑํ ๊ฒฐ๊ณผ๋ ํด๋ฆฝ์ขํ๊ฐ ๋๋ค. ๊ทผ ํ๋ฉด์ ์ ์ p1, ์ํ๋ฉด์ ์ ์ p2๋ผ๊ณ ํ ๋ ์ด๋ค์ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐ๋๋ค.
์์ง ์๊ทผ ํฌ์ ํ๋ ฌ k์ l์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ํด๋ฆฝ์ขํ์ ์ธ๋ฒ์งธ ์์๋ฅผ ๊ณ์ฐ ํ ์ ์๋ค. ํ์ง๋ง ํด๋ฆฝ์ขํ์ ๋ค๋ฒ์งธ ์์๋ก ๋ชจ๋ ์์๋ฅผ ๋๋ ๊ฐ์ NDC์ขํ๋ฅผ ๊ฐ๋ฆฌํค๊ณ , NDC์ขํ์ z๊ฐ์ ๊ฐ๊ฐ -1, 1์์ ์๊ณ ์๋ค.
๋ฐ๋ผ์ ๊ทผํ๋ฉด์ ํด๋ฆฝ์ขํ๋ (0, 0, -n, n)์ด ๋๊ณ , ์ํ๋ฉด์ ํด๋ฆฝ์ขํ๋ (0, 0, f, f)์ด ๋์ด์ผ ํ๋ค.
๋ฐ๋ผ์ ๋ค์ ์์ ์ป์ ์ ์๋ค.
์ด๋ก ๋ถํฐ ๋ค์๊ณผ ๊ฐ์ ์ฐ๋ฆฝ๋ฐฉ์ ์์ ๊ตฌํ ์ ์๋ค.
-kn + l = -n
-kf + l = f
๊ฐ๊ฐ์ ํ๋ฉด ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
์ด๋ฅผ ์ ์ฉํ๋ฉด ๋ค์๊ณผ๊ฐ์ ์ต์ข ํฌ์ ํ๋ ฌ์ ๊ตฌํ ์ ์๋ค.
'๐ Development Study > ๐ผ GameProgramming 2D' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณ์ธต ๊ตฌ์กฐ (0) | 2023.02.07 |
---|---|
๋ ๊ฐ ์ด์์ ์นด๋ฉ๋ผ ์ฌ์ฉ (0) | 2023.02.06 |
Material ๋ฉํ ๋ฆฌ์ผ (0) | 2023.01.02 |
Sampler ์ํ๋ฌ (0) | 2023.01.02 |
Texture ์์ฑ (0) | 2022.12.26 |
๋๊ธ