728x90

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

์ด ์ž‘์—…์—๋Š” ๋‘ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค:

 

  1. IDE/์ปดํŒŒ์ผ๋Ÿฌ์—์„œ /lib ์™€ /include ํด๋”๋ฅผ ์ฐพ์•„์„œ GLFW์˜ include ํด๋”์˜ ๋‚ด์šฉ์„ IDE์˜ /include ํด๋”์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ glfw3.lib๋ฅผ IDE์˜ /lib ํด๋”์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ํšจ๊ณผ๊ฐ€ ์žˆ์ง€๋งŒ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”์ ํ•˜๊ณ  ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต๊ณ  IDE/์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ƒˆ๋กœ ์„ค์น˜ํ•˜๋ฉด ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ 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 ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์ฐฝ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํฌํ•จ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅด๊ณ  ๋ง์ปค ์„ค์ •์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„์ด ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

 

 

๋ฐ˜์‘ํ˜•
728x90

์›๋ณธ - https://learnopengl.com/Getting-started/OpenGL

 

์—ฌ์ •์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋จผ์ € OpenGL์ด ์‹ค์ œ๋กœ ๋ฌด์—‡์ธ์ง€ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

OpenGL์€ ์ฃผ๋กœ ๊ทธ๋ž˜ํ”ฝ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ์กฐ์ž‘ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” API(Application Programming Interface)๋กœ์จ ํ›„๋ณด๋กœ ๊ฑฐ๋ก ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ OpenGL ์ž์ฒด๋Š” API๊ฐ€ ์•„๋‹ˆ๋ผ ํฌ๋กœ๋…ธ์Šค ๊ทธ๋ฃน์ด ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์‚ฌ์–‘์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.

 

OpenGL ์‚ฌ์–‘์€ ๊ฐ ๊ธฐ๋Šฅ์˜ ๊ฒฐ๊ณผ/์ถœ๋ ฅ๊ณผ ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•์„ ์ •ํ™•ํ•˜๊ฒŒ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ๊ธฐ๋Šฅ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ๋งˆ๋ จํ•˜๋Š” ๊ฒƒ์€ ์ด ์‚ฌ์–‘์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‹ฌ๋ ค์žˆ์Šต๋‹ˆ๋‹ค.

OpenGL ์‚ฌ์–‘์—๋Š” ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด์ด ๋‚˜์™€ ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์‹ค์ œ ๊ฐœ๋ฐœ๋œ OpenGL ๋ฒ„์ „์€ ๊ฒฐ๊ณผ๊ฐ€ ์‚ฌ์–‘๊ณผ ์ผ์น˜ํ•˜๋Š” ํ•œ(๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋™์ผํ•œ) ๋‹ค๋ฅธ ๊ตฌํ˜„์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์‹ค์ œ OpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋Œ€๊ฐœ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ ์ œ์กฐ์—…์ฒด์ž…๋‹ˆ๋‹ค.

๊ตฌ์ž…ํ•œ ๊ฐ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋Š” ํ•ด๋‹น ์นด๋“œ์šฉ ํŠน๋ณ„ํžˆ ๊ฐœ๋ฐœ๋œ OpenGL ๋ฒ„์ „์ธ ํŠน์ • OpenGL ๋ฒ„์ „์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Apple ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ๋•Œ OpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Apple์ด ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋ฉฐ Linux ์•„๋ž˜์—๋Š” ๊ทธ๋ž˜ํ”ฝ ๊ณต๊ธ‰์—…์ฒด์˜ ๋ฒ„์ „๊ณผ ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์• ํ˜ธ๊ฐ€์˜ ์ ์‘์ด ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” OpenGL์ด ํ•˜์ง€ ๋ง์•„์•ผ ํ•  ์ด์ƒํ•œ ๋™์ž‘์„ ๋ณด์ผ ๋•Œ๋งˆ๋‹ค ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ ์ œ์กฐ์—…์ฒด(๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœ/์œ ์ง€ ๊ด€๋ฆฌํ•œ ์‚ฌ๋žŒ)์˜ ์ž˜๋ชป์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

