Vscode OpenGL 설치 - Vscode OpenGL seolchi

GLFW 기본 + 설치

● 목차

1. GLFW 기본

2-1. GLFW 설치, 설정

2-2. window 띄워보기

1. GLFW 기본

GLFW (Graphics Library FrameWork) 의 등장

OpenGL로 window를 띄우고 원하는 컨텐츠를 띄울 수 있다.

그런데 일반 window는 OpenGL을 사용할 수 있도록 연결되어 있지 않다.

이 때 context라는 것이 필요하다.

● OpenGL의 기본 동작

1. 셋팅

2. 그리기

예를 들어서

1. 셋팅 : 앞으로 내가 그리려는 색은 빨간색이야 

2. 그리기 : 선을 그린다.

=> 이러면 빨간 선이 그려지게 된다.

그렇다면 색을 지정하는 부분선을 그리는 부분독립되어 있다는 것이다.

선을 그릴 때 무슨 색이 저장되어 있는지 누군가 알고 있어야 한다.

책을 읽을 때 앞의 문맥(context)라는게 있어야 뒤가 이해가 되는 것처럼 context가 필요하다.

그래서 앞의 셋팅된 값들을 저장해놓는 공간을 context라고 한다.

그렇다면 왜 굳이 셋팅과 그리기를 나눴을까?

이 모든 것을 한 function에 구현하기가 어려워서이다. 그래서 context가 등장하게 된 것이다.

(참고) context의 정의는 이러하지만, OpenGL에서 그림그리게 해주는 것이라고 이해해도 충분

● toolkits

이러한 context를 만드는 것은 힘들다고 한다. 책 한권분량 정도..??

다행히 이를 통으로 묶은 toolkit이 있다.

OpenGL이 등장했던 1950년대부터 사용한 GLUT (GL UtiliTy)라는 것이 있으나 오래됐고, 구조도 안좋고, 신기술에 사용하기 힘들어서 사용하지 않는다.

그래서 GLFW를 사용한다.

GLFW (Graphics Library FrameWork)

장점

1. 오픈소스 + 무료

2. 배우기 편함

3. OpenGL의 거의 모든 기능 사용가능

4. 여러 프로그래밍 언어에서 돌아감 (C/C++, Java, Python 등등)

● 단점

1. 버튼을 붙이는 등 UI가 없음

2. 휴대폰은 안됨. (휴대폰 각자 고유의 방식이 있기 때문에)

3. 쓰레딩 안됨

4. 이미지 로딩 안됨

2-1. GLFW 설치, 설정

GLFW 다운로드 링크

www.glfw.org/download.html

GLFW - Download

These packages contain the GLFW header files, documentation and release mode static libraries, DLLs and import libraries for Visual C++ 2010-2019, MinGW-w64 and plain MinGW. Binaries for Visual C++ 2010 and plain MinGW are only available in the 32-bit pack

www.glfw.org

위 링크로 접속합니다.

64-bit Windows binaries 를 클릭해 다운받아줍니다.

그러면 glfw-3.3.2.bin.WIN64라는 폴더 여러 파일이 다운받아집니다.

include : 헤더파일들이 있는 폴더

lib-vc20XX : 비주얼 스튜디오 버전마다의 library

그리고 이 파일을 비주얼 스튜디오 프로젝트로 가져오는 여러 방법이 있는데 (하나의 파일을 여러 프로젝트에서, 또는 하나의 파일을 하나의 프로젝트에서 등등)

여기선 프로젝트마다 넣을 것입니다.

사이즈가 커지긴 하지만, 다른 컴퓨터로 갔을 때 또 설치하고 연결해줘야 합니다.

다른 곳에 가서도 잘 작동하도록 프로젝트에 넣어줄 것입니다.

비주얼 스튜디오로 넘어갑니다.

새 프로젝트를 만듭니다.

프로젝트 이름은 InyongOpenGL 으로 하겠습니다.

이렇게 프로젝트가 만들어 지는데, 알아둬야 할 것이 있습니다. 위 쪽에 빌드할 시 어떤 모드로 할지 선택지가 있습니다.

Debug 모드와 Release 모드가 있음을 알고 넘어갑니다.

(참고)

Debug : 각종 생길 수 있는 모든 에러를 실시간 체크해줍니다. 이상한 일이 있으면 멈추고, 설명합니다. 그래서 이 모드는 실행속도가 느립니다.

Release : 에러 체킹 없이 돌아가서, 실행속도가 빠릅니다.

그리고 빌드를 시켜줍니다.

빌드를 하고, solution 폴더에 들어가보면, 위 사진과 같은 폴더들이 있습니다.

여기에서

include 폴더를 만들어줍니다.

lib 폴더를 만들어줍니다.

그리고 맨 처음에 다운로드 받았던 glfw-3.3.2.bin.WIN64 폴더 > include > "GLFW" 폴더solution 폴더의 include에 넣어줍니다.

그리고 glfw-3.3.2.bin.WIN64 폴더의 lib-vc20XX 폴더 (저는 2019) 에 들어가보면, dll 파일과 lib 파일 두개가 있습니다.

여기에서 glfw3.lib 파일solution 폴더의 lib 폴더에 넣어줍니다.

(참고) glfw3.lib 파일을 넣는 이유?

잠깐 설명을 하자면,

dll은 동적 라이브러리 입니다. 라이브러리는 다른 사람이 만들어 놓은 function들을 묶어놓은 것이고 이를 불러쓰는 것입니다.

그런데 같은 라이브러리가 여러 프로그램에서 쓰이는 경우가 있습니다.

