일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CeisumJS
- vscode
- WebMapTileService
- glad
- vs code
- GLFW
- Cesium
- OpenGL
- 세슘
- V-World
- WMTS
- WebMercatorTilingScheme
- Diffuse
- VBO
- Geoserver
- GetTile
- 지오서버
- Specular
- visual studio code
- GLM
- WMS
- 브이월드
- WebMapService
- Phong
- CesiumJS
- 탄젠트 공간
- WebMapServiceImageryProvider
- lighting model
- 세슘JS
- Visual Studio
- Today
- Total
엉뚱하고 기발하게
Code OpenGL 개발 환경 설정 본문
본 블로그는 개인적인 공부를 목적으로 작성되었습니다.
작성된 블로그의 내용은 다른 사이트, 블로그를 참고하였으며, 저작권 문제가 있다면 수정하겠습니다.
또한 잘못된 내용으로 인한 불이익은 사용자에게 있습니다.
블로그의 내용은 VS Code에 C++ 개발 환경이 설정 되었음을 가정합니다.
만약, 설정되지 않았다면 "C++ 개발 환경 설정(VS Code)"를 통해 설정 후 진행세요.
VS Code를 이용해 OpenGL 개발을 위한 설정 방법에 대해서 작성하겠습니다.
설정 과정은 아래의 순서대로 진행합니다.
- 필수 라이브러리 다운로드
- 프로젝트 설정
- Simple OpenGL 코드 작성 및 실행
1. 필수 라이브러리 다운로드
OpenGL 개발에 필요한 라이브러리는 glfw 입니다. 하지만 본 블로그에서 개발을 편하게 하기 위해서 glad, glm도 추가적으로 설치합니다.
1.1. glfw
glfw는 window나 context 등을 관리해 주는 라이브러리 입니다. 윈도우 창을 만들고, 마우스 입력, 키보드 입력등을 사용하기 위해서 필요한 라이브러리 입니다.
glfw는 아래의 링크를 통해 다운 받을 수 있습니다.
1.2. glad
glad는 glfw와 같이 OpenGL을 사용할 수 있게 해주는 여러종류의 라이브러리에서 제공하는 함수를 쉽게 사용하게 해 주는 라이브러리 입니다.
glad는 아래의 링크를 통해 다운받을 수 있습니다.
1.3. glm
glm은 수학 라이브러리로 OpenGL 개발에 필요한 수학 계산에 필요한 기능을 가지고 있습니다.
glm은 아래의 링크를 통해 다운 받을수 있습니다.
https://glm.g-truc.net/0.9.9/index.html
2. 프로젝트 설정
프로젝트 설정은 C++ 개발 프로젝트를 기반으로 진행합니다.
VS Code 프로젝트에 "builds, dependencies, resources" 폴더를 추가합니다.
각각의 폴더 역할을 아래와 같습니다.
- builds : 컴파일된 결과가 저장될 폴더
- dependencies : 사용하는 라이브러리를 보관하는 폴더
- resources : 프로젝트 진행에 사용할 리소르를 보관하는 폴더
앞서 다운받은 "glfw, glad, glm"을 방금 생성한 "dependencies" 폴더로 복사합니다.
각각의 라이브러리 아래와 같이 복사 합니다.
- glfw : "include, lib-mingw, lib-mingw-w64" Copy To "/dependencies/glfw/"
- glad : "include, src" Copy To "/dependencies/glad/"
- glm : "glm" Copy To "/dependencies/glm/"
프로그램이 실행 될 때 필요한 dll 파일을 "builds" 폴더로 복사합니다.
dll 복사는 아래와 같이 복사 합니다.
- glfw : "glfw3.dll" Copy To "/bulids/"
".vscode"에 있는 "tasks.json, c_cpp_properties.json, launch.json" 파일을 OpenGL 구성에 맞게 수정 합니다.
"tasks.json" 파일에 추가한 라이브러리 위치와 빌드 위치 등을 아래와 같이 수정합니다.
{
"version": "2.0.0",
"runner": "terminal",
"type": "shell",
"echoCommand": true,
"presentation": {
"reveal": "always"
},
"tasks": [
//C++ 컴파일
{
"label": "save and compile for C++",
"command": "g++",
"args": [
"${workspaceRoot}/src/main.cpp",
"${workspaceRoot}/dependencies/GLAD/src/glad.c",
"-g",
"-I${workspaceRoot}/dependencies/GLFW/include",
"-I${workspaceFolder}/dependencies/GLAD/include",
"-I${workspaceFolder}/dependencies/GLM",
"-lopengl32",
"-L${workspaceRoot}/dependencies/GLFW/lib-mingw-w64",
"-static",
"-lglfw3dll",
"-o",
"${workspaceRoot}/builds/main"
],
"group": "build",
//컴파일시 에러를 편집기에 반영
//참고: https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher
"problemMatcher": {
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
// The regular expression.
//Example to match: helloWorld.c:5:3: warning: implicit declaration of function 'prinft'
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
// // 바이너리 실행(Windows)
{
"label": "execute",
"command": "cmd",
"group": "test",
"args": [
"/C",
"${workspaceRoot}/builds\\${fileBasenameNoExtension}"
]
}
]
}
"c_cpp_properties.json" 파일에 라이브러리의 위치등을 아래와 같이 수정합니다.
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}",
"${workspaceFolder}/dependencies/GLFW/include",
"${workspaceFolder}/dependencies/GLAD/include",
"${workspaceFolder}/dependencies/GLM"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:/MinGW/bin/g++.exe",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
"launch.json" 파일에 빌드 위치 등을 아래와 같이 수정합니다.
{
// IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
// 기존 특성에 대한 설명을 보려면 가리킵니다.
// 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 활성 파일 빌드 및 디버그",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/builds/main",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
"setupCommands": [
{
"description": "gdb에 자동 서식 지정 사용",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe build active file"
}
]
}
3. Simple OpenGL 코드 작성 및 실행
OpenGL 설정이 올바르게 되었는지 확인을 위해 간단한 코드로 테스트를 진행합니다.
"main.cpp"를 아래의 코드와 같이 수정합니다.
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
// 스크린 크기
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;
int main()
{
// glfw 초기화
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// window 생성
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "songsmir GL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
// 현재 윈도우에 context를 설정
glfwMakeContextCurrent(window);
// buffer의 크기가 변경될 때 호출되는 콜백
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// glad 로드
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
// 메인 루프
while (!glfwWindowShouldClose(window))
{
// 입력 처리
processInput(window);
// 버퍼 초기화
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// 버퍼 출력
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
// ---------------------------------------------------------------------------------------------------------
void processInput(GLFWwindow *window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
// ---------------------------------------------------------------------------------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
작성된 코드를 "Ctrl + Alt + C"로 빌드하면 "builds" 폴더에 "main.exe"가 생성 됩니다. 만약 생기지 않는다면 설정이 잘못 된 것입니다.
"Ctrl + Alt + R"을 이용해 빌드된 결과를 실행합니다. 아래와 같은 화면이 나타나지 않는다면 설징이 잘못 된 것입니다.
실행이 완료 되면 창 하나가 나타납니다.
지금까지 VS Code에서 OpenGL 개발을 위한 환경 설정 및 테스트 프로젝트를 진행했습니다.
감사합니다.
'개발 환경 설정 > Visual Studio Code' 카테고리의 다른 글
Code C++ 개발 환경 설정 (1) | 2020.10.09 |
---|