โ NDC
OpenGL์ ๊ฐ ์ ์ ์
ฐ์ด๋ ์คํ ํ ๋ชจ๋ ์ ์ ์ด ์ ๊ทํ๋ ์ขํ๊ณ(NDC, Normalized Device Coordinate)์ ์์ด์ผ ํ๋ค๊ณ ์๊ตฌํ๋ค. ์ฆ, ๊ฐ ์ ์ ์ x, y, z ์ขํ๋ -1.0์์ 1.0 ์ฌ์ด์ ์์ด์ผ ํ๋ฉฐ, ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ขํ๋ ๋ณด์ด์ง ์๊ฒ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์ขํ๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ค์ ํ ๋ฒ์(๋๋ ๊ณต๊ฐ)์์ ์ง์ ํ๊ณ , ์ด ์ขํ๋ฅผ ์ ์ ์
ฐ์ด๋์์ ์ ๊ทํ๋ ์ขํ๊ณ๋ก ๋ณํํ๋ค. ๊ทธ๋ฐ ๋ค์ ์ด NDC๋ฅผ '๋์คํฐ๋ผ์ด์ '์ ์ ๋ฌํ์ฌ ํ๋ฉด์์ 2D ์ขํ/ํฝ์
๋ก ๋ณํํ๋ค.
โ ๋ณํ ๊ณผ์
์ขํ๋ฅผ ํ๋์ ๊ณต๊ฐ์์ ๋ค์ ์ขํ ๊ณต๊ฐ์ผ๋ก ๋ณํํ๊ธฐ ์ํด, ์ฐ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ณํ ํ๋ ฌ์ ์ฌ์ฉํ๋ค. ๊ทธ์ค ๊ฐ์ฅ ์ค์ํ ํ๋ ฌ์ Model ํ๋ ฌ, View ํ๋ ฌ, Projection ํ๋ ฌ์ด๋ค. ์ ์ ์ขํ๋ ๋จผ์ Local Space์์ Local Coordinates๋ก ์์ํ์ฌ ์ดํ World Coordinates, View Coordinates, Clip Coordinates๋ฅผ ๊ฑฐ์ณ ์ต์ข
์ ์ผ๋ก Screen Coordinates๋ก ๋ณํ๋๋ค.