1
๋Œ€๋ถ€๋ถ„์˜ ๊ตฌํ˜„์€ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ ์ œ์กฐ์—…์ฒด์— ์˜ํ•ด ๊ตฌ์ถ•๋˜๋ฏ€๋กœ ๊ตฌํ˜„์— ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์ผ๋ฐ˜์ ์œผ๋กœ
๋น„๋””์˜ค ์นด๋“œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฐ ๋“œ๋ผ์ด๋ฒ„์—๋Š” ์นด๋“œ์—์„œ ์ง€์›ํ•˜๋Š” ์ตœ์‹  ๋ฒ„์ „์˜ OpenGL์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜ํ”ฝ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ๊ถŒ์žฅ๋˜๋Š” ์ด์œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
cs

 

Khronos๋Š” ๋ชจ๋“  OpenGL ๋ฒ„์ „์— ๋Œ€ํ•œ ๋ชจ๋“  ์‚ฌ์–‘ ๋ฌธ์„œ๋ฅผ ๊ณต๊ฐœ์ ์œผ๋กœ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

๊ด€์‹ฌ ์žˆ๋Š” ๋…์ž๋Š” ์—ฌ๊ธฐ์—์„œ ๋ฒ„์ „ 3.3์˜ OpenGL ์‚ฌ์–‘(์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋ฒ„์ „)์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์‚ฌ์–‘์€ OpenGL์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์ข‹์€ ์ฝ์„๊ฑฐ๋ฆฌ์ž…๋‹ˆ๋‹ค(๊ตฌํ˜„์ด ์•„๋‹Œ ๊ฒฐ๊ณผ๋งŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค).

๋˜ํ•œ ์‚ฌ์–‘์€ ๊ธฐ๋Šฅ์˜ ์ •ํ™•ํ•œ ์ž‘๋™์„ ์ฐพ๋Š”๋ฐ ์œ ์šฉํ•œ ์ฐธ๊ณ  ์ž๋ฃŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

์ฝ”์–ด ํ”„๋กœํŒŒ์ผ vs ์ฆ‰์‹œ ๋ชจ๋“œ(๊ณ ์ • ํ•จ์ˆ˜ ํŒŒ์ดํ”„๋ผ์ธ)

์˜›๋‚ ์—๋Š” OpenGL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ž˜ํ”ฝ์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ธ ์ฆ‰์‹œ ๋ชจ๋“œ(๊ณ ์ • ํ•จ์ˆ˜ ํŒŒ์ดํ”„๋ผ์ธ์ด๋ผ๊ณ ๋„ ํ•จ)๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค.

OpenGL์˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•ˆ์— ์ˆจ๊ฒจ์ ธ ์žˆ์—ˆ๊ณ  ๊ฐœ๋ฐœ์ž๋“ค์€ OpenGL์ด ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ํฌ๊ฒŒ ํ†ต์ œํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋“ค์€ ๊ฒฐ๊ตญ ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์›ํ–ˆ๊ณ , ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์‚ฌ์–‘์ด ๋” ์œ ์—ฐํ•ด์กŒ๊ณ , ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ทธ๋“ค์˜ ๊ทธ๋ž˜ํ”ฝ์„ ๋” ๋งŽ์ด ํ†ต์ œํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ณ ์ • ํ•จ์ˆ˜ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ •๋ง ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ๋˜ํ•œ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ด ์‚ฌ์–‘์€ ๋ฒ„์ „ 3.2 ์ดํ›„ ์ฆ‰์‹œ ๋ชจ๋“œ ๊ธฐ๋Šฅ์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ์ž๋“ค์ด OpenGL์˜ ์ฝ”์–ด ํ”„๋กœํŒŒ์ผ ๋ชจ๋“œ๋กœ ๊ฐœ๋ฐœํ•˜๋„๋ก ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“œ๋Š” ์˜ค๋ž˜๋œ ๋ชจ๋“  ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•œ OpenGL์˜ ์‚ฌ์–‘์˜ ํ•œ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

 

