1 Getting started 2 Creating a window - JJhuk/LearnOpenGL GitHub Wiki

LearnOpenGL - Creating a window

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

GLFW๋Š” ํŠนํžˆ OpenGL์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” C๋กœ ์ž‘์„ฑ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. GLFW๋Š” ํ™”๋ฉด์— ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ•„์ˆ˜ํ’ˆ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด OpenGL ์ปจํ…์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์ฐฝ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ , ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์žฅ๊ณผ ๋‹ค์Œ ์žฅ์˜ ์ดˆ์ ์€ GLFW๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. GLFW๊ฐ€ OpenGL ์ปจํ…์ŠคํŠธ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ฐ„๋‹จํ•œ ์ฐฝ์„ ํ‘œ์‹œํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์žฅ์—์„œ๋Š” GLFW ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰, ๊ตฌ์ถ• ๋ฐ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹จ๊ณ„๋ณ„ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ๋Š” MIcrosoft Visual Studio 2019 IDE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค (๋” ์ตœ์‹  Visual Studio ๋ฒ„์ „์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ผํ•จ) Visual Studio(๋˜๋Š” ์ด์ „ ๋ฒ„์ „)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ๋Œ€๋ถ€๋ถ„์˜ IDE์—์„œ๋„ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Building GLFW

GLFW๋Š” ํ•ด๋‹น ์›น ํŽ˜์ด์ง€์—์„œ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GLFW๋Š” ์ด๋ฏธ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค 2012๋ถ€ํ„ฐ 2019๊นŒ์ง€ ์‚ฌ์ „ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ํ—ค๋” ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ์™„์ „์„ฑ์„ ์œ„ํ•ด ์†Œ์Šค ์ฝ”๋“œ์—์„œ GFLW๋ฅผ ์ง์ ‘ ์ปดํŒŒ์ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šค์Šค๋กœ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํ•œ ๊ณผ์ •์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ Source package ๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ 64bit ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋กœ ๊ตฌ์ถ•ํ•˜๋ฏ€๋กœ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ 64๋น„ํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์›๋ณธ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ–ˆ์œผ๋ฉด ์••์ถ•์„ ํ’€๊ณ  ์—ด์–ด์ฃผ์„ธ์š”. ๋ช‡ ๊ฐ€์ง€ ํ•ญ๋ชฉ๋งŒ ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • include ํด๋”

์†Œ์Šค ์ฝ”๋“œ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด ๊ฒฐ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ CPU/OS์— ์™„๋ฒฝํžˆ ์•Œ๋งž๊ฒŒ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ญ์ƒ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋“ค์ด ํ•ญ์ƒ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.(๋•Œ๋กœ๋Š” ์‚ฌ์ „ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹œ์Šคํ…œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.) ๊ทธ๋Ÿฌ๋‚˜ ์˜คํ”ˆ์›”๋“œ์—์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ๋ฌธ์ œ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ž์‹ ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ IDE ๋˜๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ์ด๋Š” ์ œ๊ณต๋œ ํ”„๋กœ์ ํŠธ/์†”๋ฃจ์…˜ ํŒŒ์ผ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์„ค์ •๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ๋žŒ๋“ค์€ ์ฃผ์–ด์ง„ .c/.cpp ๋ฐ .h/.hpp ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ํ”„๋กœ์ ํŠธ/์†”๋ฃจ์…˜์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ์ผ์ด๋ฉฐ, ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ CMake๋ผ๋Š” ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

CMake

CMake๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ CMake ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ ๋ชจ์Œ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ํ”„๋กœ์ ํŠธ/์†”๋ฃจ์…˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.(์˜ˆ: Visual Studio, Code::Blocks, Eclipse) ์ด๋ฅผ ํ†ตํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GLFW์˜ ์†Œ์Šค ํŒจํ‚ค์ง€์—์„œ Visual Studio 2019 ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € CMake๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•ด์„œ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CMake๋Š” ๋‹ค์šด๋กœ๋“œ ํŽ˜์ด์ง€์—์„œ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CMake๊ฐ€ ์„ค์น˜๋˜๋ฉด ๋ช…๋ น์ค„ ๋˜๋Š” GUI๋ฅผ ํ†ตํ•ด CMake๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋ณต์žกํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— GUI๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. CMake์—๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์ €์žฅํ•  ์†Œ์Šค ์ฝ”๋“œ ํด๋”์™€ ๋Œ€์ƒ ํด๋”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ ํด๋”์˜ ๊ฒฝ์šฐ ๋‹ค์šด๋กœ๋“œํ•œ GFLW ์›๋ณธ ํŒจํ‚ค์ง€์˜ ๋ฃจํŠธ ํด๋”๋ฅผ ์„ ํƒํ•˜๊ณ  ๋นŒ๋“œ ํด๋”์˜ ๊ฒฝ์šฐ ์ƒˆ ๋””๋ ‰ํ† ๋ฆฌ build ๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

