본문 바로가기
<LIBRARY>/OPENGL

0. OpenGL 개발환경 설정하기

by CodeGrimie 2021. 1. 9.

뭘 공부하던 언제나 개발환경을 설정하는 것이 제일 힘들다.

GLEW 내려받기

GLEW는 The OpenGL Extenstion Wrangler Library의 약자로 OpenGL의 새로운 기능을 제공하는 헤더 파일이다.

 

GLEW 공식 홈페이지에서 내려받을 수 있다.

사이트가 영어로 되어있지만 상단의 Downloads에서 최근 버전을 내려받을 수 있다.

 

▼ Downloads의 최신 버전을 내려받으면 된다.

GLFW 내려받기

GLFW는 Graphics Library Framework의 약자로 윈도에서 OpenGL을 쉽게 구현할 수 있도록 도와준다.

원래라면 WinAPI를 이용하여 윈도 생성부터 해야하지만 GLFW는 이걸 간편하게 처리해주기 때문에 개발자 OpenGL 자체에만 집중하여 작업할 수 있다.

 

마찬가지로 GLFW 공식 홈페이지 다운로드 탭에서 내려받을 수 있다.

윈도우 환경에서 작업하니 Windows pre-compiled binaries에서 64bit를 내려받는다.

 

▼ 64bit 바이너리 파일을 내려받는다.

GLEW/GLFW 폴더 이름 정리

내려받은 폴더는 너무 이름이 길기 때문에 사용하기 편하도록 짧은 이름으로 변경한다.

나중에 비주얼 스튜디오에서 include와 link 할 때 편하다.

 

▼ 폴더 이름을 쓰기 쉬운 이름으로 변경한다.

라이브러리 폴더 만들어서 정리

내려받은 라이브러리를 새로 폴더를 하나 만들어서 정리한다.

폴더의 이름은 사람에 따라 다 다르게 정하는데 직관적으로 짓는 게 제일 좋다.

 

새로 만든 폴더에 GLEW 폴더와 GLFW 폴더를 넣어주고 본인이 관리하게 편한 위치에 둔다.

나는 개발용 SSD를 하나 따로 사용하기 때문에 언제나 그곳에 둔다.

 

▼ 위치가 짧을수록 편하다.

D:\Libs

비주얼 스튜디오 새 프로젝트 생성

이제 실제로 개발할 비주얼 스튜디오의 설정을 시작한다.

학습할 때마다 새 프로젝트를 만들어서 개별로 실행할 수 있게 할 것이기 때문에 설루션의 이름을 잘 정해야 한다.

프로젝트를 여러 개 만들면 공부한 단계별로 편하게 코드와 실행을 할 수 있지만 프로젝트 속성을 매번 해줘야 하기 때문에 불편한 점도 있다.

 

어차피 공부하는 단계에서는 개발환경 설정하는 걸 익숙해질 수 있기 때문에 큰 문제가 되지는 않는다.

 

▼ 설루션은 큰 범위, 프로젝트는 빌드/실행할 단위로 지정하는 게 편하다

솔  루 션 : OpenGL
프로젝트 : 0_Init

처음은 빈 화면만 만들 것이기 때문에 과감하게 0_Init으로 정한다.

비주얼 스튜디오 Include 설정

OpenGL이 CPP에 기본 내장된 것이 아니기 때문에 당연히 외부 라이브러리를 포함시켜줘야 한다.

나중에 이 귀찮은 작업을 컴퓨터에 따라 자동화하는 툴을 만들던가 해야겠다.

 

외부 라이브러리는 프로젝트 별로 설정할 수 있다.

비주얼 스튜디오 설루션 탐색기(Solution Explorer)에서 현재 프로젝트를 마우스 오른쪽 버튼을 누르면 나오는 팝업 메뉴 창에서 최하단의 속성(Properties)을 클릭한다.

 

▼ C/CPP 항목을 누르면 바로 오른쪽에 추가 포함 폴더 주소를 입력해줄 수 있다.

GLEW와 GLFW의 내부에 위치한 include 폴더 주소를 적어주면 된다.

 

▼ GLEW/GLFW의 include 폴더 주소

GLEW : (라이브러리 폴더 주소)\GLEW\include
GLFW : (라이브러리 폴더 주소)\GLFW\include

비주얼 스튜디오 Linker 설정