OpenGL์˜ ํ•ต์‹ฌ ํ”„๋กœํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ OpenGL์€ ํ˜„๋Œ€์  ๊ด€ํ–‰์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์š”ํ•ฉ๋‹ˆ๋‹ค.

OpenGL์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋งˆ๋‹ค OpenGL์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๊ทธ๋ฆฌ๊ธฐ๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

ํ˜„๋Œ€์ ์ธ ์ ‘๊ทผ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์˜ ์žฅ์ ์€ ๊ทธ๊ฒƒ์ด ๋งค์šฐ ์œ ์—ฐํ•˜๊ณ  ํšจ์œจ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ๋ฐฐ์šฐ๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ณ ์ • ํ•จ์ˆ˜ ํŒŒ์ดํ”„๋ผ์ธ์€ OpenGL์ด ์ˆ˜ํ–‰ํ•œ ์‹ค์ œ ์ž‘์—…์—์„œ ์ƒ๋‹นํžˆ ๋งŽ์€ ๋ถ€๋ถ„์„ ์ถ”์ƒํ™”ํ–ˆ์œผ๋ฉฐ ํ•™์Šตํ•˜๊ธฐ๋Š” ์‰ฌ์› ์ง€๋งŒ ์‹ค์ œ๋กœ OpenGL์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ๋Š” ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.

ํ˜„๋Œ€์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ฐœ๋ฐœ์ž๊ฐ€ OpenGL๊ณผ ๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง„์ •์œผ๋กœ ์ดํ•ดํ•ด์•ผ ํ•˜๋ฉฐ, ๋‹ค์†Œ ์–ด๋ ต๊ธด ํ•˜์ง€๋งŒ ํ›จ์”ฌ ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ๊ณผ ํšจ์œจ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ํ›จ์”ฌ ๋” ๋‚˜์€ ์ดํ•ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์€ ๋˜ํ•œ ์ด ์ฑ…์ด ํ•ต์‹ฌ ํ”„๋กœํ•„ OpenGL ๋ฒ„์ „ 3.3์— ๋งž์ถฐ์ง„ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋น„๋ก ๊ทธ๊ฒƒ์ด ๋” ์–ด๋ ต์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๋…ธ๋ ฅํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ˜„์žฌ OpenGL 4.6์„ ์ž‘์„ฑํ•˜๋Š” ์‹œ์ ์—์„œ ์ƒ์œ„ ๋ฒ„์ „์˜ OpenGL์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OpenGL 4.6์ด ์ถœ์‹œ๋œ ์ƒํƒœ์—์„œ OpenGL 3.3์„ ์ œ๊ฐ€ ์„ ํƒํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

๊ทธ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋Œ€๋‹ต์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. 3.3 ์ดํ›„ ๋ฒ„์ „์˜ ๋ชจ๋“  OpenGL์€ OpenGL์˜ ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  OpenGL์— ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ฒ„์ „์€ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„ ๋” ํšจ์œจ์ ์ด๊ฑฐ๋‚˜ ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์„ ๋„์ž…ํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ ๋ชจ๋“  ๊ฐœ๋…๊ณผ ๊ธฐ์ˆ ์ด ์ตœ์‹  OpenGL ๋ฒ„์ „์—์„œ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋ฏ€๋กœ OpenGL 3.3์„ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์ด ์™„๋ฒฝํ•˜๊ฒŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

์–ธ์ œ๋“ ์ง€ ์ค€๋น„๊ฐ€ ๋˜์—ˆ๊ฑฐ๋‚˜ ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•˜๋ฉด ์ตœ์‹  OpenGL ๋ฒ„์ „์˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1
์ตœ์‹  ๋ฒ„์ „์˜ OpenGL ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์‹  ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋งŒ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ฎ์€ ๋ฒ„์ „์˜ OpenGL์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์„ ํƒ์ ์œผ๋กœ ๋” ๋†’์€ ๋ฒ„์ „์˜ ๊ธฐ๋Šฅ์„
๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.
cs

