์๋ณธ - https://learnopengl.com/Getting-started/Creating-a-window
๋ฉ์ง ๊ทธ๋ํฝ์ ๋ง๋ค๊ธฐ ์ ์ ๋จผ์ ํด์ผ ํ ์ผ์ OpenGL ์ปจํ ์คํธ์ ์ดํ๋ฆฌ์ผ์ด์ ์ฐฝ์ ๋ง๋ค์ด์ ๋์ด์ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ์์ ์ ์ด์ ์ฒด์ ๋ง๋ค ๋ค๋ฅด๋ฉฐ OpenGL์ ์๋์ ์ผ๋ก ์ด๋ฌํ ์์ ์์ ์ถ์ํํ๋ ค๊ณ ํฉ๋๋ค.
์ฆ, ์ฐฝ์ ๋ง๋ค๊ณ , ์ปจํ ์คํธ๋ฅผ ์ ์ํ๊ณ , ์ฌ์ฉ์ ์ ๋ ฅ์ ์ง์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
๋คํํ๋, ์ฐ๋ฆฌ๊ฐ ์ฐพ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฝค ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ผ๋ฉฐ, ์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํนํ OpenGL์ ๋ชฉํ๋ก ํฉ๋๋ค.
์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์ ์ฒด์ ๋ณ ์์ ์ ๋ชจ๋ ์ ์ฅํ๊ณ ๋ ๋๋งํ ์ ์๋ ์ฐฝ๊ณผ OpenGL ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
GLUT, SDL, SFML, GLFW ๋ฑ์ด ์ ๋ช ํฉ๋๋ค.
LearnOpenGL์์๋ GLFW๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋๋ถ๋ถ์ ์ค์ ์ GLFW์ ์ค์ ๊ณผ ์ ์ฌํ๋ฏ๋ก ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ์ญ์์ค.
GLFW
GLFW๋ C๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ํนํ OpenGL์ ๋์์ผ๋ก ํฉ๋๋ค.
GLFW๋ ํ๋ฉด์ ์ํ์ ๋ ๋๋งํ๋๋ฐ ํ์ํ ์ต์ํ์ ํ์ํ์ ์ ๊ณตํฉ๋๋ค.
์ด๋ฅผ ํตํด OpenGL ์ปจํ ์คํธ๋ฅผ ๋ง๋ค๊ณ , ์ฐฝ ๋งค๊ฐ ๋ณ์๋ฅผ ์ ์ํ๊ณ , ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ฐ๋ฆฌ์ ๋ชฉ์ ์ ์ถฉ๋ถํฉ๋๋ค.
์ด ์ฅ๊ณผ ๋ค์ ์ฅ์ ์ถ์ ์ GLFW๋ฅผ ๊ฐ๋ํ์ฌ OpenGL ์ปจํ ์คํธ๋ฅผ ์ ์ ํ๊ฒ ์์ฑํ๊ณ ์ฐ๋ฆฌ๊ฐ ์ฅ๋์น ์ ์๋ ๊ฐ๋จํ ์ฐฝ์ ํ์ํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
์ด ์ฐฝ์์๋ GLFW ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒ์, ๊ตฌ์ถ ๋ฐ ์ฐ๊ฒฐํ๋ ๋จ๊ณ๋ณ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
์ด ๋ฌธ์์์๋ Microsoft Visual Studio 2019 IDE๋ฅผ ์ฌ์ฉํฉ๋๋ค(๋ ์ต์ Visual Studio ๋ฒ์ ์์๋ ํ๋ก์ธ์ค๋ ๋์ผํฉ๋๋ค).
Visual Studio(๋๋ ์ด์ ๋ฒ์ )๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ๋๋ถ๋ถ์ ๋ค๋ฅธ IDE์์๋ ํ๋ก์ธ์ค๊ฐ ์ ์ฌํฉ๋๋ค.
GLFW ๋น๋ํ๊ธฐ
GLFW๋ ์น ํ์ด์ง์ ๋ค์ด๋ก๋ ํ์ด์ง์์ ์ป์ ์ ์์ต๋๋ค.
GLFW๋ ์ด๋ฏธ 2019๋ ๊น์ง Visual Studio 2012์ฉ์ผ๋ก ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ์ด์งํ์ผ๊ณผ ํค๋ ํ์ผ์ ๊ฐ์ง๊ณ ์์ง๋ง, ์์ ์ฑ์ ์ํด ์์ค ์ฝ๋์์ GLFW๋ฅผ ์ง์ ์ปดํ์ผํ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ์ปดํ์ผํ๋ ๊ณผ์ ์ ๋ํ ๋๋์ ์ฃผ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
์์ค ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํด ๋ณด๊ฒ ์ต๋๋ค.
1
|
๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ 64๋นํธ ์ด์ง ํ์ผ๋ก ๋ง๋ค ์์ ์ด๋ฏ๋ก ์ฌ์ ์ปดํ์ผ๋ ์ด์ง ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ 64๋นํธ ์ด์ง ํ์ผ์
๊ฐ์ ธ์์ผํฉ๋๋ค. |
cs |
์์ค ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ ํ ์์ถ์ ํ๊ณ ๋ด์ฉ์ ์ฝ๋๋ค.
์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ํ๋ชฉ์๋ง ์ง์คํ ๊ฒ์ ๋๋ค.
- ์ปดํ์ผ์ ๊ฒฐ๊ณผ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- include ํด๋
์์ค ์ฝ๋์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ปดํ์ผํ๋ฉด ๊ฒฐ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ CPU/OS์ ์๋ฒฝํ๊ฒ ๋ง์ถคํ๋์ด ๊ณ ๊ธ ์ฌ์ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ๊ฐ ํญ์ ์ ๊ณต๋๋ ๊ฒ์ ์๋๋๋ค(์์คํ ์์ ์ฌ์ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๋ ์์).
๊ทธ๋ฌ๋ ์คํ ์๋์ ์์ค ์ฝ๋๋ฅผ ์ ๊ณตํ ๋์ ๋ฌธ์ ๋ ๋ชจ๋ ์ฌ๋์ด ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํด ๋์ผํ IDE ๋๋ ๋น๋ ์์คํ ์ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
์ฆ, ์ ๊ณต๋ ํ๋ก์ ํธ/์๋ฃจ์ ํ์ผ์ด ๋ค๋ฅธ ์ฌ์ฉ์์ ์ค์ ๊ณผ ํธํ๋์ง ์์ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฌ์ฉ์๋ ์ง์ ๋ .c .cpp ๋ฐ .h .hpp ํ์ผ์ ์ฌ์ฉํ์ฌ ์์ ๋ง์ ํ๋ก์ ํธ/์๋ฃจ์ ์ ์ค์ ํด์ผ ํฉ๋๋ค.
์ด๋ ๋ฒ๊ฑฐ๋ฌ์ด ์์ ์ ๋๋ค.
๋ฐ๋ก ์ด๋ฌํ ์ด์ ๋ก Cmake๋ผ๋ ๋๊ตฌ๊ฐ ์์ต๋๋ค.
CMake
CMake๋ ๋ฏธ๋ฆฌ ์ ์๋ CMake ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋ ํ์ผ ๋ชจ์์์ ์ฌ์ฉ์๊ฐ ์ ํํ ํ๋ก์ ํธ/์๋ฃจ์ ํ์ผ(์: Visual Studio, ์ฝ๋::๋ธ๋ญ, Eclipse)์ ์์ฑํ ์ ์๋ ๋๊ตฌ์ ๋๋ค.
์ด๋ฅผ ํตํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ปดํ์ผํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ GLFW์ ์์ค ํจํค์ง์์ Visual Studio 2019 ํ๋ก์ ํธ ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค.
๋จผ์ ๋ค์ด๋ก๋ ํ์ด์ง์์ ๋ค์ด๋ก๋ํ ์ ์๋ CMake๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ์ค์นํด์ผ ํฉ๋๋ค.
CMake๊ฐ ์ค์น๋๋ฉด ๋ช ๋ น์ค ๋๋ GUI๋ฅผ ํตํด CMake๋ฅผ ์คํํ๋๋ก ์ ํํ ์ ์์ต๋๋ค.
๋๋ฌด ๋ณต์กํ์ง ์๊ธฐ ๋๋ฌธ์ GUI๋ฅผ ์ฌ์ฉํ ์์ ์ ๋๋ค.
CMake์๋ ์ด์ง ํ์ผ์ ๋ํ ์์ค ์ฝ๋ ํด๋์ ๋์ ํด๋๊ฐ ํ์ํฉ๋๋ค.
์์ค ์ฝ๋ ํด๋์ ๊ฒฝ์ฐ ๋ค์ด๋ก๋ํ GLFW ์์ค ํจํค์ง์ ๋ฃจํธ ํด๋๋ฅผ ์ ํํ๊ณ ๋น๋ ํด๋์ ๊ฒฝ์ฐ ์ ๋๋ ํ ๋ฆฌ ๋น๋๋ฅผ ๋ง๋ ๋ค์ ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ์ ํํฉ๋๋ค.
์์ค ๋ฐ ๋์ ํด๋๋ฅผ ์ค์ ํ์ผ๋ฉด ๊ตฌ์ฑ ๋จ์ถ๋ฅผ ํด๋ฆญํ์ฌ CMake๊ฐ ํ์ํ ์ค์ ๊ณผ ์์ค ์ฝ๋๋ฅผ ์ฝ์ ์ ์๋๋ก ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ํ๋ก์ ํธ์ ์์ฑ์๋ฅผ ์ ํํด์ผ ํ๋ฉฐ Visual Studio 2019๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Visual Studio 16 ์ต์ ์ ์ ํํฉ๋๋ค(Visual Studio 2019๋ Visual Studio 16์ผ๋ก๋ ์๋ ค์ ธ ์์ต๋๋ค).
๊ทธ๋ฐ ๋ค์ CMake๋ ๊ฒฐ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ๊ฐ๋ฅํ ๋น๋ ์ต์ ์ ํ์ํฉ๋๋ค. ์ค์ ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ์งํ๊ณ ๊ตฌ์ฑ์ ๋ค์ ํด๋ฆญํ์ฌ ์ค์ ์ ์ ์ฅํ ์ ์์ต๋๋ค.
์ ํ ์ด ์ค์ ๋๋ฉด ์์ฑ์ ํด๋ฆญํ๋ฉด ๊ฒฐ๊ณผ ํ๋ก์ ํธ ํ์ผ์ด ๋น๋ ํด๋์ ์์ฑ๋ฉ๋๋ค.
Compilation(๋ชจ์์ง)
๋น๋ ํด๋์์ GLFW.sin ํ์ผ์ ์ฐพ์ ์ ์์ผ๋ฉฐ Visual Studio 2019์์ ์ฝ๋๋ค.
CMake๋ ์ด๋ฏธ ์ ์ ํ ๊ตฌ์ฑ ์ค์ ์ด ํฌํจ๋ ํ๋ก์ ํธ ํ์ผ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์๋ฃจ์ ์ ๊ตฌ์ถํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
CMake๋ 64๋นํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ปดํ์ผํ ์ ์๋๋ก ์๋ฃจ์ ์ ์๋์ผ๋ก ๊ตฌ์ฑํ์ด์ผ ํฉ๋๋ค.
์ด์ ๋น๋ ์๋ฃจ์ ์ ์ ํํ์ญ์์ค.
์ด๋ ๊ฒ ํ๋ฉด glfw3.lib๋ผ๋ ์ด๋ฆ์ build/src/debug ์์ ์ฐพ์ ์ ์๋ ์ปดํ์ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ด ์ ๊ณต๋ฉ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ ํ์๋ IDE๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ OpenGL ํ๋ก๊ทธ๋จ์ ํฌํจ ํ์ผ์ ์ฐพ์ ์ ์๋ ์์น๋ฅผ ์๊ณ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
์ด ์์ ์๋ ๋ ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค:
- IDE/์ปดํ์ผ๋ฌ์์ /lib ์ /include ํด๋๋ฅผ ์ฐพ์์ GLFW์ include ํด๋์ ๋ด์ฉ์ IDE์ /include ํด๋์ ์ถ๊ฐํ๊ณ ๋ง์ฐฌ๊ฐ์ง๋ก glfw3.lib๋ฅผ IDE์ /lib ํด๋์ ์ถ๊ฐํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํจ๊ณผ๊ฐ ์์ง๋ง ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ์๋๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ์ ํ๊ณ ํ์ผ์ ํฌํจํ๋ ๊ฒ์ ์ด๋ ต๊ณ IDE/์ปดํ์ผ๋ฌ๋ฅผ ์๋ก ์ค์นํ๋ฉด ์ด ํ๋ก์ธ์ค๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ์ํํด์ผ ํฉ๋๋ค.
- ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ IDE/compiler ์์ ์ฐธ์กฐํ ์ ์๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋ header files/libraries๋ฅผ ํฌํจํ๋ ๋๋ ํฐ๋ฆฌ ์ธํธ๋ฅผ ์ํ๋ ์์น์ ์๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด OpenGL ํ๋ก์ ํธ์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํค๋ ํ์ผ์ ๊ฐ๊ฐ ์ ์ฅํ๋ Libs ๋ฐ Include ํด๋๊ฐ ํฌํจ๋ ๋จ์ผ ํด๋๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด์ ๋ชจ๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋จ์ผ ์์น(์ฌ๋ฌ ์ปดํจํฐ์์ ๊ณต์ ํ ์ ์์) ๋ด์ ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋๋ง๋ค IDE์ ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐพ์ ์ ์๋ ์์น๋ฅผ ์๋ ค์ค์ผ ํฉ๋๋ค.
ํ์ํ ํ์ผ์ด ์ํ๋ ์์น์ ์ ์ฅ๋๋ฉด ์ฒซ ๋ฒ์งธ OpenGL GLFW ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ์ ์ฒซ๋ฒ์งธ ํ๋ก์ ํธ
๋จผ์ Visual Studio๋ฅผ ์ด๊ณ ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๋ฌ ์ต์ ์ด ์ง์ ๋ ๊ฒฝ์ฐ C++๋ฅผ ์ ํํ๊ณ ๋น ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค(ํ๋ก์ ํธ์ ์ ํฉํ ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค). 64๋นํธ๋ก ๋ชจ๋ ์์ ์ ์ํํ ์์ ์ด๋ฉฐ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ๊ฐ์ 32๋นํธ์ด๋ฏ๋ก ์๋จ์ ๋๋ฒ๊ทธ ์์ ์๋ ๋๋กญ๋ค์ด์ x86์์ x64๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
์ด ์์ ์ด ์๋ฃ๋๋ฉด ์ต์ด์ OpenGL ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋ ์์ ๊ณต๊ฐ์ ํ๋ณดํ ์ ์์ต๋๋ค!
๋งํน
ํ๋ก์ ํธ๊ฐ GLFW๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๋ฆฌ์ ํ๋ก์ ํธ๋ฅผ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ์ด๋ ๋ง์ปค ์ค์ ์์ glfw3.lib๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ง์ ํจ์ผ๋ก์จ ์ํํ ์ ์์ง๋ง, ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ glfw3.lib๋ฅผ ์ด๋์ ์ฐพ์ ์ ์๋์ง ์์ง ๋ชจ๋ฆ ๋๋ค. ๋ฐ๋ผ์ ๋จผ์ ์ด ๋๋ ํ ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
IDE๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ๊ณ ํ์ผ์ ํฌํจํด์ผ ํ ๋ ์ด ๋๋ ํ ๋ฆฌ๋ฅผ ๊ณ ๋ คํ๋๋ก ์ง์ํ ์ ์์ต๋๋ค. ์๋ฃจ์ ํ์๊ธฐ์์ ํ๋ก์ ํธ ์ด๋ฆ์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ผ๋ก ํด๋ฆญํ ๋ค์ ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด VC++ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ฌ์ฉ์ ์์ ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐํ์ฌ ํ๋ก์ ํธ๊ฐ ๊ฒ์ํ ์์น๋ฅผ ์ ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ํ ์คํธ์ ์๋์ผ๋ก ์ฝ์ ํ๊ฑฐ๋ ์ ์ ํ ์์น ๋ฌธ์์ด์ ํด๋ฆญํ๊ณ <ํธ์ง> ์ต์ ์ ์ ํํ๋ฉด ๋ฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ ๋ฆฌ์ ํฌํจ ๋๋ ํ ๋ฆฌ ๋ชจ๋์ ๋ํด ์ด ์์ ์ ์ํํฉ๋๋ค.
์ฌ๊ธฐ์ ์ํ๋ ๋งํผ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, ์ด๋๋ถํฐ IDE๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํค๋ ํ์ผ์ ๊ฒ์ํ ๋ ํด๋น ๋๋ ํฐ๋ฆฌ๋ ๊ฒ์ํฉ๋๋ค. GLFW์ Include ํด๋๊ฐ ํฌํจ๋๋ ์ฆ์ <GLFW/..>๋ฅผ ํฌํจํ์ฌ GLFW์ ๋ชจ๋ ํค๋ ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ ๋ฆฌ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
VS๊ฐ ์ด์ ํ์ํ ๋ชจ๋ ํ์ผ์ ์ฐพ์ ์ ์์ผ๋ฏ๋ก Linker ํญ์ผ๋ก ์ด๋ํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ฉด GLFW๋ฅผ ํ๋ก์ ํธ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๋ง์ปค์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ด glfw3.lib์ด๋ฏ๋ก ์ด๋ฅผ Additional Dependencies ํ๋์ ์ถ๊ฐํฉ๋๋ค(์๋ ๋๋ <Edit> ์ต์ ์ฌ์ฉ) ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ๋ถํฐ ์ฐ๋ฆฌ๊ฐ ์ปดํ์ผํ ๋ GLFW๊ฐ ์ฐ๊ฒฐ๋ ๊ฒ์ ๋๋ค. GLFW ์ธ์๋ OpenGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋งํฌ ํญ๋ชฉ์ ์ถ๊ฐํด์ผ ํ์ง๋ง ์ด์ ์ฒด์ ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
Windows์์์ OpenGL
Windows์์ OpenGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ opengl32.lib๋ Visual Studio๋ฅผ ์ค์นํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์นํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋๋ Microsoft SDK์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ์ด ์ฅ์์๋ VS ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ฐ์ ์์ผ๋ฏ๋ก ๋ง์ปค ์ค์ ์ opengl32.lib๋ฅผ ์ถ๊ฐํฉ๋๋ค. OpenGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ 64๋นํธ ๋ฑ๊ฐ๋ 32๋นํธ ๋ฑ๊ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก opengl32.lib๋ผ๊ณ ํฉ๋๋ค.
Linux์์์ OpenGL
Linux ์์คํ ์์๋ ๋ง์ปค ์ค์ ์ -IGL์ ์ถ๊ฐํ์ฌ libGL.so ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ Mesa, NVidia ๋๋ AMD dev ํจํค์ง๋ฅผ ์ค์นํด์ผ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ GLFW ๋ฐ OpenGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชจ๋ ๋ง์ปค ์ค์ ์ ์ถ๊ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด GLFW์ ํค๋ ํ์ผ์ ํฌํจ ํ ์ ์์ต๋๋ค.
1
|
#include <GLFW/glfw3.h>
|
cs |
1
|
GCC๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผํ๋ Linux ์ฌ์ฉ์์ ๊ฒฝ์ฐ ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช
๋ น์ค ์ต์
์
lglfw3 -IGL -IX11 -lpthread -IXr -IXi -ldl์ ๋๋ค. ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐํ์ง ์์ผ๋ฉด ์ ์๋์ง ์์ ์ฐธ์กฐ ์ค๋ฅ๊ฐ ๋ง์ด ๋ฐ์ํฉ๋๋ค. |
cs |
์ด๊ฒ์ผ๋ก GLFW์ ์ค์ ๋ฐ ๊ตฌ์ฑ์ด ์๋ฃ๋์์ต๋๋ค.
GLAD
์์ง ํ ๊ฐ์ง ๋ ํด์ผ ํ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ ์์ง ๊ฑฐ๊ธฐ๊น์ง๋ ์ด๋ฅด์ง ๋ชปํ์ต๋๋ค. OpenGL์ ์ค์ ๋ก ํ์ค/์ฌ์์ ๋ถ๊ณผํ๋ฏ๋ก ํน์ ๊ทธ๋ํฝ ์นด๋๊ฐ ์ง์ํ๋ ๋๋ผ์ด๋ฒ์ ์ด ์ฌ์์ ๊ตฌํํ๋ ๊ฒ์ ๋๋ผ์ด๋ฒ ์ ์กฐ์ ์ฒด์ ๋ฌ๋ ค ์์ต๋๋ค. ๋ค์ํ ๋ฒ์ ์ OpenGL ๋๋ผ์ด๋ฒ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ ์์น๋ฅผ ์ ์ ์์ผ๋ฉฐ ๋ฐํ์์ ์ฟผ๋ฆฌํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ์ํ ๊ธฐ๋ฅ์ ์์น๋ฅผ ๊ฒ์ํ์ฌ ๋์ค์ ์ฌ์ฉํ ์ ์๋๋ก ๊ธฐ๋ฅ ํฌ์ธํฐ์ ์ ์ฅํ๋ ๊ฒ์ด ๊ฐ๋ฐ์์ ์์ ์ ๋๋ค. ์ด๋ฌํ ์์น ๊ฒ์์ OS๋ณ๋ก ๋ค๋ฆ ๋๋ค. Windows์์๋ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
1
2
3
4
5
6
7
|
// define the function's prototype
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// find the function and assign it to a function pointer
GL_GENBUFFERS glGenBuffers = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// function can now be called as normal
unsigned int buffer;
glGenBuffers(1, &buffer);
|
cs |
์ฝ๋๊ฐ ๋ณต์กํด ๋ณด์ด๊ณ ์์ง ์ ์ธ๋์ง ์์ ๊ฐ ๊ธฐ๋ฅ์ ๋ํด ์ด๋ฅผ ์ํํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋ฌ์ด ํ๋ก์ธ์ค์ ๋๋ค. ๊ฐ์ฌํ๊ฒ๋, GLAD์ ๊ฐ์ด ์ธ๊ธฐ ์๊ณ ์ต์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์์ต๋๋ค.
GLAD ์ค์ ํ๊ธฐ
GLAD๋ ์ฐ๋ฆฌ๊ฐ ์ด์ผ๊ธฐํ ๋ชจ๋ ๋ฒ๊ฑฐ๋ฌ์ด ์์ ์ ๊ด๋ฆฌํ๋ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. GLAD๋ ๋๋ถ๋ถ์ ์ผ๋ฐ์ ์ธ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ ์ค์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. GLAD๋ ์ด๋ค ๋ฒ์ ์ OpenGL์ ๋ํด ํด๋น ๋ฒ์ ์ ๋ฐ๋ผ ๋ชจ๋ ๊ด๋ จ OpenGL ๊ธฐ๋ฅ์ ์ ์ํ๊ณ ๋ก๋ํ ๊ฒ์ธ์ง๋ฅผ GLAD์ ์๋ ค์ค ์ ์๋ ์น ์๋น์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
GLAD ์น ์๋น์ค๋ก ์ด๋ํ์ฌ ์ธ์ด๊ฐ C++๋ก ์ค์ ๋์ด ์๋์ง ํ์ธํ๊ณ API ์น์ ์์ 3.3์ด์์ OpenGL ๋ฒ์ ์ ์ ํํฉ๋๋ค. ๋ํ ํ๋กํ์ผ์ด Core๋ก ์ค์ ๋์ด ์๊ณ Generate a loader ์ต์ ์ด ์ ํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
ํ์ฅ๋ช ์ ๋ฌด์ํ๊ณ ์์ฑ์ ํด๋ฆญํ์ฌ ๊ฒฐ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ์์ฑํฉ๋๋ค.
์ง๊ธ์ฏค GLAD๋ ๋ ๊ฐ์ ํฌํจ ํด๋๊ฐ ํฌํจ๋ zip ํ์ผ๊ณผ ํ๋์ glad.c ํ์ผ์ ์ ๊ณตํ์ด์ผ ํฉ๋๋ค. ํฌํจ ํด๋(glad ๋ฐ KHR)๋ฅผ ๋ชจ๋ ํฌํจ ๋๋ ํฐ๋ฆฌ์ ๋ณต์ฌํ๊ณ (๋๋ ์ด ํด๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค) glad.c ํ์ผ์ ํ๋ก์ ํธ์ ์ถ๊ฐํฉ๋๋ค.
์ด์ ๋จ๊ณ๋ฅผ ์ํํ ํ์๋ ํ์ผ ์์ ๋ค์ ํฌํจ ์ง์๋ฌธ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
1
|
#include <glad/glad.h>
|
cs |
์ปดํ์ผ ๋ฒํผ์ ๋๋ฌ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฏ๋ก ๋ค์ ์ฅ์์ GLFW์ GLAD๋ฅผ ์ฌ์ฉํ์ฌ OpenGL ์ปจํ ์คํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ์ฐฝ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค. ํฌํจ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ ๋ฆฌ๊ฐ ๋ชจ๋ ์ฌ๋ฐ๋ฅด๊ณ ๋ง์ปค ์ค์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ์นํ๋์ง ํ์ธํ์ญ์์ค.
'๊ณต๋ถ > LearnOpenGL ๋ฒ์ญ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฒ์ญ] LearnOpenGL 1.์์ํ๊ธฐ - OpenGL์ ๋ํด์ (0) | 2023.01.09 |
---|---|
[๋ฒ์ญ] LearnOpenGL - ์๊ฐ (0) | 2023.01.08 |