코드를 컴파일할 때마다 GLEW와 GLFW 코드까지 모두 컴파일하면 속도가 훨씬 많이 들 것이다.

그래서 미리 컴파일된 오브젝트 파일을 받아서 ' 연결 '해 줌으로써 우리가 작성한 코드만 컴파일 할 수 있도록 도와준다.

 

자세한 Linker에 대한 정보는 CPP에서 다시 한번 다뤄보고 지금은 개발환경설정에 집중하자.

 

include와 같이 Linker 역시 library 추가 라이브러리 폴더 주소를 설정해준다.

▼ GLEW/GLFW의 library 폴더 주소

GLEW : (라이브러리 폴더 주소)\GLEW\lib\Release\x64
GLFW : (라이브러리 폴더 주소)\GLFW\lib-vc2019

주의해야 할 점은 GLFW는 현재 사용하고 있는 비주얼 스튜디오 버전을 맞춰줘야 한다.

비주얼 스튜디오 추가 종속성 설정

이제 링커에게 추가 종속성을 설정해줘야 한다.

종속성에 대해서는 아직도 이해가 잘 가지 않는다. 좀 더 시간 내서 살펴봐야 할 것 같다.

간단하게 생각하면 해당 Lib를 사용하면 추가해주는 것으로 보인다.

 

Linker의 Input에서 추가 종속성을 설정해줄 수 있다.

지금 현재 추가할 종속성

opengl32.lib
glew32.lib
glfw3.lib

dll 파일 옮기기

안타깝게도 아직 개발환경설정이 끝나지 않았다.

이제 dll 파일을 옮겨서 우리의 프로젝트 안에 복붙 해줘야 한다.

GLEW와 GLFW 각각 dll 파일이 위치한 곳은 아래와 같다.

 

▼ GLEW와 GLFW의 dll 파일 위치

GLEW : (라이브러리 폴더 주소)\GLEW\bin\Release\x64
GLFW : (라이브러리 폴더 주소)\GLFW\lib-vc2019

빈 윈도 생성 코드

이제 드디어 마지막 단계다.

개발환경설정이 잘 되었는지 확인해 볼 차례다.

GLEW/GLFW의 기본 예제 코드를 복붙 하여 확인해본다.

코드의 길이는 그렇게 길지 않지만 개발환경설정이 정상적으로 완료된 건지 확인하는 것뿐이기 때문에 코드 분석은 다음에 해보도록 하자.

 

▼ GLEW/GLFW 빈 화면 생성 코드

#include <cstdio>

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

const GLint WIDTH = 800, HEIGHT = 600;

int main()
{
	if (!glfwInit())
	{
		printf("GLFW Initialization Failed\n");
		glfwTerminate();
		return (1);
	}

	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
	glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

	GLFWwindow* mainWindow = glfwCreateWindow(WIDTH, HEIGHT, "OpenGL INIT", NULL, NULL);
	if (!mainWindow)
	{
		printf("GLFW Window Creation Failed!\n");
		glfwTerminate();
		return (1);
	}

	int bufferWidth, bufferHeight;
	glfwGetFramebufferSize(mainWindow, &bufferWidth, &bufferHeight);

	glfwMakeContextCurrent(mainWindow);

	glewExperimental = GL_TRUE;

	if (glewInit() != GLEW_OK)
	{
		printf("GLEW Initialization Failed!\n");
		glfwDestroyWindow(mainWindow);
		glfwTerminate();
		return (1);
	}

	glViewport(0, 0, bufferWidth, bufferHeight);

	while (!glfwWindowShouldClose(mainWindow))
	{
		glfwPollEvents();

		glClearColor(0.4f, 0.6f, 0.2f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);

		glfwSwapBuffers(mainWindow);
	}

	return (0);
}

문제없이 코드가 컴파일되고 실행된다면 아래와 같은 창이 뜰 것이다.

 

▼ 코드 실행 결과

'<LIBRARY> > OPENGL' 카테고리의 다른 글

5. GLM 라이브러리 적용하기  (0) 2021.01.19
4. 삼각형 움직이기  (0) 2021.01.17
3. 삼각형 그리기(2)  (0) 2021.01.17
2. 삼각형 그리기 (1)  (0) 2021.01.14
1. 기본 코드 작성하기  (0) 2021.01.11

댓글