์ผ๋ถ€ ์ฑ•ํ„ฐ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ๋ก๋œ ๋ณด๋‹ค ํ˜„๋Œ€์ ์ธ ๊ธฐ๋Šฅ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ™•์žฅ

OpenGL์˜ ํฐ ํŠน์ง•์€ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”ฝ ํšŒ์‚ฌ์—์„œ ๋ Œ๋”๋ง์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์ด๋‚˜ ์ƒˆ๋กœ์šด ๋Œ€๊ทœ๋ชจ ์ตœ์ ํ™”๋ฅผ ์ œ์•ˆํ•  ๋•Œ๋งˆ๋‹ค ๋“œ๋ผ์ด๋ฒ„์— ๊ตฌํ˜„๋œ ํ™•์žฅ ๊ธฐ๋Šฅ์—์„œ ์ข…์ข… ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.

์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ด๋Ÿฌํ•œ ํ™•์žฅ์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๋Š” ํ™•์žฅ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด๋‹ค ๊ณ ๊ธ‰ ๋˜๋Š” ํšจ์œจ์ ์ธ ๊ทธ๋ž˜ํ”ฝ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ข…์ข… ํ™•์žฅ์ด ์ธ๊ธฐ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๋งค์šฐ ์œ ์šฉํ•œ ๊ฒฝ์šฐ ๋‚˜์ค‘์— OpenGL ๋ฒ„์ „์˜ ์ผ๋ถ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

๊ฐœ๋ฐœ์ž๋Š” ์ด๋Ÿฌํ•œ ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „(๋˜๋Š” OpenGL ํ™•์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „) ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ™•์žฅ์ด ์žˆ๋Š”์ง€ ๋ฌธ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ํ™•์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋” ๋‚˜์€ ์ž‘์—… ๋˜๋Š” ๋” ํšจ์œจ์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1
2
3
4
5
6
7
8
if(GL_ARB_extension_name)
{
    // Do cool new and modern stuff supported by hardware
}
else
{
    // Extension not supported: do it the old way
}
 
cs

OpenGl ๋ฒ„์ „ 3.3์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์ˆ ์„ ํ™•์žฅํ•  ํ•„์š”๊ฐ€ ๊ฑฐ์˜ ์—†์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ ์ ˆํ•œ ์ง€์นจ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ๋จธ์‹ 

OpenGL์€ ๊ทธ ์ž์ฒด๋กœ ๋Œ€๊ทœ๋ชจ ์ƒํƒœ ์‹œ์Šคํ…œ์œผ๋กœ, OpenGL์ด ํ˜„์žฌ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๋ณ€์ˆ˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

OpenGL์˜ ์ƒํƒœ๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ OpenGL ์ปจํ…์ŠคํŠธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. OpenGL์„ ์‚ฌ์šฉํ•  ๋•Œ ์ผ๋ถ€ ์˜ต์…˜์„ ์„ค์ •ํ•˜๊ณ  ๋ฒ„ํผ๋ฅผ ์กฐ์ž‘ํ•œ ๋‹ค์Œ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ Œ๋”๋งํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, OpenGL์ด ์‚ผ๊ฐํ˜• ๋Œ€์‹  ์„ ์„ ๊ทธ๋ฆฌ๊ณ  ์‹ถ๋‹ค๊ณ  ๋งํ•  ๋•Œ๋งˆ๋‹ค OpenGL์ด ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค์ •ํ•˜๋Š” ์ผ๋ถ€ ์ปจํ…์ŠคํŠธ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ  OpenGL์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

OpenGL์— ์„ ์„ ๊ทธ์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•ด ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ฆ‰์‹œ ๋‹ค์Œ ๊ทธ๋ฆฌ๊ธฐ ๋ช…๋ น์€ ์‚ผ๊ฐํ˜• ๋Œ€์‹  ์„ ์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

 