1. Local Coordinates(๋ก์ปฌ ์ขํ)๋ ๊ฐ์ฒด์ ๋ก์ปฌ ์์ ์ ๋ํ ์ขํ์ด๋ค. (๊ฐ์ฒด๊ฐ ์์ํ๋ ์ขํ)
2. ๋ค์ ๋จ๊ณ๋ Local Coordinates๋ฅผ World-Space Coordinates๋ก ๋ณํํ๋ ๊ฒ์ด๋ค. ์ด๋ ๋ ํฐ World์ ๋ํ ์ขํ๋ก, World์ ๊ธ๋ก๋ฒ ์์ ์ ๊ธฐ์ค์ผ๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ค๊ณผ ํจ๊ป ๋ฐฐ์น๋๋ค.
3. ๋ค์์ผ๋ก World Coordinates๋ฅผ View-Space Coordinates๋ก ๋ณํํ์ฌ, ๊ฐ ์ขํ๋ฅผ ์นด๋ฉ๋ผ ๋๋ ๊ด์ฐฐ์์ ์์ ์์ ๋ณธ ๊ฒ์ฒ๋ผ ๋ง๋ ๋ค.
4. View Space์์ ์ขํ๋ฅผ Clip Coordinates๋ก ํฌ์ํ๋ค. Clip Coordinates๋ -1.0์์ 1.0์ ๋ฒ์๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ์ด๋ค ์ ์ ์ด ํ๋ฉด์ ๋ํ๋ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค. Perspective Projection(์๊ทผ ํฌ์)์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Clip-Space Coordinates๋ก์ ํฌ์์ ์๊ทผ๊ฐ์ ์ถ๊ฐํ ์ ์๋ค.
5. ๋ง์ง๋ง์ผ๋ก Clip Coordinates๋ฅผ Screen Coordinates๋ก ๋ณํํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ์ด ๊ณผ์ ์ Viewport(๋ทฐํฌํธ) ๋ณํ์ด๋ผ๊ณ ํ๋ฉฐ, ์ขํ๋ฅผ -1.0๊ณผ 1.0์์ glViewport์ ์ํด ์ ์๋ ์ขํ ๋ฒ์๋ก ๋ณํํ๋ค. ๋ณํ๋ ์ขํ๋ ๋์คํฐ๋ผ์ด์ ๋ก ๋ณด๋ด์ ธ ํ๋๊ทธ๋จผํธ๋ก ๋ณํ๋๋ค.
โ Coordinate System (์ขํ๊ณ)
์ขํ๋ฅผ NDC๋ก ๋ณํํ๋ ๊ฒ์ ๋ณดํต ๋จ๊ณ๋ณ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ๊ฐ์ฒด์ ์ ์ ์ ์ฌ๋ฌ ์ขํ๊ณ๋ก ๋ณํํ ํ ์ต์ข
์ ์ผ๋ก NDC๋ก ๋ณํํ๋ค. ์ฌ๋ฌ ์ค๊ฐ ์ขํ๊ณ๋ก ๋ณํํ๋ ์ด์ ๋ ํน์ ์ขํ๊ณ์์ ์ผ๋ถ ์ฐ์ฐ์ด ๋ ์ฌ์์ง๊ธฐ ๋๋ฌธ์ด๋ค. ์ด 5๊ฐ์ง ์ค์ํ ์ขํ๊ณ๊ฐ ์๋ค.
โ Local Space (๋ก์ปฌ ๊ณต๊ฐ)
๋ก์ปฌ ๊ณต๊ฐ์ ๊ฐ์ฒด์ ๊ตญํ๋ ์ขํ ๊ณต๊ฐ, ์ฆ ๊ฐ์ฒด๊ฐ ์์ํ๋ ์์น๋ฅผ ๋ํ๋ธ๋ค. ๋๋ถ๋ถ์ ๋ชจ๋ธ์ (0,0,0)์ ์ด๊ธฐ ์์น๋ก ๊ฐ์ง๊ณ ์์ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค. ๋ฐ๋ผ์ ๋ชจ๋ธ์ ๋ชจ๋ ์ ์ ์ ๊ฐ์ฒด์ ๊ตญํ๋ ์ขํ๋ก, ๋ก์ปฌ ๊ณต๊ฐ์ ์๋ค.
โ World Space (์๋ ๊ณต๊ฐ)
๊ฐ ๊ฐ์ฒด๋ฅผ ๋ ํฐ 3์ฐจ์ ์ธ์ ์์ ์์น์ํค๊ธฐ ์ํด ๋ชจ๋ ์ ์ ์ ์ขํ๋ฅผ (๊ฒ์) ์ธ๊ณ์ ์๋์ ์ผ๋ก ๋ฐฐ์นํ๋ค. ๊ฐ์ฒด์ ์ขํ๋ ๋ก์ปฌ ๊ณต๊ฐ์์ ์๋ ๊ณต๊ฐ์ผ๋ก ๋ณํ๋๋ฉฐ, ์ด๋ Model ํ๋ ฌ์ ํตํด ์ํ๋๋ค.
Model ํ๋ ฌ์ ๊ฐ์ฒด๋ฅผ ์์น์ํค๊ณ ์ ํ๋ ์ฅ์/๋ฐฉํฅ์ ๋ง๊ฒ ๋ณํํ๋ ๋ณํ ํ๋ ฌ์ด๋ค. ์ด๋ ๊ฐ์ฒด๋ฅผ ํํ ์ด๋, ์ค์ผ์ผ ์กฐ์ , ํ์ ํ์ฌ ์ธ๊ณ์ ๋ฐฐ์นํ๋ค.
โ View Space (๋ทฐ ๊ณต๊ฐ)
๋ทฐ ๊ณต๊ฐ์ ๋ณดํต OpenGL์ ์นด๋ฉ๋ผ๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ณต๊ฐ์ด๋ค (Camera Space ๋๋ Eye Space๋ผ๊ณ ๋ ํ๋ค). ๋ทฐ ๊ณต๊ฐ์ World Space ์ขํ๋ฅผ ์ฌ์ฉ์์ ์์ผ ์์ ์๋ ์ขํ๋ก ๋ณํํ ๊ฒฐ๊ณผ์ด๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณํ๊ณผ ํ์ ์ ์กฐํฉ์ ํตํด ์ฅ๋ฉด์ ์ด๋/ํ์ ์์ผ ํน์ ํญ๋ชฉ์ด ์นด๋ฉ๋ผ ์์ ์ค๋๋ก ๋ณํํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค. ์ด๋ฌํ ๋ณํ์ ์ผ๋ฐ์ ์ผ๋ก ๋ทฐ ํ๋ ฌ์ ์ ์ฅ๋์ด ์๋ ์ขํ๋ฅผ ๋ทฐ ๊ณต๊ฐ์ผ๋ก ๋ณํํ๋ค.
โ Clip Space (ํด๋ฆฝ ๊ณต๊ฐ)
OpenGL์์๋ ๊ฐ Vertex Shader ์คํ์ ๋์ ์ขํ๊ฐ ํน์ ๋ฒ์ ๋ด์ ์์ด์ผ ํ๋ฉฐ, ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ์ขํ๋ ํด๋ฆฌํ๋๋ค. ํด๋ฆฌํ๋ ์ขํ๋ ์ญ์ ๋๋ฏ๋ก, ๋จ์ ์ขํ๋ง์ด ํ๋ฉด์ ๋ณด์ด๋ ํ๋๊ทธ๋จผํธ๋ก ๋๋๊ฒ ๋๋ค.
๋ชจ๋ ์ขํ๋ฅผ ์ฒ์๋ถํฐ -1.0๊ณผ 1.0 ์ฌ์ด๋ก ์ง์ ํ๋ ๊ฒ์ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ง๊ด์ ์ด์ง ์๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๋ ์์
ํ ์ขํ๋ค์ ์ง์ ํ๊ณ ์ด๋ฅผ OpenGL์ด ์ดํดํ ์ ์๋ NDC(์ ๊ทํ๋ ์ขํ๊ณ) ํ์์ผ๋ก ๋ณํํ๋ค.
์ ์ ์ขํ๋ฅผ View Space์์ Clip Space๋ก ๋ณํํ๊ธฐ ์ํด, ์ฐ๋ฆฌ๋ Projection(ํฌ์) ํ๋ ฌ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ๋ ฌ์ ์ ์ํ๋ค. ์ด ํ๋ ฌ์ ๊ฐ ์ฐจ์์์ ์ขํ ๋ฒ์(์๋ฅผ ๋ค์ด -1000์์ 1000๊น์ง)๋ฅผ ์ง์ ํ ๋ค, ์ด ์ง์ ๋ ๋ฒ์ ๋ด์ ์ขํ๋ฅผ NDC(-1.0, 1.0)๋ก ๋ณํํ๋ค. (์ง์ ์ ์ผ๋ก ๋ณํํ๋ ๊ฒ์ด ์๋๋ผ, ์๊ทผ ๋ถํ ์ด๋ผ๋ ๋จ๊ณ๊ฐ ์ค๊ฐ์ ์๋ค) ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋ชจ๋ ์ขํ๋ -1.0๊ณผ 1.0 ์ฌ์ด์ Mapping๋์ง ์๊ณ ํด๋ฆฌํ๋๋ค.
* ์ผ๊ฐํ๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ๋ํ์ ์ผ๋ถ๋ง ํด๋ฆฌํ ๋ณผ๋ฅจ ๋ฐ์ ์๋ ๊ฒฝ์ฐ, OpenGL์ ํด๋น ์ผ๊ฐํ์ ํด๋ฆฌํ ๋ฒ์ ๋ด์ ๋ง๋๋ก ํ๋ ์ด์์ ์ผ๊ฐํ์ผ๋ก ์ฌ๊ตฌ์ฑํ๋ค.
- Projection (ํฌ์)
ํน์ ๋ฒ์ ๋ด์ ์ขํ๋ฅผ NDC๋ก ๋ณํํ๋ ์ ์ฒด ๊ณผ์ ์ 'ํฌ์'์ด๋ผ๊ณ ํ๋ค. Projection ํ๋ ฌ์ด ๋ง๋๋ ์ด ๋ทฐ์ ๋ฐ์ค๋ฅผ 'ํ๋ฌ์คํ
(frustum)'์ด๋ผ๊ณ ํ๋ฉฐ, ์ด ํ๋ฌ์คํ
๋ด์ ์์นํ ์ขํ๋ ์ฌ์ฉ์์ ํ๋ฉด์ ํ์๋๋ค.
๋ชจ๋ ์ ์ ์ด Clip Space๋ก ๋ณํ๋ ํ, ๋ง์ง๋ง์ผ๋ก ์๊ทผ ๋ถํ (Perspective Division)์ด๋ผ๋ ์์
์ด ์ํ๋๋ค. ์ด ๊ณผ์ ์์ ์์น ๋ฒกํฐ์ x, y, z ์ฑ๋ถ์ ๋ฒกํฐ์ homogeneous w ์ฑ๋ถ์ผ๋ก ๋๋๊ฒ ๋๋ค. ์๊ทผ ๋ถํ ์ 4D ํด๋ฆฝ ๊ณต๊ฐ ์ขํ๋ฅผ 3D ์ ๊ทํ๋ ์ขํ๊ณ๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค. ์ด ๋จ๊ณ๋ Vertex Shader ๋จ๊ณ๊ฐ ๋๋ ๋ ์๋์ผ๋ก ์ํ๋๋ค.
* homogeneous (๋์น)
homogeneous ์ขํ ์์คํ
์์๋ 3D ๊ณต๊ฐ์ ํ ์ ์ ๋ํ๋ด๊ธฐ ์ํด (x, y, z, w) ํํ์ 4์ฐจ์ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ๊ธฐ์ w๋ homogeneous ์ขํ์ ๋ค ๋ฒ์งธ ์ฑ๋ถ์ด๋ค. homogeneous ์ขํ์ w ์ฑ๋ถ์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ณํ์ 4x4 ํ๋ ฌ๋ก ํํํ์ฌ ํ๋์ ํ๋ ฌ ์ฐ์ฐ์ผ๋ก ํต์ผํ ์ ์๊ณ , (x, y, z) ์ขํ๋ฅผ w ์ขํ๋ก ๋๋ ์ ๊ฐ๊น์ด ๊ฐ์ฒด๋ ํฌ๊ฒ, ๋จผ ๊ฐ์ฒด๋ ์๊ฒ ํํํ์ฌ ์๊ทผ๊ฐ์ ํํํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๋จ๊ณ ์ดํ, ๊ฒฐ๊ณผ ์ขํ๋ Screen Coordinates๋ก ๋งคํ๋๊ณ (glViewport ์ค์ ์ ์ฌ์ฉํ์ฌ) ํ๋๊ทธ๋จผํธ๋ก ๋ณํ๋๋ค.
View Coordinates๋ฅผ Clip Coordinates๋ก ๋ณํํ๋ ํฌ์ ํ๋ ฌ์ ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ง ํํ๋ฅผ ์ทจํ๋ค. ๊ฐ๊ฐ์ ํํ๋ ๊ณ ์ ํ ํ๋ฌ์คํ
์ ์ ์ํ๋ฉฐ, ์ง๊ต ํฌ์ ํ๋ ฌ(Orthographic Projection Matrix) ๋๋ ์๊ทผ ํฌ์ ํ๋ ฌ(Perspective Projection Matrix)์ ๋ง๋ค ์ ์๋ค.
โ Orthographic Projection
Orthographic Projection(์ง๊ต ํฌ์ ํ๋ ฌ)์ ํ๋ธ์ ๊ฐ์ ํํ์ Frustum ๋ฐ์ค๋ฅผ ์ ์ํ์ฌ, ์ด ๋ฐ์ค ๋ฐ์ ์๋ ๋ชจ๋ ์ ์ ๋ค์ ํด๋ฆฌํํ๋ค. ์ง๊ต ํฌ์ ํ๋ ฌ์ ๋ง๋ค ๋ ์ฐ๋ฆฌ๋ Visible Frustum์ ๋๋น, ๋์ด, ๊ธธ์ด๋ฅผ ์ง์ ํ๋ค. ์ด Frustum ๋ด๋ถ์ ๋ชจ๋ ์ขํ๋ ํ๋ ฌ์ ์ํด ๋ณํ๋ ํ NDC(Normalized Device Coordinates) ๋ฒ์ ๋ด์ ๋ค์ด์ค๋ฉฐ, ๋ฐ๋ผ์ ํด๋ฆฌํ๋์ง ์๋๋ค.

