1 Getting started 2 Creating a window - JJhuk/LearnOpenGL GitHub Wiki
url: https://learnopengl.com/Getting-started/Creating-a-window ์์ฑ์ผ: 2020๋ 12์ 20์ผ ์คํ 7:27
๋ฉ์ง ๊ทธ๋ํฝ์ ๋ง๋ค๊ธฐ ์ ์ ๋จผ์ ํด์ผํ ์ผ์ OpenGL ์ปจํ ์คํธ์ ๊ทธ๋ฆด ์์ฉํ๋ก๊ทธ๋จ ์ฐฝ์ ๋ง๋๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์์ ์ ์ด์์ฒด์ ๋ณ๋ก ๋ค๋ฅด๋ฉฐ OpenGL์ ์๋์ ์ผ๋ก ์ด๋ฌํ ์์ ์ ์์ฒด ์ถ์ํํ๋ ค๊ณ ํฉ๋๋ค. ์ฆ, ์ฐฝ์ ๋ง๋ค๊ณ ์ปจํ ์คํธ๋ฅผ ์ ์ํ๊ณ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ชจ๋ ์ง์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
๋คํ์ด๋ ์ฐ๋ฆฌ๊ฐ ์ถ๊ตฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ฝค ๋ง์ด ์์ต๋๋ค. ์ผ๋ถ๋ OpenGL ์ ์ฉ์ด๊ธฐ๋ ํฉ๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ผใ ฃ๋ ์ฐ๋ฆฌ์๊ฒ ๋ชจ๋ ์ด์ ์ฒด์ ๋ณ ์์ ์ ์ ์ฅํ๊ณ ๋ ๋๋ง ํ ์ฐฝ๊ณผ OpenGL ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ ๋ง์ด ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ์ผ๋ถ๋ GLUT, SDL, SFML ๋ฐ GLFW์ ๋๋ค. LearnOpenGL์์๋ GLFW ๋ฅผ ์ฌ์ฉ ํ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ์ธ์. ๋๋ถ๋ถ์ ์ค์ ์ GLFW์ ์ค์ ๊ณผ ์ ์ฌํฉ๋๋ค.
GLFW๋ ํนํ OpenGL์ ๋์์ผ๋ก ํ๋ C๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. GLFW๋ ํ๋ฉด์ ์ค๋ธ์ ํธ๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ํ์ํ๋ค์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด OpenGL ์ปจํ ์คํธ๋ฅผ ๋ง๋ค๊ณ , ์ฐฝ ๋งค๊ฐ ๋ณ์๋ฅผ ์ ์ํ๊ณ , ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌ ํ ์ ์์ต๋๋ค.
์ด ์ฅ๊ณผ ๋ค์ ์ฅ์ ์ด์ ์ GLFW๋ฅผ ์์ํ๊ณ ์คํํ๋ ๊ฒ์ ๋๋ค. GLFW๊ฐ OpenGL ์ปจํ ์คํธ๋ฅผ ์ ์ ํ๊ฒ ์์ฑํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋จํ ์ฐฝ์ ํ์ํ๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ์ด ์ฅ์์๋ GLFW ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒ์, ๊ตฌ์ถ ๋ฐ ์ฐ๊ฒฐํ๋ ๋จ๊ณ๋ณ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค. ์ด ๋ฌธ์์์๋ MIcrosoft Visual Studio 2019 IDE๋ฅผ ์ฌ์ฉํฉ๋๋ค (๋ ์ต์ Visual Studio ๋ฒ์ ์์๋ ํ๋ก์ธ์ค๊ฐ ๋์ผํจ) Visual Studio(๋๋ ์ด์ ๋ฒ์ )๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค. ์ด ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ๋๋ถ๋ถ์ IDE์์๋ ์ ์ฌํฉ๋๋ค.
GLFW๋ ํด๋น ์น ํ์ด์ง์์ ๋ค์ด๋ก๋ ํ ์ ์์ต๋๋ค. GLFW๋ ์ด๋ฏธ ๋น์ฃผ์ผ ์คํ๋์ค 2012๋ถํฐ 2019๊น์ง ์ฌ์ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ์ ํค๋ ํ์ผ์ ๊ฐ์ง๊ณ ์์ง๋ง, ์์ ์ฑ์ ์ํด ์์ค ์ฝ๋์์ GFLW๋ฅผ ์ง์ ์ปดํ์ผ ํ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ์ค์ค๋ก ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ปดํ์ผํ ๊ณผ์ ์ ๋ํด ๋ฐฐ์ธ ์ ์์ต๋๋ค. ๊ทธ๋ผ Source package ๋ฅผ ๋ค์ด๋ก๋ ํ๊ฒ ์ต๋๋ค.
๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ 64bit ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ๊ตฌ์ถํ๋ฏ๋ก ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ 64๋นํธ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
์๋ณธ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ ํ์ผ๋ฉด ์์ถ์ ํ๊ณ ์ด์ด์ฃผ์ธ์. ๋ช ๊ฐ์ง ํญ๋ชฉ๋ง ๋ณผ ๊ฒ์ ๋๋ค.
- ์ปดํ์ผ ๊ฒฐ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- include ํด๋
์์ค ์ฝ๋์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ปดํ์ผํ๋ฉด ๊ฒฐ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ CPU/OS์ ์๋ฒฝํ ์๋ง๊ฒ ์กฐ์ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํญ์ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ๋ค์ด ํญ์ ์ ๊ณต๋๋ ๊ฒ์ ์๋๋๋ค.(๋๋ก๋ ์ฌ์ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์คํ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.) ๊ทธ๋ฌ๋ ์คํ์๋์์ ์์ค ์ฝ๋๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์์ด์ ๋ฌธ์ ๋ ๋ชจ๋ ์ฌ๋๋ค์ด ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํด ๋์ผํ IDE ๋๋ ๋น๋ ์์คํ ์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋ฉฐ, ์ด๋ ์ ๊ณต๋ ํ๋ก์ ํธ/์๋ฃจ์ ํ์ผ์ด ๋ค๋ฅธ ์ฌ๋์ ์ค์ ๊ณผ ํธํ๋์ง ์์ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ๋๋ค์ ์ฃผ์ด์ง .c/.cpp ๋ฐ .h/.hpp ํ์ผ์ ์ฌ์ฉํ์ฌ ์์ ๋ง์ ํ๋ก์ ํธ/์๋ฃจ์ ์ ์ค์ ํด์ผ ํฉ๋๋ค. ์ด๋ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด๋ฉฐ, ์ด๋ฌํ ์ด์ ๋ก CMake๋ผ๋ ๋๊ตฌ๊ฐ ์์ต๋๋ค.
CMake๋ ๋ฏธ๋ฆฌ ์ ์๋ CMake ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋ ํ์ผ ๋ชจ์์์ ์ฌ์ฉ์๊ฐ ์ ํํ ํ๋ก์ ํธ/์๋ฃจ์ ํ์ผ์ ์์ฑํ ์ ์๋ ๋๊ตฌ์ ๋๋ค.(์: Visual Studio, Code::Blocks, Eclipse) ์ด๋ฅผ ํตํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ปดํ์ผํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ GLFW์ ์์ค ํจํค์ง์์ Visual Studio 2019 ํ๋ก์ ํธ ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค. ๋จผ์ CMake๋ฅผ ๋ค์ด๋ก๋ ํด์ ์ค์นํด์ผ ํฉ๋๋ค. CMake๋ ๋ค์ด๋ก๋ ํ์ด์ง์์ ๋ค์ด๋ก๋ ํ ์ ์์ต๋๋ค.
CMake๊ฐ ์ค์น๋๋ฉด ๋ช ๋ น์ค ๋๋ GUI๋ฅผ ํตํด CMake๋ฅผ ์คํํ๋๋ก ์ ํํ ์ ์์ต๋๋ค. ๋๋ฌด ๋ณต์กํ์ง ์๊ธฐ ๋๋ฌธ์ GUI๋ฅผ ์ฌ์ฉํฉ๋๋ค. CMake์๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์ ์ฅํ ์์ค ์ฝ๋ ํด๋์ ๋์ ํด๋๊ฐ ํ์ํฉ๋๋ค. ์์ค ์ฝ๋ ํด๋์ ๊ฒฝ์ฐ ๋ค์ด๋ก๋ํ GFLW ์๋ณธ ํจํค์ง์ ๋ฃจํธ ํด๋๋ฅผ ์ ํํ๊ณ ๋น๋ ํด๋์ ๊ฒฝ์ฐ ์ ๋๋ ํ ๋ฆฌ build ๋ฅผ ์์ฑํ ๋ค์ ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ์ ํํฉ๋๋ค.
์์ค์ ๋์ ํด๋๊ฐ ์ค์ ๋๋ฉด CMake๊ฐ ํ์ํ ์ค์ ๊ณผ ์์ค ์ฝ๋๋ฅผ ์ฝ์ ์ ์๋๋ก Configure
๋ฒํผ์ ํด๋ฆญํด์ฃผ์ธ์. ๊ทธ๋ฐ ๋ค์ ํ๋ก์ ํธ์ ์์ฑ๊ธฐ๋ฅผ ์ ํํด์ผ ํ๋ฉฐ Visual Studio 2019๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก Visual Studio 16
์ต์
์ ์ ํํฉ๋๋ค. (Visual Studio 2019๋ Visual studio 16์ด๋ผ๊ณ ๋ ํจ.) ๊ทธ๋ฌ๋ฉด CMake๋ ๊ฒฐ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ๊ฐ๋ฅํ ๋น๋ ์ต์
์ ํ์ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ๊ทธ๋๋ก ๋๊ณ Configure
๋ฅผ ๋ค์ ํด๋ฆญํ์ฌ ์ค์ ์ ์ ์ฅํ ์ ์์ต๋๋ค. ์ค์ ์ด ์๋ฃ๋๋ฉด Generate
๋ฅผ ํด๋ฆญํ๋ฉด ๊ฒฐ๊ณผ ํ๋ก์ ํธ ํ์ผ์ด build
ํด๋์ ์์ฑ๋ฉ๋๋ค.
์ด์ build
ํด๋์์ GLFW.sln
ํ์ผ์ ์ฐพ์ ์ ์์ผ๋ฉฐ 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/์ปดํ์ผ๋ฌ์์ ์ฐธ์กฐ ํ ์ ์๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋ ํค๋ ํ์ผ/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๋ ์ ํํ ์์น์ ์ ๋๋ ํฐ๋ฆฌ ์งํฉ์ ๋ง๋๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด, OpenGL ํ๋ก์ ํธ์ ๋ํ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํค๋ ํ์ผ์ ๊ฐ๊ฐ ์ ์ฅํ๋
Lib
๋ฐinclude
ํด๋๋ฅผ ํฌํจํ๋ ๋จ์ผ ํด๋๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด์ ๋ชจ๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋จ์ผ ์์น (์ฌ๋ฌ ์ปดํจํฐ์์ ๊ณต์ ๋ ์ ์์) ๋ด์ ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์๊ตฌ ์ฌํญ์ ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๋๋ง๋ค ํด๋น ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฐพ์ ์์น๋ฅผ IDE์ ์๋ ค์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
์ํ๋ ์์น์ ํ์ํ ํ์ผ์ด ์ ์ฅ๋๋ฉด ์ฒซ ๋ฒ์งธ OpenGL GLFW ํ๋ก์ ํธ๋ฅผ ์์ฑ์ ์์ํ ์ ์์ต๋๋ค.
๋จผ์ Visual Studio๋ฅผ ์ด๊ณ ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค. ์ฌ๋ฌ ์ต์
์ด ์ฃผ์ด์ง๋ฉด C++๋ฅผ ์ ํํ๊ณ ๋น ํ๋ก์ ํธ
๋ฅผ ์ ํํ์ธ์.(ํ๋ก์ ํธ์ ์ ์ ํ ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค). 64 ๋นํธ์์ ๋ชจ๋ ์์
์ ์ํํ๊ณ ํ๋ก์ ํธ ๊ธฐ๋ณธ ๊ฐ์ 32๋นํธ์ด๋ฏ๋ก ๋๋ฒ๊ทธ ์ ์๋จ์ ์๋ ๋๋กญ ๋ค์ด์ x86์ x64๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
์ด ์์ ์ด ์๋ฃ๋๋ฉด ์ด์ ์ฒซ ๋ฒ์งธ OpenGL ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์๋ ์์ ๊ณต๊ฐ์ด ์๊ฒผ์ต๋๋ค.
ํ๋ก์ ํธ์์ GLFW๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ๋ง์ปค ์ค์ ์์ glfw3.lib
๋ฅผ ์ฌ์ฉํ๋๋ก ์ง์ ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ glfw3.lib
๋ฅผ ์ฐพ์ ์์น๋ฅผ ์์ง ์์ง ๋ชปํฉ๋๋ค. ๋ฐ๋ผ์ ๋จผ์ ์ด ๋๋ ํ ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
IDE๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ๊ณ ํ์ผ์ ํฌํจํด์ผ ํ ๋ ์ด ๋๋ ํ ๋ฆฌ๋ฅผ ๊ณ ๋ คํ๋๋ก ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฃจ์
ํ์๊ธฐ์์ ํ๋ก์ ํธ ์ด๋ฆ์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญ ํ ๋ค์ ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด VC++ ๋๋ ํฐ๋ฆฌ
๋ก ์ด๋ํฉ๋๋ค.
๊ฑฐ๊ธฐ์์ ํ๋ก์ ํธ์ ๊ฒ์ ํ ์์น๋ฅผ ์๋ฆฌ๊ธฐ ์ํด ์์ ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. ์ด ์์
์ ํ
์คํธ์ ์๋์ผ๋ก ์ฝ์
ํ๊ฑฐ๋ ์ ์ ํ ์์น ๋ฌธ์์ด์ ํด๋ฆญํ๊ณ <Edit...>
์ต์
์ ์ ํํ์ฌ ์ํ ํ ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ ๋ฆฌ
๋ฐ ํฌํจ ๋๋ ํ ๋ฆฌ
๋ชจ๋์ ๋ํด ๋ค์์ ์ํํ์ญ์์ค
์ฌ๊ธฐ์์ ์ํ๋ ๋งํผ์ ์ถ๊ฐ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐ ํ ์ ์์ผ๋ฉฐ IDE์ ๊ทธ ์ง์ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํค๋ ํ์ผ์ ๊ฒ์ ํ ๋ ํด๋น ๋๋ ํ ๋ฆฌ๋ ๊ฒ์ํฉ๋๋ค. GLFW์ include
ํด๋๊ฐ ํฌํจ๋๋ฉด <GLFW/..>
๋ฅผ ํฌํจํ์ฌ GLFW์ ๋ชจ๋ ํค๋ ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ ๋ฆฌ์๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค.
์ด์ VS๊ฐ ํ์ํ ๋ชจ๋ ํ์ผ์ ์ฐพ์ ์ ์์ผ๋ฏ๋ก ๋ง์นจ๋ด Linker
ํญ๊ณผ Input
์ผ๋ก ์ด๋ํ์ฌ GLFW๋ฅผ ํ๋ก์ ํธ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๋ง์ปค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ด glfw3.lib ์ด๋ฏ๋ก ์ถ๊ฐ ์ข
์์ฑ ํ๋์ ์ถ๊ฐ ํ๊ณ (์๋์ผ๋ก ๋๋ <Edit..>
์ต์
์ ์ฌ์ฉํ์ฌ) ๊ทธ ์์ ๋ถํฐ ์ปดํ์ผ ํ ๋ GLFW์ ๋งํฌ๊ฐ ์ฐ๊ฒฐ๋ฉ๋๋ค. GLFW์ธ์๋ OpenGL ๋ผ์ด๋ธ๋ฌ๋ ๋งํฌ ํญ๋ณต์ ์ถ๊ฐํด์ผํ์ง๋ง ์ด๋ ์ด์ ์ฒด์ ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
Windows๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ OpenGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ opengl32.lib
๋ Visual Studio๋ฅผ ์ค์นํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋๋ Micorosoft SDK์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ์ด ์ฅ์ VS ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๊ณ Windows์ ์์ผ๋ฏ๋ก ๋ง์ปค ์ค์ ์ opengl32.lib
๋ฅผ ์ถ๊ฐํฉ๋๋ค. OpenGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋นํ๋ 64๋นํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ 32๋นํธ์ ํด๋นํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก opengl32.lib
๋ผ๊ณ ํฉ๋๋ค. ์ฝ๊ฐ ๋ถํํ ์ด๋ฆ์
๋๋ค.
Linux ์์คํ
์๋ ๋ง์ปค ์ค์ ์ -lGL
์ ์ถ๊ฐํ์ฌ [libGL.so](http://libgl.so)
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋งํฌํด์ผ ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ ์ ์๋ค๋ฉด Mesa, Nvidia ๋๋ AMD dev ํจํค์ง๋ฅผ ์ค์นํด์ผ ํ ๊ฒ์
๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ง์ปค ์ค์ ์ GLFW ๋ฐ OpenGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชจ๋ ์ถ๊ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด GLFW ์ฉ ํค๋ ํ์ผ์ ํฌํจ ํ ์ ์์ต๋๋ค.
#include <GLFW\glfw3.h>
GCC๋ก ์ปดํ์ผํ๋ Linux ์ฌ์ฉ์์ ๊ฒฝ์ฐ ๋ค์ ๋ช
๋ น ์ค ์ต์
์ด ํ๋ก์ ํธ ์ปดํ์ผ์ ๋์์ด ๋ ์ ์์ต๋๋ค. -lglfw3 -lGL -lx11 -lpthread -lXrandr -lXi -ldl
. ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐํ์ง ์์ผ๋ฉด undefined reference ์ค๋ฅ๊ฐ ๋ง์ด ๋ฐ์ํฉ๋๋ค.
์ด๊ฒ์ผ๋ก GLFW์ ์ค์ ๋ฐ ๊ตฌ์ฑ์ ๋ง์นฉ๋๋ค.
์์ง ํด์ผํ ์ผ์ด ํ๋ ๋ ๋จ์ ์์ต๋๋ค. OpenGL์ ์ค์ ๋ก ํ์ค/์ฌ์์ผ ๋ฟ์ด๋ฏ๋ก ํน์ ๊ทธ๋ํฝ์นด๋๊ฐ ์ง์ํ๋ ๋๋ผ์ด๋ฒ์ ๋ํ ์ฌ์์ ๊ตฌํํ๋ ๊ฒ์ ๋๋ผ์ด๋ฒ ์ ์กฐ์ ์ฒด์ ๋ฌ๋ ค ์์ต๋๋ค. OpenGL ๋๋ผ์ด๋ฒ์๋ ์ฌ๋ฌ ๋ฒ์ ์ด ์์ผ๋ฏ๋ก ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์์น๋ ์ปดํ์ผ ์ ์ ์ ์์ผ๋ฏ๋ก ๋ฐํ์์ ์์์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ์ํ ๊ธฐ๋ฅ์ ์์น๋ฅผ ๊ฒ์ํ์ฌ ๋์ค์ ์ฌ์ฉํ ์ ์๋๋ก ํจ์ ํฌ์ธํฐ์ ์ ์ฅํ๋ ๊ฒ์ด ๊ฐ๋ฐ์์ ์์ ์ ๋๋ค. ์ด๋ฌํ ์์น ๊ฒ์์ OS๋ณ๋ก ๋ค๋ฆ ๋๋ค. Windows์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// ํจ์ ํ๋กํ ํ์
์ ์
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// ํจ์๋ฅผ ์ฐพ๊ณ ํจ์ ํฌ์ธํฐ์ ํ ๋นํฉ๋๋ค
GL_GENBUFFERS glGenBuffers = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// ํ์์ง์ ๊ฐ์ด ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
unsigned int buffer;
glGenBuffers(1, &buffer);
์ฝ๋๊ฐ ๋ณต์ก ํด ๋ณด์ด๊ณ ์์ง ์ ์ธ๋์ง ์์ ๊ฐ ๊ธฐ๋ฅ์ ๋ํด ์ด ์์ ์ ์ํํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋ก์ด ํ๋ก์ธ์ค์ ๋๋ค. ๊ฐ์ฌํ๊ฒ๋, ์ด๋ฌํ ๋ชฉ์ ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ผ๋ฉฐ, GLAD ๊ฐ ์ธ๊ธฐ ์๊ณ ์ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
GLAD๋ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ฐ๋ฆฌ๊ฐ ์ด์ผ๊ธฐํ ๋ชจ๋ ๋ฒ๊ฑฐ๋ก์ด ์์ ์ ๊ด๋ฆฌํฉ๋๋ค. GLAD์ ๊ตฌ์ฑ ์ค์ ์ ๋๋ถ๋ถ์ ์ผ๋ฐ์ ์ธ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค. GLAD๋ ์น ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ๋ฒ์ ์ OpenGL์ ๋ํด ์ ์ํ ์ง ์๋ ค์ฃผ๊ณ ํด๋น ๋ฒ์ ์ ๋ฐ๋ผ ๋ชจ๋ OpenGL ๊ด๋ จ ๊ธฐ๋ฅ์ ๋ก๋ํ ์ ์์ต๋๋ค.
GLAD ์น์๋น์ค์์ ์ธ์ด๊ฐ C++๋ก ์ค์ ๋์ด ์๋์ง ํ์ธํ๊ณ API์น์ ์์ 3.3์ด์์ OpenGL ๋ฒ์ ์ ์ ํํฉ๋๋ค.( ์ฌ์ฌ์ฉํ ๋ฒ์ ์ด๋ฉฐ, ๋์ ๋ฒ์ ๋ ๊ด์ฐฎ์ต๋๋ค.) ๋ํ ํ๋กํ์ด Core ๋ก ์ค์ ๋์ด์๊ณ Generate a loader ์ต์ ์ด ์ ํ๋์ด ์๋์ง ํ์ธํ์ญ์์ค. ํ์ฅ๋ช (์ผ๋จ)์ ๋ฌด์ํ๊ณ Generate ๋ฅผ ํด๋ฆญํ์ฌ ๊ฒฐ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ์์ฑํฉ๋๋ค.
์ง๊ธ์ฏค์ด๋ฉด GLAD๋ 2๊ฐ์ include ํด๋์ ํ๋์ glad.c
ํ์ผ์ด ๋ค์ด ์๋ zip ํ์ผ์ ์ ๊ณตํ ๊ป๋๋ค. include ํด๋(glad
์ KHR
) ๋ฅผ ๋ชจ๋ include (๋ํ ์ด ํด๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํญ๋ชฉ ์ถ๊ฐ)์ ๋ณต์ฌํ๊ณ glad.c
ํ์ผ์ ํ๋ก์ ํธ์ ์ถ๊ฐํฉ๋๋ค.
์ด์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น ํ ํ์ผ ์์ ๋ค์ include ์ง์๋ฌธ์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
#include <glad/glad.h>
์ปดํ์ผ ๋ฒํผ์ ๋๋ฌ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์์ผ ํฉ๋๋ค. ์ด ์์ ์์ GLFW ๋ฐ GLAD๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ์ฌ OpenGL ์ปจํ ์คํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ์ฐฝ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ผ์๋ ๋ค์์ฅ์ผ๋ก ๋ฏธ๋ฃจ๊ฒ ์ต๋๋ค. ๋ชจ๋ ์ธํด๋ฃจ๋ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ ๋ฆฌ๊ฐ ์ฌ๋ฐ๋ฅด๊ณ ๋ง์ปค ์ค์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ด ํด๋น ๋ผ์ด๋ธ ๋ฌ๋ฆฌ์ ์ผ์นํ๋์ง ํ์ธํ์ญ์์ค.
- GLFW: Window Guide: GLFW ์ฐฝ ์ค์ ๋ฐ ๊ตฌ์ฑ์ ๋ํ ๊ณต์ GLFW ๊ฐ์ด๋.
- Building applications: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปดํ์ผ / ๋งํฌ ํ๋ก์ธ์ค์ ๋ํ ์ ์ฉํ ์ ๋ณด์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ(ํด๊ฒฐ์ฑ ํฌํจ)์ ๊ด๋ฒ์ํ ๋ชฉ๋ก์ ์ ๊ณตํฉ๋๋ค.
- GLFW with Code::Blocks: Blocks IDE์์ GLFW๋ฅผ ๋น๋ํฉ๋๋ค.
- Running CMake: Windows์ Linux์์ CMake๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋ตํ ๊ฐ์์ ๋๋ค.
- Writing a build system under Linux: Linux์์ ๋น๋ ์์คํ ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ Wouter Verholst์ autotools ํํ ๋ฆฌ์ผ
- Polytonic/Glitter: ๋ชจ๋ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ๋ฏธ๋ฆฌ ๊ตฌ์ฑ๋ ๊ฐ๋จํ ์์ฉ๊ตฌ ํ๋ก์ ํธ. ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ์ปดํ์ผํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์ ์์ด ์ํ ํ๋ก์ ํธ๋ฅผ ์ํ ๊ฒฝ์ฐ ์ ์ฉํฉ๋๋ค.