cmake

์†Œ์Šค์™€ ๋Œ€์ƒ ํด๋”๊ฐ€ ์„ค์ •๋˜๋ฉด 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 ํ”„๋กœ๊ทธ๋žจ์˜ ํฌํ•จ ํŒŒ์ผ์„ ์ฐพ์„ ์œ„์น˜๋ฅผ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์—๋Š” ๋‘๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. IDE/์ปดํŒŒ์ผ๋Ÿฌ์˜ /lib ๋ฐ /include ํด๋”๋ฅผ ์ฐพ๊ณ  GLFW์˜ include ํด๋”์˜ ๋‚ด์šฉ์„ IDE์˜ /include ํด๋”์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ glfw3.lib ๋ฅผ IDE์˜ /lib ํด๋”. ์ด๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€๋งŒ ๊ถŒ์žฅ๋˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”์ ํ•˜๊ณ  ํŒŒ์ผ์„ ํฌํ•จํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๊ณ  IDE/์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ƒˆ๋กœ ์„ค์น˜ํ•˜๋ฉด ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‘ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋˜ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹(๊ถŒ์žฅ)์€ IDE/์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ชจ๋“  ํ—ค๋” ํŒŒ์ผ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ์„ ํƒํ•œ ์œ„์น˜์— ์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ง‘ํ•ฉ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, OpenGL ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ—ค๋” ํŒŒ์ผ์„ ๊ฐ๊ฐ ์ €์žฅํ•˜๋Š” Lib ๋ฐ include ํด๋”๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹จ์ผ ํด๋”๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋“  ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‹จ์ผ ์œ„์น˜ (์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ์—์„œ ๊ณต์œ  ๋  ์ˆ˜ ์žˆ์Œ) ๋‚ด์— ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์š”๊ตฌ ์‚ฌํ•ญ์€ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ์„ ์œ„์น˜๋ฅผ IDE์— ์•Œ๋ ค์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ์œ„์น˜์— ํ•„์š”ํ•œ ํŒŒ์ผ์ด ์ €์žฅ๋˜๋ฉด ์ฒซ ๋ฒˆ์งธ OpenGL GLFW ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์ฒซ ํ”„๋กœ์ ํŠธ

๋จผ์ € Visual Studio๋ฅผ ์—ด๊ณ  ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์˜ต์…˜์ด ์ฃผ์–ด์ง€๋ฉด C++๋ฅผ ์„ ํƒํ•˜๊ณ  ๋นˆ ํ”„๋กœ์ ํŠธ ๋ฅผ ์„ ํƒํ•˜์„ธ์š”.(ํ”„๋กœ์ ํŠธ์— ์ ์ ˆํ•œ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค). 64 ๋น„ํŠธ์—์„œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ ๊ฐ’์€ 32๋น„ํŠธ์ด๋ฏ€๋กœ ๋””๋ฒ„๊ทธ ์˜† ์ƒ๋‹จ์— ์žˆ๋Š” ๋“œ๋กญ ๋‹ค์šด์„ x86์„ x64๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์ด์ œ ์ฒซ ๋ฒˆ์งธ OpenGL ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ๊ณต๊ฐ„์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

๋งํ‚น

ํ”„๋กœ์ ํŠธ์—์„œ GLFW๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ”„๋กœ์ ํŠธ์™€ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ง์ปค ์„ค์ •์—์„œ glfw3.lib ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— glfw3.lib ๋ฅผ ์ฐพ์„ ์œ„์น˜๋ฅผ ์•„์ง ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋จผ์ € ์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

IDE๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ๊ณ  ํŒŒ์ผ์„ ํฌํ•จํ•ด์•ผ ํ•  ๋•Œ ์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ณ ๋ คํ•˜๋„๋ก ์ง€์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜ ํƒ์ƒ‰๊ธฐ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญ ํ•œ ๋‹ค์Œ ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด VC++ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

vc_directories

๊ฑฐ๊ธฐ์—์„œ ํ”„๋กœ์ ํŠธ์— ๊ฒ€์ƒ‰ ํ•  ์œ„์น˜๋ฅผ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ž์‹ ์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ํ…์ŠคํŠธ์— ์ˆ˜๋™์œผ๋กœ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์ ์ ˆํ•œ ์œ„์น˜ ๋ฌธ์ž์—ด์„ ํด๋ฆญํ•˜๊ณ  <Edit...> ์˜ต์…˜์„ ์„ ํƒํ•˜์—ฌ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ํฌํ•จ ๋””๋ ‰ํ† ๋ฆฌ ๋ชจ๋‘์— ๋Œ€ํ•ด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค

include_directories

