OpenGL์์ ๋ชจ๋ ๊ฒ์ 3D ๊ณต๊ฐ์ ์์ง๋ง, ํ๋ฉด์ด๋ ์ฐฝ์ 2D ํฝ์ ๋ฐฐ์ด์ด๋ฏ๋ก, OpenGL์ ์ฃผ์ ์์ ์
๋ชจ๋ 3D ์ขํ๋ฅผ ํ๋ฉด์ ๋ง๋ 2Dํฝ์ ๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค.
3D ์ขํ๋ฅผ 2D ํฝ์ ๋ก ๋ณํํ๋ ๊ณผ์ ์ OpenGL์ ๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค.
๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์ ํฌ๊ฒ ๋ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์๋๋ฐ,
์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ 3D ์ขํ๋ฅผ 2D ์ขํ๋ก ๋ณํํ๊ณ ,
๋ ๋ฒ์งธ ๋ถ๋ถ์ 2D ์ขํ๋ฅผ ์ค์ ์์์ด ์๋ ํฝ์ ๋ก ๋ณํํฉ๋๋ค.
๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์ 3D ์ขํ ์ธํธ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฅผ ํ๋ฉด์ ์์ ์๋ 2D ํฝ์ ๋ก ๋ณํํฉ๋๋ค.
๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋ ์ ์์ผ๋ฉฐ,
๊ฐ ๋จ๊ณ๋ ์ด์ ๋จ๊ณ์ ์ถ๋ ฅ์ ์ ๋ ฅ์ผ๋ก ํ์๋ก ํฉ๋๋ค. ์ด๋ฌํ ๊ฐ ๋จ๊ณ๋ ๋งค์ฐ ์ ๋ฌธํ๋์ด ์์ผ๋ฉฐ(ํ๋์ ํน์ ๊ธฐ๋ฅ๋ง ์ํ),
๋ณ๋ ฌ๋ก ์ฝ๊ฒ ์คํ๋ ์ ์์ต๋๋ค. ๋ณ๋ ฌ์ ํน์ฑ์ผ๋ก ์ธํด, ํ์ฌ์ ๊ทธ๋ํฝ ์นด๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ ๋ด์์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ์์ฒ ๊ฐ์ ์์ ์ฒ๋ฆฌ ์ฝ์ด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ด ์ฒ๋ฆฌ ์ฝ์ด๋ค์ ํ์ดํ๋ผ์ธ์ ๊ฐ ๋จ๊ณ๋ง๋ค GPU์์ ์คํ๋๋ ์์ ํ๋ก๊ทธ๋จ๋ค์ ์คํํฉ๋๋ค. ์ด๋ฌํ ์์ ํ๋ก๊ทธ๋จ๋ค์ ์ ฐ์ด๋๋ผ๊ณ ํฉ๋๋ค.
์ด๋ฌํ ์ ฐ์ด๋ ์ค ์ผ๋ถ๋ ๊ฐ๋ฐ์๊ฐ ๊ตฌ์ฑํ ์ ์์ด, ๊ธฐ์กด์ ๊ธฐ๋ณธ ์ ฐ์ด๋๋ฅผ ๋์ฒดํ ์ ์๋ ์์ฒด ์ ฐ์ด๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ํ์ดํ๋ผ์ธ์ ํน์ ๋ถ๋ถ์ ๋ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ผ๋ฉฐ, GPU์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๊ท์คํ CPU ์๊ฐ๋ ์ ์ฝํ ์ ์์ต๋๋ค.
์ ฐ์ด๋๋ OpenGL ์ ฐ์ด๋ฉ ์ธ์ด(GLSL)๋ก ์์ฑ๋๋ฉฐ, ๋ค์ ์ฅ์์ ์ด์ ๋ํด ๋ ์์ธํ ์ดํด๋ณผ ๊ฒ์ ๋๋ค.
์๋์์๋ ๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์ ๋ชจ๋ ๋จ๊ณ๋ฅผ ์ถ์์ ์ผ๋ก ๋ํ๋ธ ๊ฒ์ ์ฐพ์ ์ ์์ต๋๋ค. ํ๋์ ์น์ ์ ์ฐ๋ฆฌ๊ฐ ์์ฒด ์ ฐ์ด๋๋ฅผ ์ฃผ์ ํ ์ ์๋ ๋ถ๋ถ์ ๋ํ๋ ๋๋ค.

๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ ๋๋ง๋ ํฝ์ ๋ก ๋ณํํ๋๋ฐ
๊ฐ๊ฐ ํ๋์ ํน์ ๋ถ๋ถ์ ์ฒ๋ฆฌํ๋ ๋ง์ ์น์ ์ด ํฌํจ๋์ด ์์ต๋๋ค.
๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์ ์ ๋ ฅ์ผ๋ก๋ Vertex Data๋ผ๊ณ ํ๋ ์ผ๊ฐํ์ ํ์ฑํ๋ ์ธ๊ฐ์ 3D ์ขํ๋ฅผ ๋ฐฐ์ด๋ก ์ ๋ฌํฉ๋๋ค.
ํ๋์ ์ ์ ์ 3D์ขํ๋น ํ๋์ ๋ฐ์ดํฐ ๋ชจ์์ ๋๋ค.
์ด ์ ์ ์ ๋ฐ์ดํฐ๋ ์ํ๋ ์ด๋ค ๋ฐ์ดํฐ๋ ํฌํจํ ์ ์๋ ์ ์ ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ํ๋ ๋๋ค.
ํ์ง๋ง ๊ฐ๋จํ ํ๊ธฐ ์ํด, ๊ฐ ์ ์ ์ 3D ์์น์ ์ผ๋ถ ์์ ๊ฐ์ผ๋ก๋ง ๊ตฌ์ฑ๋๋ค๊ณ ๊ฐ์ ํฉ์๋ค.
OpenGL์ด ์ขํ์ ์์ ๊ฐ์ ๋ชจ์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง์ ๋ํ ๋ ๋ ํ์ ์ ์๋ ค์ค์ผ ํฉ๋๋ค.
๋ฐ์ดํฐ๊ฐ ์ ๋ค๋ก ๋ ๋๋ง๋ ์ง, ์ผ๊ฐํ๋ค๋ก ๋ ๋๋ง๋ ์ง ์๋๋ฉด ํ๋์ ๊ธด ์ ์ผ๋ก ๋ ๋๋ง ๋ ์ง ๋ฑ์ ์๋ ค์ค์ผ ํฉ๋๋ค.
์ด๋ฌํ ํํธ๋ฅผ primitives๋ผ๊ณ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๊ทธ๋ฆฌ๊ธฐ ๋ช ๋ น์ ํธ์ถํ ๋ ์ ๊ณตํฉ๋๋ค.
GL_POINTS, GL_TRIANGLES ๋ฐ GL_LINE_STRIP ๊ฐ์ ๊ฒ๋ค์ด ๊ทธ๋ ์ต๋๋ค.
Vertext Shader
ํ์ดํ๋ผ์ธ์ ์ฒซ๋ฒ์งธ ๋ถ๋ถ์ ๋จ์ผ ์ ์ ์ ์ ๋ ฅ์ผ๋ก ๋ฐ๋ vertex shader ์ ๋๋ค.
vertext shader์ ์ฃผ์ ๋ชฉ์ ์ 3D ์ขํ๋ฅผ ๋ค๋ฅธ 3D์ขํ๋ก ๋ณํํ๋ ๊ฒ์ด๋ฉฐ(๋์ค์ ์ค๋ช )
vertextshader๋ ์ ์ ์์ฑ์ ๋ํ ๊ธฐ๋ณธ ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์๊ฒ ํด์ค๋๋ค.
vertex shader ๋จ๊ณ์ ์ถ๋ ฅ์ ์ ํ์ ์ผ๋ก geometry shader์ ์ ๋ฌ๋ฉ๋๋ค.
geometry shader๋ primitive๋ฅผ ํ์ฑํ๋ ์ ์ ๋ชจ์์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์๋ก์ด ์ ์ ์ ์์ฑํ์ฌ
์๋ก์ด primitive๋ฅผ ํ์ฑํ๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
์ด ์์ ์ ๊ฒฝ์ฐ์๋ ์ฃผ์ด์ง ๋ชจ์์์ ๋ ๋ฒ์งธ ์ผ๊ฐํ์ ์์ฑํฉ๋๋ค.
Privitive Assembly
primitive assembly ๋จ๊ณ๋ vertex ํน์ geometry shader์์ ๋์จ ๋ชจ๋ ์ ์ (ํน์ ์ ์ GL_POINTS๊ฐ ์ ํ๋์๋ค๋ฉด)
์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ํ๋ ์ด์์ primitive ๋ฅผ ํ์ฑํ๊ณ ๋ชจ๋ ์ ์ ์กฐ๋ฆฝํฉ๋๋ค.
์ ๊ฒฝ์ฐ ๋๊ฐฑ์ ์ผ๊ฐํ์ ์์ฑํฉ๋๋ค.
primitive assembly ์ ์ถ๋ ฅ์ ๋ ์คํฐํ ๋จ๊ณ๋ก ๋์ด๊ฐ๋๋ค.
์ฌ๊ธฐ์ primitive๋ฅผ ์ต์ข ํ๋ฉด์ ํฝ์ ์ ๋งคํํ๊ณ , fragment shader๊ฐ ์ฌ์ฉํ fragment๋ฅผ ์์ฑํฉ๋๋ค.
fragment shader๊ฐ ์คํ๋๊ธฐ ์ ์ ํด๋ฆฌํ์ด ์ํ๋ฉ๋๋ค.
ํด๋ฆฌํ์ ๋ทฐ ๋ฐ๊นฅ์ ์๋ framents๋ฅผ ๋ชจ๋ ๋ฒ๋ฆฌ๊ณ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
OpenGL์์ fragment๋ OpenGL์ด ํ ํฝ์ ์ ๋ ๋๋งํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ ์ ๋๋ค.
Fragment Shader
fragment shader์ ์ฃผ์ ๋ชฉํ๋ ํฝ์ ์ ์ต์ข ์์์ ๊ณ์ฐํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์คํ ์ด์ง๋ ๋ณดํต advanced OpenGL ์ดํํธ๊ฐ ๋ฐ์ํ๋ ๊ณณ์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก fragmnet shader๋ 3D ํ๋ฉด์ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.(ํฝ์ ์์์ ๊ณ์ฐํ๊ธฐ ์ํ ๋น, ๊ทธ๋ฆผ์ ๋น์ ์์ ๋ฑ)
Tests and Blendings
๋ชจ๋ ํด๋น ์์ ๊ฐ์ด ๊ฒฐ์ ๋ ํ, ์ต์ข ๊ฐ์ฒด๋ ์ํ ํ ์คํธ ๋ฐ ๋ธ๋ ๋ฉ ๋จ๊ณ๋ผ๊ณ ๋ถ๋ฅด๋ ๋ ํ๋์ ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค.
์ด ๋จ๊ณ๋ ํ๋๊ทธ๋จผํธ์ ํด๋น depth(๋ฐ ์คํ ์ค) ๊ฐ์ ํ์ธํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ ํ๋๊ทธ๋จผํธ๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด ์์ ์๊ฑฐ๋ ๋ค์ ์์ด์ผ ํ๋์ง๋ฅผ ํ๋จํ์ฌ ๊ทธ์ ๋ฐ๋ผ ์ ๊ฑฐํฉ๋๋ค.
๋ํ, ์ํ ๊ฐ(์ํ ๊ฐ์ ๊ฐ์ฒด์ ๋ถํฌ๋ช ๋๋ฅผ ์ ์ํจ)์ ํ์ธํ๊ณ ๊ฐ์ฒด๋ฅผ ๊ทธ์ ๋ฐ๋ผ ํผํฉํฉ๋๋ค.
๋ฐ๋ผ์ ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋์์ ํฝ์ ์ถ๋ ฅ ์์์ด ๊ณ์ฐ๋์๋ค ํ๋๋ผ๋,
์ฌ๋ฌ ์ผ๊ฐํ์ ๋ ๋๋งํ ๋ ์ต์ข ํฝ์ ์์์ ์์ ํ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๋ณด์๋ค์ํผ, ๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์ ์๋นํ ๋ณต์กํ ์ ์ฒด์ด๋ฉฐ ๋ง์ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ถ๋ถ๋ค์ ํฌํจํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ฑฐ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ๋ ์ ์ ๋ฐ ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋๋ง ์์ ํ๋ฉด ๋ฉ๋๋ค.
์ง์ค๋ฉํธ๋ฆฌ ์ ฐ์ด๋๋ ์ ํ ์ฌํญ์ด๋ฉฐ ๋ณดํต ๊ธฐ๋ณธ ์ ฐ์ด๋๋ก ๋จ๊ฒจ์ง๋๋ค. ๋ํ, ์ฌ๊ธฐ์์ ๋ฌ์ฌํ์ง ์์ ํ ์ ๋ ์ด์ ๋จ๊ณ์ ๋ณํ ํผ๋๋ฐฑ ๋ฃจํ๊ฐ ์์ง๋ง, ๊ทธ๊ฒ์ ๋์ค์ ์ด์ผ๊ธฐ์ ๋๋ค.
ํ๋ OpenGL์์๋ ์ต์ํ ์์ฒด ์ ์ ๋ฐ ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋๋ฅผ ์ ์ํด์ผ ํฉ๋๋ค(GPU์ ๊ธฐ๋ณธ ์ ์ /ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋๊ฐ ์์ต๋๋ค).
์ด ๋๋ฌธ์ ํ๋ OpenGL์ ๋ฐฐ์ฐ๊ธฐ ์์ํ๊ธฐ๊ฐ ์ข ์ข ์ด๋ ต์ต๋๋ค.
์๋ํ๋ฉด ์ฒซ ์ผ๊ฐํ์ ๋ ๋๋งํ๊ธฐ ์ ์ ๋ง์ ์ง์์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ง๋ง ์ผ๊ฐํ์ ๋ ๋๋งํ๊ฒ ๋๋ฉด ๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ํจ์ฌ ๋ ๋ง์ด ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
'๐ธ OpenGL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Learn OpenGL] Hello Triangle - 4 (0) | 2023.11.18 |
|---|---|
| [Learn OpenGL] Hello Triangle - 3 (0) | 2023.11.17 |
| [Learn OpenGL] Hello Triangle - 2 (0) | 2023.11.17 |
| [Learn OpenGL] Creating a window(M1 Mac, Xcode) (0) | 2023.11.16 |
| [Learn OpenGL] OpenGL (0) | 2023.11.15 |