Frustum์ Visible Coordinates๋ฅผ ์ ์ํ๋ฉฐ ๋๋น, ๋์ด, Near Plane๊ณผ Far Plane์ผ๋ก ์ง์ ๋๋ค. Near Plane ์์ ์๋ ๋ชจ๋ ์ขํ๋ ํด๋ฆฌํ๋๊ณ , Far Plane ๋ค์ ์ขํ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋ฆฌํ๋๋ค. Orthographic Frustum์ ๋ณํ๋ ๋ฒกํฐ์ w ์ปดํฌ๋ํธ์ ์ํฅ์ ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์, Frustum ๋ด๋ถ์ ๋ชจ๋ ์ขํ๋ฅผ ์ ๊ทํ๋ ์ฅ์น ์ขํ(Normalized Device Coordinates)๋ก ์ง์ ๋งคํํ๋ค. w ์ปดํฌ๋ํธ๊ฐ 1.0์ผ๋ก ์ ์ง๋๋ฉด ์๊ทผ ๋ถํ ์ด ์ขํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค.
Orthographic Projection Matrix(์ง๊ต ํฌ์ ํ๋ ฌ)๋ฅผ ์์ฑํ๊ธฐ ์ํด GLM์ ๋ด์ฅ ํจ์์ธ glm::ortho๋ฅผ ์ฌ์ฉํ๋ค.
glm::ortho(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f);
์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ Frustum์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์ขํ๋ฅผ ์ง์ ํ๊ณ , ์ธ ๋ฒ์งธ์ ๋ค ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ Frustum์ ํ๋จ๊ณผ ์๋จ ๋ถ๋ถ์ ์ง์ ํ๋ค. ์ด ๋ค ๊ฐ์ ์ ์ผ๋ก Near Plane๊ณผ Far Plane์ ํฌ๊ธฐ๋ฅผ ์ ์ํ๊ณ , ๋ค์ฏ ๋ฒ์งธ์ ์ฌ์ฏ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ Near Plane๊ณผ Far Plane ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ํ๋ค. ์ด ํน์ ํฌ์ ํ๋ ฌ์ x, y, z ๋ฒ์ ๊ฐ ์ฌ์ด์ ๋ชจ๋ ์ขํ๋ฅผ NDC๋ก ๋ณํํ๋ค.
์ง๊ต ํฌ์ ํ๋ ฌ์ ์ขํ๋ฅผ 2D ํ๋ฉด(ํ๋ฉด)์ ์ง์ ๋งคํํ์ง๋ง, ์ค์ ๋ก๋ ํฌ์์ด ์๊ทผ์ ๊ณ ๋ คํ์ง ์๊ธฐ ๋๋ฌธ์ ๋นํ์ค์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ค. ์ด๋ ์๊ทผ ํฌ์ ํ๋ ฌ์ด ํด๊ฒฐํด ์ฃผ๋ ๋ถ๋ถ์ด๋ค.
โ Perspective Projection
ํ์ค์์๋ ์๊ทผ๊ฐ ๋๋ฌธ์ ๋ฉ๋ฆฌ ์๋ ๋ฌผ์ฒด๊ฐ ์์๋ณด์ด๋ฉฐ ์ ๋ค์ด ์ถฉ๋ถํ ๋จผ ๊ฑฐ๋ฆฌ์์ ํ ์ ์ผ๋ก ๋ชจ์ด๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ์ด๊ฒ์ด ์๊ทผ ํฌ์์ด ๋ชจ๋ฐฉํ๋ ค๊ณ ํ๋ ํจ๊ณผ์ด๋ค.
ํฌ์ ํ๋ ฌ์ ์ฃผ์ด์ง Frustum ๋ฒ์๋ฅผ Clip Space๋ก ๋งคํํ ๋ฟ๋ง ์๋๋ผ, ๊ฐ ์ ์ ์ขํ์ w ๊ฐ์ ์กฐ์ํ์ฌ ๊ด์ฐฐ์์์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์ด์ง์๋ก w ์ปดํฌ๋ํธ๊ฐ ์ปค์ง๋๋ก ๋ง๋ ๋ค. ์ขํ๊ฐ ํด๋ฆฝ ๊ณต๊ฐ์ผ๋ก ๋ณํ๋๋ฉด -w์์ w ๋ฒ์ ๋ด์ ์๊ฒ ๋๋ฉฐ(์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒ์ ํด๋ฆฌํ๋๋ค), OpenGL์์๋ ์ต์ข
์ ์ ์
ฐ์ด๋ ์ถ๋ ฅ์ด -1.0์์ 1.0 ์ฌ์ด์ ๊ฐ์ ๋ฒ์์ ์์ด์ผ ํ๋ค. ๋ฐ๋ผ์ ์ขํ๊ฐ ํด๋ฆฝ ๊ณต๊ฐ์ ์์ ๋, ํด๋ฆฝ ๊ณต๊ฐ ์ขํ์ ์๊ทผ ๋ถํ ์ด ์ ์ฉ๋๋ค.
out = (x/w, y/w, z/w)
๊ฐ ์ ์ ์ขํ์ ๊ตฌ์ฑ ์์๋ w ์ฑ๋ถ์ผ๋ก ๋๋์ด์ ธ, ์ ์ ์ด ๊ด์ฐฐ์๋ก๋ถํฐ ๋ฉ์ด์ง์๋ก ๋ ์์ ์ ์ ์ขํ๋ฅผ ์ป๊ฒ ๋๋ค. ์ด๋ w ์ฑ๋ถ์ด ์ค์ํ ๋ ๋ค๋ฅธ ์ด์ ๋ก, ์๊ทผ ํฌ์์ ๊ตฌํํ๋ ๋ฐ ๋์์ด ๋๋ค. ๊ฒฐ๊ณผ ์ขํ๋ Normalized Device Space์ ์๊ฒ ๋๋ค.
Perspective Projection Matrix(์๊ทผ ํฌ์ ํ๋ ฌ)๋ GLM์์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
glm::mat4 proj = glm::perspective(glm::radians(45.0f), (float)width/(float)height, 0.1f, 100.0f);
glm::perspective ํจ์๋ Visible Space๋ฅผ ์ ์ํ๋ ํฐ Frustum์ ์์ฑํ๋ฉฐ, ์ด Frustum ๋ฐ์ ์๋ ๋ชจ๋ ๊ฒ์ ํด๋ฆฝ ๊ณต๊ฐ ๋ฒ์์ ํฌํจ๋์ง ์์ ํด๋ฆฌํ๋๋ค. Perspective Frustum์ ์ด ์์ ๋ด๋ถ์ ๊ฐ ์ขํ๊ฐ ํด๋ฆฝ ๊ณต๊ฐ์ ํ ์ ์ ๋งคํ๋๋ ๋น๊ท ์ผํ ๋ชจ์์ ๋ฐ์ค๋ก ์๊ฐํํ ์ ์๋ค.