OpenGL์—์„œ ์ž‘์—…ํ•  ๋•Œ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์—ฌ๋Ÿฌ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ๊ณผ OpenGL์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ผ๋ถ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฌ๋Ÿฌ ์ƒํƒœ ์‚ฌ์šฉ ๊ธฐ๋Šฅ์„ ๋งŒ๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

OpenGL์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋Œ€ํ˜• ์ƒํƒœ ์‹œ์Šคํ…œ์ด๋ผ๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ํ•œ, ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์€ ๋” ์˜๋ฏธ๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์˜ค๋ธŒ์ ํŠธ

OpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” C๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋งŽ์€ ํŒŒ์ƒ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ ํ•ต์‹ฌ์ ์œผ๋กœ๋Š” C๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

C ์–ธ์–ด ๊ตฌ์กฐ ์ค‘ ๋งŽ์€ ๋ถ€๋ถ„์ด ๋‹ค๋ฅธ ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์ž˜ ๋ฒˆ์—ญ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— OpenGL์€  ๋ช‡ ๊ฐ€์ง€ ์ถ”์ƒํ™”๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ถ”์ƒํ™” ์ค‘ ํ•˜๋‚˜๋Š” OpenGL์˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

 

OpenGL์˜ ๊ฐœ์ฒด๋Š” OpenGL ์ƒํƒœ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ต์…˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋„๋ฉด ์ฐฝ์˜ ์„ค์ •์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ์ฒด์˜ ํฌ๊ธฐ, ์ง€์›๋˜๋Š” ์ƒ‰์ƒ ์ˆ˜ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ์ฒด์˜ ํฌ๊ธฐ, ์ง€์›๋˜๋Š” ์ƒ‰์ƒ ์ˆ˜ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ์ฒด๋ฅผ C์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1
2
3
4
5
struct object_name {
    float  option1;
    int    option2;
    char[] name;
};
cs

๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ๋งˆ๋‹ค ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค(OpenGL์˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ํฐ ๊ตฌ์กฐ๋กœ ์‹œ๊ฐํ™”๋จ)

 

1
2
3
4
5
6
// The State of OpenGL
struct OpenGL_Context {
      ...
      object_name* object_Window_Target;
      ...      
};
cs
1
2
3
4
5
6
7
8
9
10
// create object
unsigned int objectId = 0;
glGenObject(1&objectId);
// bind/assign object to context
glBindObject(GL_WINDOW_TARGET, objectId);
// set options of object currently bound to GL_WINDOW_TARGET
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH,  800);
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);
// set context target back to default
glBindObject(GL_WINDOW_TARGET, 0);
cs

 

์ด ์ž‘์€ ์ฝ”๋“œ ์กฐ๊ฐ์€ OpenGL๋กœ ์ž‘์—…ํ•  ๋•Œ ์ž์ฃผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์›Œํฌํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค.

๋จผ์ € ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์ฐธ์กฐ๋ฅผ ID๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค(์‹ค์ œ ๊ฐœ์ฒด์˜ ๋ฐ์ดํ„ฐ๋Š” ์”ฌ ๋’ค์— ์ €์žฅ๋จ).

๊ทธ๋Ÿผ ๋‹ค์Œ ๊ฐœ์ฒด(ID ์‚ฌ์šฉ)๋ฅผ ์ปจํ…์ŠคํŠธ์˜ ๋Œ€์ƒ ์œ„์น˜์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์ฐฝ ๊ฐœ์ฒด ๋Œ€์ƒ ์œ„์น˜๋Š” GL_WINDOW_TARGET์œผ๋กœ ์ •์˜๋จ).

