์ƒˆ์†Œ์‹

OpenGL ๋”ฐ๋ผ๊ฐ€๊ธฐ

[์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค] OpenGL ์‹œ์ž‘ํ•ด๋ณด์ž1

  • -
728x90

์•„๋ฌด๋ž˜๋„ ์ด์ „์— ์˜ฌ๋ ธ๋˜ ๊ฒƒ๋“ค์€ ์ˆ˜์—…์‹œ๊ฐ„์— ๊ต์ˆ˜๋‹˜์˜ ๋„์›€์„ ๋ฐ›์•„ ํ–ˆ๋˜ ๊ฒƒ๋“ค์ธ๋ฐ

๊ฝค ์ ์ง€ ์•Š์€ ๋ถ„๋“ค์ด openGL์— ๋Œ€ํ•ด ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๊ณต๋ถ€๋„ ํ• ๊ฒธ ๋‚ด๊ฐ€ ์ง์ ‘ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž๋ฃŒ๋“ค์„ ์ฐธ๊ณ ํ•˜์—ฌ์„œ ๋งŒ๋“ค์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ผ๋‹จ ๋‚˜๋Š” VisualStudio 2017์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  main.cpp๋ฅผ ์†Œ์Šค ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ 

ํ”„๋กœ์ ํŠธ(P) → ์†์„ฑ(P) ์„ ํด๋ฆญํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์†์„ฑ์„ ํ‚จ๋‹ค.

 

 

 

1. C/C++ → ์ผ๋ฐ˜ → ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ

2. ๋ง์ปค → ์ผ๋ฐ˜ → ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ

3. ๋ง์ปค → ์ž…๋ ฅ → ์ถ”๊ฐ€ ์ข…์†์„ฑ

์— GLFW์™€ gl3w๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

GLFW ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : https://www.glfw.org/

 

GLFW๋Š” ๋ฐ์Šคํฌํƒ‘์—์„œ OpenGL, OpenGL ES ๋ฐ Vulkan ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๋‹ค์ค‘ ํ”Œ๋žซํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
์ฐฝ, ์ปจํ…์ŠคํŠธ ๋ฐ ํ‘œ๋ฉด ์ƒ์„ฑ, ์ž…๋ ฅ ๋ฐ ์ด๋ฒคํŠธ ์ˆ˜์‹ ์„ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ API๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค.
glfwinit(), glfwCreateWindow() ๋“ฑ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

 

gl3w ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : https://github.com/skaslev/gl3w (cmake ์ด์šฉํ•ด์„œ ๋นŒ๋“œํ•ด์•ผํ• ๋“ฏ)

 

gl3w๋Š” glew๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ glew๋Š” ์˜›๋‚  ๋ฒ„์ „์˜ OpenGL๊นŒ์ง€ ์ง€์›ํ•œ๋‹ค.
gl3w ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” OpenGL 3์™€ 4์˜ ์ฝ”์–ด ํ”„๋กœํŒŒ์ผ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ๋‹ค.

 

๋งŒ์•ฝ LNK2001 ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ˆ gl3w.c ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ ์•ˆ์— ์†Œ์Šค๋กœ ์ถ”๊ฐ€ํ•˜์ž. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ฐพ์€ ๋งํฌ

 

 

 

 