์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ์์ผ๊ฐ(FOV)์ ์ ์ํ๋ฉฐ, ์ด๋ ์์ผ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ค. ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ํ๋ฉด ๋น์จ(Aspect Ratio)์ ์ค์ ํ๋ฉฐ, ์ด๋ ๋ทฐํฌํธ์ ๋๋น๋ฅผ ๋์ด๋ก ๋๋์ด ๊ณ์ฐ๋๋ค. ์ธ ๋ฒ์งธ์ ๋ค ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ Frustum์ Near Plane๊ณผ Far Plane์ ์ค์ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก Near Plane ๊ฑฐ๋ฆฌ๋ 0.1, Far Plane ๊ฑฐ๋ฆฌ๋ 100.0์ผ๋ก ์ค์ ํ๋ค. Frustum ๋ด์์ Near Plane๊ณผ Far Plane ์ฌ์ด์ ์๋ ๋ชจ๋ ์ ์ ์ด ๋ ๋๋ง๋๋ค.
โ ์ข ํฉ
๋ชจ๋ ๋จ๊ณ๋ฅผ ์ข
ํฉํ๋ฉด, ๋ชจ๋ธ, ๋ทฐ, ํฌ์ ํ๋ ฌ ๊ฐ๊ฐ์ ๋ํ ๋ณํ ํ๋ ฌ์ ์์ฑํ๊ณ , ์ ์ ์ขํ๋ ๋ค์๊ณผ ๊ฐ์ด ํด๋ฆฝ ์ขํ๋ก ๋ณํ๋๋ค.
๐ clip = ๐ projection ⋅ ๐ view ⋅ ๐ model ⋅ ๐ local
* ํ๋ ฌ ๊ณฑ์
์ ์์๋ ์ค๋ฅธ์ชฝ๋ถํฐ์์ ์ ์
๋ณํ๋ ์ ์ ์ ์ดํ ์ ์ ์
ฐ์ด๋์์ gl_Position์ ํ ๋น๋์ด์ผ ํ๋ฉฐ, ๊ทธ๋ฌ๋ฉด OpenGL์ด ์๋์ผ๋ก ์๊ทผ ๋ถํ ๊ณผ ํด๋ฆฌํ์ ์ํํ๋ค.
์๊ทผ ๋ถํ ๊ณผ ํด๋ฆฌํ์ ํตํด ํด๋ฆฝ ๊ณต๊ฐ์์ NDC๋ก ๋ณํ๋ ์ดํ, OpenGL์ glViewport์์ ์ ๊ณต๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํด NDC ์ขํ๋ฅผ ํ๋ฉด ์ขํ๋ก ๋งคํํ๋ค (์ด ๊ณผ์ ์ ๋ทฐํฌํธ ๋ณํ์ด๋ผ๊ณ ํ๋ค)
'๐จ Graphics > ๐ต OpenGL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [OpenGL] 3์ฐจ์ ๊ฐ์ฒด ๋ ๋ 2 (0) | 2024.08.08 |
|---|---|
| [OpenGL] 3์ฐจ์ ๊ฐ์ฒด ๋ ๋ 1 (0) | 2024.08.02 |
| [OpenGL] ๋ณํ (Transformation) (0) | 2024.07.30 |
| [OpenGL] ํ๋ ฌ (Matrix) (0) | 2024.07.30 |
| [OpenGL] ๋ฒกํฐ (Vector) (0) | 2024.07.30 |