๋‹ค์Œ์œผ๋กœ ์ฐฝ ์˜ต์…˜์„ ์„ค์ •ํ•˜๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฐฝ ๋Œ€์ƒ์˜ ํ˜„์žฌ ๊ฐœ์ฒด ID๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ฐœ์ฒด์˜ ๋ฐ”์ธ๋”ฉ์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •ํ•œ ์˜ต์…˜์€ objectId์—์„œ ์ฐธ์กฐํ•˜๋Š” ๊ฐœ์ฒด์— ์ €์žฅ๋˜๊ณ  ๊ฐœ์ฒด๋ฅผ GL_WINDOW_TARGET์— ๋‹ค์‹œ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ์ฆ‰์‹œ ๋ณต์›๋ฉ๋‹ˆ๋‹ค.

 

1
์ง€๊ธˆ๊นŒ์ง€ ์ œ๊ณต๋œ ์ฝ”๋“œ ์ƒ˜ํ”Œ์€ OpenGL์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ทผ์‚ฌ์น˜์ผ ๋ฟ์ด๋ฉฐ, ์ฑ… ์ „์ฒด์—์„œ ์‹ค์ œ ์˜ˆ์ œ๋ฅผ ์ถฉ๋ถ„ํžˆ
๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
cs

 

์ด๋Ÿฌํ•œ ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‘˜ ์ด์ƒ์˜ ๊ฐœ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ OpenGL์˜ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ์›ํ•˜๋Š” ์„ค์ •์œผ๋กœ ๊ฐœ์ฒด๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 3D ๋ชจ๋ธ ๋ฐ์ดํ„ฐ(์ง‘ ๋˜๋Š” ์บ๋ฆญํ„ฐ)์˜ ์ปจํ…Œ์ด๋„ˆ ๊ฐœ์ฒด ์—ญํ• ์„ ํ•˜๋Š” ๊ฐœ์ฒด๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ทธ๋ฆฌ๊ณ  ์‹ถ์„ ๋•Œ๋งˆ๋‹ค ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ฆด ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ๊ฐœ์ฒด๋ฅผ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค(์ด๋Ÿฌํ•œ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์˜ต์…˜์„ ๋จผ์ € ๋งŒ๋“ค๊ณ  ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค).

๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์œผ๋ฉด ๋งŽ์€ ๋ชจ๋ธ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ํŠน์ • ๋ชจ๋ธ์„ ๊ทธ๋ฆฌ๊ณ  ์‹ถ์„ ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ์˜ต์…˜์„ ๋‹ค์‹œ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ „์— ๊ฐ„๋‹จํžˆ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‹œ์ž‘ํ•˜์ž

์ด์ œ OpenGL์˜ ์‚ฌ์–‘๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, OpenGL์ด ํ›„๋“œ ์•„๋ž˜์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘์šฉํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  OpenGL์ด ์‚ฌ์šฉํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ์ž ์ง€์ • ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋”๋ผ๋„ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ด ์ฑ…์—์„œ๋Š” ๊ฐ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด OpenGL์„ ์ œ๋Œ€๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ์˜ˆ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ถ”๊ฐ€ ์ž๋ฃŒ๋“ค

  • opengl.org : OpenGL์˜ ๊ณต์‹ ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.
  • OpenGL registry : ๋ชจ๋“  OpenGL ๋ฒ„์ „์— ๋Œ€ํ•œ OpenGL ์‚ฌ์–‘ ๋ฐ ํ™•์žฅ์„ ํ˜ธ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•
728x90

์›๋ณธ ํŽ˜์ด์ง€ - https://learnopengl.com/Introduction

 

๋‹น์‹ ์ด ์ด ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์€ ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์˜ ๋‚ด์ ์ธ ์ž‘์šฉ์„ ๋ฐฐ์šฐ๊ณ  ๋ฉ‹์ง„ ์ด๋“ค์ด ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํ˜ผ์ž์„œ ํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ด๋‹ค.

ํ˜ผ์ž์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์žฌ๋ฏธ์žˆ๊ณ , ์ง€๋žต์ด ํ’๋ถ€ํ•˜๋ฉฐ, ๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ํฐ ์ดํ•ด๋ฅผ ์ค€๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ํ•ญ๋ชฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ „์ œ์กฐ๊ฑด