์—ฌ๊ธฐ์—์„œ ์›ํ•˜๋Š” ๋งŒํผ์˜ ์ถ”๊ฐ€ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ IDE์˜ ๊ทธ ์ง€์ ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ—ค๋” ํŒŒ์ผ์„ ๊ฒ€์ƒ‰ ํ•  ๋•Œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. GLFW์˜ include ํด๋”๊ฐ€ ํฌํ•จ๋˜๋ฉด <GLFW/..> ๋ฅผ ํฌํ•จํ•˜์—ฌ GLFW์˜ ๋ชจ๋“  ํ—ค๋” ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ VS๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋งˆ์นจ๋‚ด Linker ํƒญ๊ณผ Input ์œผ๋กœ ์ด๋™ํ•˜์—ฌ GLFW๋ฅผ ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

linker_input

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๋ง์ปค์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„์ด glfw3.lib ์ด๋ฏ€๋กœ ์ถ”๊ฐ€ ์ข…์†์„ฑ ํ•„๋“œ์— ์ถ”๊ฐ€ ํ•˜๊ณ  (์ˆ˜๋™์œผ๋กœ ๋˜๋Š” <Edit..> ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ) ๊ทธ ์‹œ์ ๋ถ€ํ„ฐ ์ปดํŒŒ์ผ ํ•  ๋•Œ GLFW์˜ ๋งํฌ๊ฐ€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. GLFW์™ธ์—๋„ OpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ ˆ ๋งํฌ ํ•ญ๋ณต์„ ์ถ”๊ฐ€ํ•ด์•ผํ•˜์ง€๋งŒ ์ด๋Š” ์šด์˜ ์ฒด์ œ์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OpenGL library on Windows

Windows๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ OpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ opengl32.lib ๋Š” Visual Studio๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜๋Š” Micorosoft SDK์™€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ด ์žฅ์€ VS ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  Windows์— ์žˆ์œผ๋ฏ€๋กœ ๋ง์ปค ์„ค์ •์— opengl32.lib๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. OpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” 64๋น„ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” 32๋น„ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ opengl32.lib๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ ๋ถˆํ–‰ํ•œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

OpenGL library on Linux

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์˜ ์„ค์ • ๋ฐ ๊ตฌ์„ฑ์„ ๋งˆ์นฉ๋‹ˆ๋‹ค.

GLAD

์•„์ง ํ•ด์•ผํ•  ์ผ์ด ํ•˜๋‚˜ ๋” ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. OpenGL์€ ์‹ค์ œ๋กœ ํ‘œ์ค€/์‚ฌ์–‘์ผ ๋ฟ์ด๋ฏ€๋กœ ํŠน์ • ๊ทธ๋ž˜ํ”ฝ์นด๋“œ๊ฐ€ ์ง€์›ํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„์— ๋Œ€ํ•œ ์‚ฌ์–‘์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋“œ๋ผ์ด๋ฒ„ ์ œ์กฐ์—…์ฒด์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. OpenGL ๋“œ๋ผ์ด๋ฒ„์—๋Š” ์—ฌ๋Ÿฌ ๋ฒ„์ „์ด ์žˆ์œผ๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์˜ ์œ„์น˜๋Š” ์ปดํŒŒ์ผ ์‹œ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋Ÿฐํƒ€์ž„์— ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์˜ ์œ„์น˜๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ฐœ๋ฐœ์ž์˜ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ„์น˜ ๊ฒ€์ƒ‰์€ OS๋ณ„๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. Windows์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


// ํ•จ์ˆ˜ ํ”„๋กœํ† ํƒ€์ž… ์ •์˜
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// ํ•จ์ˆ˜๋ฅผ ์ฐพ๊ณ  ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// ํ‰์ƒ์ง€์™€ ๊ฐ™์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
unsigned int buffer;
glGenBuffers(1, &buffer);

์ฝ”๋“œ๊ฐ€ ๋ณต์žก ํ•ด ๋ณด์ด๊ณ  ์•„์ง ์„ ์–ธ๋˜์ง€ ์•Š์€ ๊ฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋ฒˆ๊ฑฐ๋กœ์šด ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•˜๊ฒŒ๋„, ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์žˆ์œผ๋ฉฐ, GLAD ๊ฐ€ ์ธ๊ธฐ ์žˆ๊ณ  ์ตœ์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

Setting up 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 ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์ฐฝ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋…ผ์˜๋Š” ๋‹ค์Œ์žฅ์œผ๋กœ ๋ฏธ๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ธํด๋ฃจ๋“œ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ณ  ๋ง์ปค ์„ค์ •์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„์ด ํ•ด๋‹น ๋ผ์ด๋ธŒ ๋Ÿฌ๋ฆฌ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

Additional resources

  • 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: ๋ชจ๋“  ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ๋ฏธ๋ฆฌ ๊ตฌ์„ฑ๋œ ๊ฐ„๋‹จํ•œ ์ƒ์šฉ๊ตฌ ํ”„๋กœ์ ํŠธ. ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง์ ‘ ์ปดํŒŒ์ผํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€ ์—†์ด ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์›ํ•  ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
โš ๏ธ **GitHub.com Fallback** โš ๏ธ