main์— ๊ธฐ๋ณธํ˜•์„ ์ ์–ด์ฃผ๊ณ (https://www.khronos.org/opengl/wiki/OpenGL_Loading_Library#GL3W ์„ ์ฐธ๊ณ ํ•จ)

 

๊ทธ๋ฆฌ๊ณ  

#include <GL/gl3w.h> #include <GLFW/glfw3.h>

์ด๋ถ€๋ถ„์€ ๊ผญ ์ˆœ์„œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ ์ง€ ๋ง๊ณ  ๋˜‘๊ฐ™์ด ์ ์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผํ•ด๋ณด๋ฉด

 

 

 

์ด ์ฐฝ์ด ๋œจ๋ฉด ์ •์ƒ์ด๋‹ค. ์—๋Ÿฌ๊ฐ€ ๋œจ๋ฉด ๋‹ค์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒฝ๋กœ๊ฐ€ ์ž˜๋ชป๋˜์ง„ ์•Š์•˜๋Š”์ง€,  64๋น„ํŠธ 32๋น„ํŠธ ์ž˜ ํ™•์ธํ–ˆ๋Š”์ง€ ํ•œ๋ฒˆ ๋” ์ฒดํฌํ•ด๋ณด์ž.

ํ•„์ž๋Š” ์˜คํ”ˆ์†Œ์Šค์ธ ImGUI๋ฅผ ์ด์šฉํ•˜์—ฌ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

์ฐธ๊ณ  ๋งํฌ : https://github.com/ocornut/imgui

๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋„ฃ๋Š”๋‹ค.

ImGUI๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ์ž์ฒด์ ์œผ๋กœ ์ œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ํ†ต์งœ๋กœ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‚ด๋ถ€์— ๋„ฃ์–ด์„œ ๋นŒ๋“œํ•˜๋ฉด ๋œ๋‹ค.

๋‚˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ์ž‘ ์•„๋ž˜ ๋งํฌ์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋”ฐ๋ผ์„œ ์ œ์ž‘ํ•ด์„œ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

https://swstar.tistory.com/229#gref

 

๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค C/C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งŒ๋“ค๊ธฐ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์—์„œ C์–ธ์–ด ๋˜๋Š” C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ์ž‘ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ •์  (static) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋™์  (dynamic) ๋ผ์ด๋ธŒ๋Ÿฌ

swstar.tistory.com

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์ •์ด ๋๋‚˜๋ฉด

https://github.com/ocornut/imgui/blob/master/examples/opengl3_example/main.cpp

์ด ์ชฝ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด imgui์™€ glfw3,gl3w์— ๊ด€ํ•œ ์˜ˆ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฒƒ์„ ์กฐ๊ธˆ ์ฐธ๊ณ ํ•˜์—ฌ์„œ ๋„ฃ์–ด๋ณด์ž.

 

--------------------------------------------------------------------------------------------------------------

์ตœ๊ทผ์— ๋‹ค์‹œ ๋“ค์–ด๊ฐ€๋ณด๋‹ˆ ๋ช‡๊ฐ€์ง€ URL๋„ ์‚ฌ๋ผ์ง€๊ณ  ํ•ด์„œ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์“ฐ๊ธธ ๋ฐ”๋ž€๋‹ค.

์•„๋ฌด๋ž˜๋„ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž์ฃผ ํ•˜์‹œ๋‹ค ๋ณด๋‹ˆ ๋ฐฉ๋ฒ•์„ ๋ฐ”๊พผ๋“ฏ ํ•œ๋ฐ

๊ฐ„๋‹จํ•˜๊ฒŒ https://github.com/ocornut/imgui ์—ฌ๊ธฐ์„œ ์ดˆ๋ก์ƒ‰ Code ๋ฒ„ํŠผ -> download Zip -> ์••์ถ•ํ•ด์ œ ํ›„ imgui ๊ด€๋ จ ์†Œ์Šค๋“ค์„ ํ”„๋กœ์ ํŠธ์— ํฌํ•จ์‹œ์ผœ์„œ ์ง„ํ–‰ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

๋‚˜๋Š” ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ImGUI ์†Œ์Šค๋“ค์„ ์ถ”๊ฐ€ํ•˜์˜€๊ณ  ์†์„ฑ๋“ค์„ ๋‹ค์‹œ ์žฌ์„ค์ •ํ•˜์˜€๋‹ค.

glfw ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์†์„ฑ์— ์ถ”๊ฐ€ํ•˜์—ฌ์ฃผ์—ˆ๊ณ 

glviewport, glclearcolor, glclear ํ•จ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” LNK2019 ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š” ๊ฒฝ์šฐ์—๋Š”

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ ์ข…์†์„ฑ์— glfw3.lib์™€ opengl32.lib๋ฅผ ๋„ฃ์–ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค.

 

opengl3_loader.h์˜ ๊ฒฝ์šฐ ํ˜„์žฌ gl3w.h์˜ ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ๋“ค์„ ๋•ก๊ฒจ์„œ ์˜ค๋ฏ€๋กœ ๋‚˜์ค‘์— gl3w.lib๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋•ก๊ฒจ์˜ค๋Š” ๊ฒฝ์šฐ ์žฌ์ •์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

https://github.com/ocornut/imgui/issues/4445

 

OpenGL backend now embeds its own GL loader (imgui_impl_opengl3_loader.h) · Issue #4445 · ocornut/imgui

TL;DR; Our GL backend now embed its own minimal GL loader (embedded file; full source repo) User/application don't need to configure anything related to GL loader. User/application can use their ow...

github.com

์œ„์˜ ๋งํฌ๋Š” ํ•ด๋‹น ์—๋Ÿฌ์— ๋Œ€ํ•œ imgui ์ œ์ž‘์ž๊ฐ€ ๋‹ต๋ณ€ํ•œ ๊ฒฝ์šฐ์ด๋ฉฐ gl3w_stripped๋ผ๋Š” ํŒŒ์ผ์„ ์ œ์ž‘ํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถฉ๋Œ์‹œํ‚ค์ง€ ์•Š๊ฒŒ๋” ๋งŒ๋“ค๋ผ๋Š” ๊ฒƒ์ธ๋ฐ

https://github.com/dearimgui/gl3w_stripped

 

GitHub - dearimgui/gl3w_stripped: Simple OpenGL core profile loading, customized for Dear ImGui

Simple OpenGL core profile loading, customized for Dear ImGui - GitHub - dearimgui/gl3w_stripped: Simple OpenGL core profile loading, customized for Dear ImGui

github.com

๋‚˜์˜ ๊ฒฝ์šฐ cmake๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์„œ ๋Œ๋ฆฌ๋‹ˆ๊นŒ imgui_loader.h์— ํ•„์š”ํ•œ gl3w ํŒŒ์ผ๋“ค์ด ์ œ์ž‘๋˜์–ด์„œ gl3w.h ํ—ค๋”ํŒŒ์ผ ๋Œ€์‹  imgui_impl_opengl3_loader.h ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

 

https://github.com/ocornut/imgui/blob/master/examples/example_glfw_opengl3/main.cpp

์ด ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์„œ main ํ•จ์ˆ˜๋ฅผ ์ œ์ž‘ํ•˜์˜€๋‹ค.

 

๋ณธ ํ™”๋ฉด์ด ๋–ณ๋‹ค๋ฉด ์„ฑ๊ณตํ•œ ๊ฒƒ์ด๋‹ค. ์•ž์œผ๋กœ ์ด ImGUI์™€ ํ•จ๊ป˜ openGL์„ ๊ณต๋ถ€ํ•ด๋ณด๋„๋ก ํ•˜์ž!

 

์ด์— ๋ช‡ ๊ฐ€์ง€ ์ฐธ๊ณ ํ• ๋งŒํ•œ ์‚ฌ์ดํŠธ์˜ ๋งํฌ๋“ค์„ ์ข€ ๋‚จ๊ฒจ๋†“๊ฒ ์Šต๋‹ˆ๋‹ค

์ €๋„ ์ œ ์ผ์ด ์ •๋ฆฌ๊ฐ€ ๋˜๋ฉด ์•„๋งˆ ํฌ์ŠคํŒ…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค~!

 

LearnOpenGL

learnopengl.com/

 

Learn OpenGL, extensive tutorial resource for learning Modern OpenGL

Welcome to OpenGL Welcome to the online book for learning OpenGL! Whether you are trying to learn OpenGL for academic purposes, to pursue a career or simply looking for a hobby, this book will teach you the basics, the intermediate, and all the advanced kn

learnopengl.com

LearnOpenGL ๋ฒˆ์—ญ ๋ธ”๋กœ๊ทธ

heinleinsgame.tistory.com/4

 

[Learn OpenGL ๋ฒˆ์—ญ] 2-1. ์‹œ์ž‘ํ•˜๊ธฐ - OpenGL

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

heinleinsgame.tistory.com

 

 

 

 

P.S ํ˜น์—ฌ๋‚˜ ๋ฌธ์ œ๊ฐ€ ๋˜๊ฑฐ๋‚˜ ํ‹€๋ฆฐ ์‚ฌํ•ญ์€ ๊ฐ€๋ฅด์ณ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

 

 

 

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.