OpenGL์€ ์ž์ฒด ํ”Œ๋žซํผ์ด ์•„๋‹Œ ๊ทธ๋ž˜ํ”ฝ API์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์„ ํƒ ์–ธ์–ด๋Š” C++์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ์žฅ๋“ค์„ ์œ„ํ•ด์„œ๋Š” C++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ณ ๊ธ‰ C++ ์ฃผ์ œ๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ C++ ์ „๋ฌธ๊ฐ€๊ฐ€ ๋  ํ•„์š”๋Š” ์—†์ง€๋งŒ "Hello World" ํ”„๋กœ๊ทธ๋žจ ์ด์ƒ์˜ ๊ฒƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

C++์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š๋‹ค๋ฉด www.learncpp.com  ์—์„œ ๋ฌด๋ฃŒ ํŠœํ† ๋ฆฌ์–ผ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ, ๋„์ค‘์— ์ˆ˜ํ•™ (์„ ํ˜• ๋Œ€์ˆ˜ํ•™, ๊ธฐํ•˜ํ•™, ์‚ผ๊ฐ๋ฒ•)์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ณ  ํ•„์š”ํ•œ ์ˆ˜ํ•™์˜ ๋ชจ๋“  ํ•„์ˆ˜ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ €๋Š” ์ˆ˜ํ•™์ž๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ค๋ช…์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋”๋ผ๋„ ๋ถˆ์™„์ „ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ์ž๋ฃŒ๋ฅผ ๋ณด๋‹ค ์™„๋ฒฝํ•˜๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์ž๋ฃŒ์— ๋Œ€ํ•œ ์ง€์นจ์„ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

OpenGl๋กœ์˜ ์—ฌ์ •์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ์ˆ˜ํ•™์  ์ง€์‹์— ๋Œ€ํ•ด ๋‘๋ ค์›Œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๊ฑฐ์˜ ๋ชจ๋“  ๊ฐœ๋…์€ ๊ธฐ๋ณธ์ ์ธ ์ˆ˜ํ•™์  ๋ฐฐ๊ฒฝ์œผ๋กœ ํžˆ์• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ํ•œ ์ˆ˜ํ•™์„ ์ตœ์†Œํ™”ํ•˜๋„๋ก ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š” ํ•œ ๋ชจ๋“  ์ˆ˜ํ•™์„ ์ดํ•ดํ•  ํ•„์š”์กฐ์ฐจ ์—†์Šต๋‹ˆ๋‹ค.

 

๊ตฌ์กฐ

Learn OpenGL์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ผ๋ฐ˜์ ์ธ ์„น์…˜์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

๊ฐ ์„น์…˜์—๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐœ๋…์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ์—ฌ๋Ÿฌ ์žฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์žฅ์€ ์™ผ์ชฝ ๋ฉ”๋‰ด์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋…๋“ค์€ ์„ ํ˜•์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๋ฅด์ณ์ง€๋ฉฐ(๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์ง€์‹œ๊ฐ€ ์—†๋Š” ํ•œ ์œ„์—์„œ ์•„๋ž˜๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค) ๊ฐ ์žฅ์—์„œ ๋ฐฐ๊ฒฝ ์ด๋ก ๊ณผ ์‹ค์ œ์ ์ธ ์ธก๋ฉด์„ ์„ค๋ช…ํ•œ๋‹ค.

 

๊ฐœ๋…์„ ๋” ์‰ฝ๊ฒŒ ๋”ฐ๋ฅด๊ณ  ์ถ”๊ฐ€๋œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ด ์ฑ…์—๋Š” ์ƒ์ž, ์ฝ”๋“œ ๋ธ”๋ก, ์ƒ‰์ƒ ํžŒํŠธ ๋ฐ ๊ธฐ๋Šฅ ์ฐธ์กฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ•์Šค

