LearnOpenGL 홈페이지를 통해 OpenGL 공부를 입문했다.
해당 링크에서는 OpenGL 중에서 GLFW & GLAD 를 기반으로 OpenGL을 사용한다.
때문에 GLFW의 환경 설정을 구축하도록 하자.
GLFW는 Download 링크에 있는 Source Package를 다운받는다.
GLFW를 다운받아 압축을 해제하면 아래와 같은 파일들이 존재한다.
CMake가 존재하는 폴더는 CMake GUI를 사용하여 Build 해주어야한다.
CMake는 Download 링크에서 자신에게 맞는 Platform 파일을 받도록 하자.
현 시점에서 나는 Window 10 - 64 비트를 사용한다.
.msi 설치 파일을 사용하여 설치를 완료하면, 분리수거같은 아이콘이 있는데, 그게 CMake GUI 이다.
CMake 를 실행하면 다음과 같은 창이 뜬다.
대부분의 기능은 아직 파악을 못하였기 때문에, 사용하는 방법으로 익숙해지도록하자.
먼저 Browse Source... 을 선택하여, 기존에 압축을 해제한 GLFW 폴더를 설정해준다. (위 사진의 폴더 경로까지만)
Browse Build... 은 CMake를 실행하면, Build된 파일들이 생성될 위치이다.
보통 Browse Source...에 설정한 폴더 내에 [Build] 폴더를 생성하여 지정하는 경우가 많다.
폴더를 지정하였으면, Configure 버튼을 눌러서 생성될 파일들을 지정해야한다.
설치되어 있는 Visual Studio Version에 맞게 Setting한 후 진행하면 된다.
GLFW 같은 경우는 추가로 설정할건 없이, 바로 Generate 버튼을 누르면 된다.
Generate가 완료되면 [Build] 폴더에 Visual Studio Project가 생성되어 있을 것이다.
굳이 폴더에 들어가지 않더라도, Open Project를 통해 .sln 파일을 실행시킬 수 있다.
솔루션을 실행시키면 솔루션 탐색기에 프로젝트가 여러개 있을 것이다.
그 중, ALL_BUILD에 우클릭하여 [Set as StartUP Project] 한 후 빌드를 시키면 된다.
Build를 하면, 에러가 날 것이다.
하지만 에러를 신경쓰지 않고, 프로젝트 폴더의 /src/Debug 폴더를 가면 [glfw3.lib] 파일이 생성되어 있을 것이다.
생성된 [glfw3.lib] 파일은 적용할 Visual Studio Project 폴더의 Binaries/libs 폴더
압축 해제된 glfw 폴더의 [include] 내의 폴더들은 적용할 Visual Studio Project 폴더의 Binaries/include 폴더
glfw 폴더의 src폴더 내 [glad.c] 파일은 적용할 Visual Studio Project Source 폴더
위의 경로로 위치시켜주면 된다.
이제 Project Properties → Configuration Properties → Linker → Input 속성의 Additional Dependencies 탭에 Library를 추가해주면 된다.
Property Editor의 Platform은 x64로 설정해준다.
추가해야하는 Library는 glfw3.lib, opengl32.lib 이다.
또한 Library 폴더와 Include 폴더를 지정해주어야 한다.
Library 폴더와 Include 폴더는 Configuration Properties → VC++ Directories 옵션에서 설정할 수 있다.
위의 설정은 x64이므로, VC++의 빌드 옵션 또한 x64로 설정해주어야 한다.
위와 같이 설정 해주었으면, OpenGL 기본 코드를 넣고 빌드해보자.
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
// DESC :> window 크기 변경 시마다 callback 함수 호출
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
// DESC :> Input 이벤트
void processInput(GLFWwindow* window);
int main()
{
// DESC :> glfw initialize
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window = glfwCreateWindow(800, 500, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
// DESC :> glad initialize
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// DESC :> rendering infinity loop
while (!glfwWindowShouldClose(window))
{
processInput(window);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
// DESC :> 할당된 모든 메모리 삭제
glfwTerminate();
return 0;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
만약 Link Error가 난다면, 솔루션 탐색기에서 glad.c 파일이 제대로 인식 되어 있는지 확인하면 된다.
실행이 완료되면, 아래 사진과 같은 창이 실행된다.
'게임 개발 끄적 > OpenGL' 카테고리의 다른 글
[OpenGL] Shader File (0) | 2020.02.07 |
---|---|
[OpenGL] Shader Program (0) | 2019.11.04 |
[OpenGL] Shader Rendering (0) | 2019.10.15 |
[OpenGL] 기본 코드 이해 (0) | 2019.10.14 |