예를 들어서 윈도우에서 원도우창 띄우는 function은 모든 window에서 다 쓸 것입니다.

그러다보니 이것이 window system에 들어가는데, 덩치도 큰데.. 이런 것들을 프로그램마다 넣는 것은 좋지 않다고 생각됩니다.

그래서 얘를 하나의 파일로 만들어놓고, 프로그램이 실행할 때 넘겨주기로 합니다.

그러면 시스템 전체에 하나만 있으면 되는 것입니다.

만약 마이크로소프트의 dll에 버그가 생기면, dll만 수정하면 우리의 프로그램은 바뀐 dll로 동작할 것입니다. 그래서 우리가 모르는 사이에 버그가 고쳐져 있을 것입니다.

이 dll을 그냥 쓸 수는 없고, dll.lib 파일이 있어야합니다.

dll.lib 파일에는 function이 있는데, 이 function에는 dll이 어디에 있으니 찾아가고 뭘 실행시켜야 한다고 말하는 등등의 일을 하고 있습니다.

즉, dll.lib은 dll을 불러주는 역할만 수행하는 것입니다.

저는 동적말고, 정적 라이브러리를 사용할 것입니다.

그런데, 두번째 파일인 glfw3.lib의 용량을 보면 634KB입니다. 이것은 GLFW function들인데, 다 모아놓아도 용량이 이것밖에 안되는데 굳이 dll씩이나 쓸 필요성이 느껴지지 않으니, 그냥 이 파일을 넣습니다.

이제 비주얼 스튜디오로 넘어와서 설정을 시작하겠습니다.

solution > include > GLFW > glfw3.h 헤더파일을 불러오려는데, 빨간줄이 쳐졌습니다.

헤더파일을 불러오는데 실패한 것입니다. 비주얼 스튜디오에게 이 헤더파일이 있음을 알려줘야 합니다.

속성에 들어갑니다.

C/C++ > 일반 > 추가 포함 디렉터리

이 칸이 빈칸으로 되어 있을 것입니다.

이 칸에 $(SolutionDir)/include 를 적어주고, 적용하고 확인을 눌러줍니다.

(참고) $(SolutionDir) 란?

solution 폴더가 있는 경로를 가리킵니다.

확인해보면 solution 폴더가 있는 경로를 가리킨다는 것을 볼 수 있습니다.

여기에서 주의할 점 하나!

아까 빌드할 때 Debug 모드와 Release 모드가 있었습니다.

이 경로를 Debug 모드와, Release 모드 둘 다 설정해주어야 합니다.

방금 Debug에서 경로지정을 해주었으니, Release 모드에도 똑같이 경로를 적어줍니다.

(처음부터 모든 구성에서 적어줘도 됩니다.)

이제 빨간줄이 사라졌습니다! 헤더파일을 불러올 수 있게 된 것입니다.

그러나 비주얼 스튜디오는 라이브러리를 찾지 못합니다.

왜냐하면 저는 비주얼 스튜이오에게 어떤 라이브러리를 사용할 것이라고 아직 안 알려줬기 때문입니다.

다시 속성에 들어갑니다.

이번엔 링커 > 일반 > 추가 라이브러리 디렉터리에

$(SolutionDir)/lib 를 적어줍니다. (왼쪽 위 구성은 모든 구성으로 선택했습니다)

그리고 적용해줍니다.

이것은 lib폴더가 있음을 알려주는 것입니다.

이제 어떤 라이브러리가 있는지 알려주어야 합니다.

링커 > 입력 > 추가 종속성에

glfw3.lib; 를 맨 앞에 추가해줍니다.

(어차피 opengl도 사용할 거이니 opengl32.lib; 도 적었습니다.)

적용해주고 확인해줍니다.

이제 설치와 설정이 끝났으니 window 창을 띄워봅시다..!

2-2. window 띄워보기

window 창을 띄우는 코드

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#include <GLFW/glfw3.h>

void render(GLFWwindow* window);

int main()

{

// glfw 초기화

glfwInit();

// window 만들기 (width, height, title, monitor, share)

GLFWwindow* window = glfwCreateWindow(640480"Inyong"00);

// context는 그리기 위한 내용을 담고 있음

// window가 두개이면 context가 두개일수도 있음

// 그러면 어떤 context로 그릴지 정해줘야 함

glfwMakeContextCurrent(window);

// 사용자가 window 창을 닫을 때까지

while (!glfwWindowShouldClose(window)) {

// window 그려주기

render(window);

// 마우스 움직이는 것. 이런것들 들고와서 필요한 window한테 보내주기

glfwPollEvents();

}

// window가 닫혔을 경우 끝내자

glfwDestroyWindow(window);

glfwTerminate();

}

void render(GLFWwindow* window) { }

cs

(참고) glfwCreateWindow

조그만 window 가 하나 띄워졌습니다...!! (뭔가 뿌듯하네요ㅎㅎ)

default가 흰색으로 되어있을 수 있고, 투명할 수도 있습니다.

한번 색을 바꿔볼까요?

render 함수를 작성해줍니다.

void render(GLFWwindow* window) { 

// 지우는 색깔 (어떤 색으로 칠할건지)

glClearColor(0011);

glClear(GL_COLOR_BUFFER_BIT);

// 깜빡거림 방지

glfwSwapBuffers(window);

}

cs

파란색 window가 나온 것을 확인할 수 있습니다~

이렇게 GLFW 설치 및 설정, window 띄우는 것을 해보았습니다.

관련 게시물

Toplist

최신 우편물

태그