1
์ดˆ๋ก์ƒ‰ ๋ฐ•์Šค ์ƒ์ž์—๋Š” OpenGL ๋˜๋Š” ๋‹น๋ฉดํ•œ ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ฐธ๊ณ  ์‚ฌํ•ญ ๋˜๋Š” ์œ ์šฉํ•œ ๊ธฐ๋Šฅ/ํžŒํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด
์žˆ์Šต๋‹ˆ๋‹ค.
cs
1
๋นจ๊ฐ„ ๋ฐ•์Šค ์ƒ์ž์—๋Š” ๊ฒฝ๊ณ  ๋˜๋Š” ๊ธฐํƒ€ ์ฃผ์˜ํ•ด์•ผ ํ•  ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
cs

์ฝ”๋“œ

์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ๋ฌธ์ด ๊ฐ•์กฐ๋œ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์–ด๋‘์šด ํšŒ์ƒ‰ ์ƒ์ž์— ์žˆ๋Š” ์ˆ˜๋งŽ์€ ์ž‘์€ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์›น ์‚ฌ์ดํŠธ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค;

1
// ์ด ๋ฐ•์Šค๋Š” ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
cs

์ด๊ฒƒ๋“ค์€ ์ฝ”๋“œ ์กฐ๊ฐ๋งŒ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•„์š”ํ•˜๋‹ค๋ฉด ์ฃผ์–ด์ง„ ์ฃผ์ œ์— ํ•„์š”ํ•œ ์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒ‰์ƒ ํžŒํŠธ

์ผ๋ถ€ ๋‹จ์–ด๋Š” ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์ด ๋‹จ์–ด๋“ค์ด ํŠน๋ณ„ํ•œ ์˜๋ฏธ๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ์ •์˜ : ๋…น์ƒ‰ ๋‹จ์–ด๋Š” ์ •์˜, ์ฆ‰ ๋” ์ž์ฃผ ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด/์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ : ๋นจ๊ฐ„์ƒ‰ ๋‹จ์–ด๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„ ๋˜๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ€์ˆ˜ :  ํŒŒ๋ž€์ƒ‰ ๋‹จ์–ด๋Š” ๋ชจ๋“  OpenGL ์ƒ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

OpenGL ํ•จ์ˆ˜ ์ฐธ์กฐ

ํŠนํžˆ LearnOpenGl์˜ ๊ธฐ๋Šฅ์€ ์ฝ˜ํ…์ธ ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ๋“  ๊ณณ์—์„œ OpenGL์˜ ๊ธฐ๋Šฅ์„ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์›น์‚ฌ์ดํŠธ์— ๋ฌธ์„œํ™”๋œ ์ฝ˜ํ…์ธ ์—์„œ ๊ธฐ๋Šฅ์„ ๋ฐœ๊ฒฌ๋  ๋•Œ๋งˆ๋‹ค, ๊ทธ ๊ธฐ๋Šฅ์€ ์•ฝ๊ฐ„ ๋ˆˆ์— ๋„๋Š” ๋ฐ‘์ค„๊ณผ ํ•จ๊ป˜ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์šฐ์Šค๋ฅผ ๊ธฐ๋Šฅ ์œ„์— ์˜ฌ๋ ค๋†“์œผ๋ฉด ์ž ์‹œ ํ›„ ํŒ์—… ์ฐฝ์— ๊ธฐ๋Šฅ์ด ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ๋ฉ‹์ง„ ๊ฐœ์š”๋ฅผ ํฌํ•จํ•˜์—ฌ ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ด€๋ จ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์šฐ์Šค๋ฅผ glEnable ์œ„์— ์˜ฌ๋ ค ๋†“์œผ๋ฉด ๋™์ž‘์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‹œ์ž‘ ์„น์…˜์œผ๋กœ ์ด๋™ํ•˜์—ฌ OpenGL ์—ฌ์ •์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค!

๋ฐ˜์‘ํ˜•

+ Recent posts