Visual Studio Community 2017에서 GLFW 라이브러리를 사용하여 OpenGL 개발을 시작하기 위해 필요한 설정 방법을 다룹니다.
다른 Visual Studio 버전에서도 거의 동일하게 설정 가능합니다.
마지막 업데이트 2017. 10. 5.
1. 빈 프로젝트 생성
2. GLFW
3. GLEW
4. 프로젝트 설정
5. 테스트
6. OpenGL 버전 확인
1. 빈 프로젝트 생성
1. Visual Studio 2017을 실행시키고 메뉴에서 파일 > 새로 만들기 > 프로젝트를 선택합니다.
빈 프로젝트를 선택하고 프로젝트 이름을 지정해 줍니다.
2. 왼쪽 솔루션 탐색기에서 소스 파일 항목을 선택한 후 마우스 오른쪽 버튼을 눌러 나오는 메뉴에서 추가 > 새 항목을 선택합니다.
3. 새 항목 추가 창이 뜨면 C++ 파일(.cpp)를 선택하고 이름을 적당히 수정한 후 추가 버튼을 클릭합니다.
4. 메뉴 아래에 보이는 솔루션 플랫폼을 x64로 변경합니다.
이제부터 Visual Studio 2017에서 OpenGL 개발을 하기위해 필요한 라이브러리를 프로젝트에 추가하는 방법을 설명합니다.
프로젝트 이름이 OpenGL Example이고 프로젝트 위치가 C:\Users\사용자이름\Documents\Visual Studio 2017\Projects\OpenGL Example인 경우로 가정하고 설명합니다.
사용하시는 환경에 맞추어 적절히 변경하시면 됩니다.
2. GLFW
OpenGL은 실제 구현된 라이브러리가 아니라 API 스펙입니다.
라이브러리 구현시 플랫폼 종속성을 배제하기 위해서 UI 및 OpenGL 컨텍스트(context) 등을 위한 API는 빠져있습니다.
그래서 보통 플랫폼별로 지원되는 방식을 사용하여 UI를 만들어 사용합니다.
본 포스팅에서는 플랫폼에 독립적인 코드를 작성하기 위해서 GLFW 라이브러리를 사용했습니다.
OpenGL 렌더링 결과를 보여주기 위해 필요한 윈도우(UI)와 OpenGL 컨텍스트 생성 그리고 사용자와 상호 작용을 위해 필요한 키보드/마우스 입력, 이벤트 다루기 등을 위해 사용됩니다.
대부분의 플랫폼에서 똑같은 코드로 동작시키기 위해서 사용하지만 실제로는 일부 수정이 필요하기도 합니다.
GLFW 외에도 선택가능한 플랫폼 독립적인 라이브러리로는 SFML, SDL, freeglut 등이 있습니다.
장단점이 각각 있기 때문에 어느것이 가장 좋다고는 말하기 힘듭니다.
GLFW는 아래 링크에서 다운로드 가능합니다.
http://www.glfw.org/download.html
64비트 윈도우에서 Visual Studio를 사용할 경우를 위해 미리 컴파일된 64-bit Windows binaries를 다운로드 받습니다.
Visual C++ 2017(Visual Studio 2017)에 대한 언급이 없지만 문제없이 동작가능합니다.
압축을 풀은 후, include 폴더를 복사(Ctrl+C)하여
프로젝트 폴더의 경로 OpenGL-Example\OpenGL-Example에 붙여넣기(Ctrl+V)해줍니다.
압축을 풀은 폴더에서 lib-vc2015 폴더를 복사하여
프로젝트 폴더의 경로 OpenGL-Example\OpenGL-Example에 붙여넣기해주고 폴더 이름을 lib로 수정합니다.
lib 폴더안에 glfw3.dll 파일이 포함되어 있습니다.
GLFW 라이브러리를 사용하여 컴파일한 실행 파일과 같이 배포해야 하는 파일입니다.
컴파일 중에는 프로젝트 폴더의 경로 OpenGL-Example\OpenGL-Example에 두어도 됩니다.
3. GLEW(OpenGL Extension Wrangler)
OpenGL 3.x 이상에서는 호출 가능한 OpenGL API 함수들이 런타임에 결정됩니다.
GLEW를 사용하여 런타임에 OpenGL API 함수를 호출합니다.
아래 링크에서 GLEW를 다운로드 받을 수 있습니다.
http://glew.sourceforge.net/
Windows 32-bit and 64-bit를 클릭하여 미리 라이브러리를 컴파일해둔 바이너리를 다운로드 받습니다.
압축을 풀은 후, include 폴더를 복사하여
프로젝트 폴더의 경로 OpenGL-Example\OpenGL-Example에 붙여넣기해줍니다.
기존에 생성된 include 폴더에 추가로 복사되어 집니다.
압축을 풀은 폴더의 경로 glew-2.1.0-win32\glew-2.1.0\lib\Release\x64에 있는 glew32.lib, glew32s.lib를 복사하여
프로젝트 폴더의 경로 OpenGL-Example\OpenGL-Example\lib에 붙여넣기 해줍니다.
압축을 풀은 폴더의 경로 glew-2.1.0-win32\glew-2.1.0\bin\Release\x64에 있는 glew32.dll 파일을 복사합니다.
GLEW 라이브러리를 사용하여 컴파일한 실행 파일과 같이 배포해야 하는 파일입니다.
컴파일 중에는 프로젝트 폴더의 경로 OpenGL-Example\OpenGL-Example에 두어도 됩니다.
4. 프로젝트 설정
메뉴에서 프로젝트 > 속성을 선택하고 C/C++ > 일반의 추가 포함 디렉터리에 다음을 입력합니다.
./include |
링커 > 일반의 추가 라이브러리 디렉터리 항목에 다음을 입력합니다.
./lib |
링커 > 입력의 추가 종속성 항목 맨 앞에 다음 노란색 부분들을 추가합니다.
glew32.lib;glfw3.lib;OpenGL32.lib;kernel32.lib; . . . . . . |
5. 테스트
아래 경로에 있는 코드에 Visual Studio에서 컴파일하기 위해 필요한 코드를 추가하여 테스트를 진행했습니다.
아래 코드를 프로젝트의 cpp 파일에 복사해줍니다.
#include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream>
void key_pressed(GLFWwindow* window, int key, int scancode, int action, int mods); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); NULL, NULL); |
코드를 컴파일하여 실행하기 위해서는 OpenGL32.lib 파일과 opengl32.dll 파일이 필요합니다.
OpenGL32.lib 파일은 코드 컴파일시 OpenGL 라이브러리를 링크시켜 주기 위해 필요합니다.
보통 Visual Studio를 설치하게 되면 같이 설치됩니다.
내 PC의 오른쪽 위에 있는 검색 창에 OpenGL32.lib 입력하여 검색합니다.
컴파일된 실행 파일을 실행하게 될 윈도우를 위한 OpenGL32.Lib 파일이 검색되어야 합니다.
아래 검색 결과에는 32비트 윈도우(x86)와 64비트 윈도우(x64)를 위한 OpenGL32.Lib 파일이 모두 포함되어 있습니다.
opengl32.dll 파일은 윈도우와 같이 배포가 됩니다.
OpenGL 라이브러리를 사용한 프로그램을 실행하기 위해 필요합니다.
주의할 점은 OpenGL32.lib와 opengl32.dll를 프로젝트 폴더에 포함시키지 않도록 해야 합니다.
컴퓨터에 설치된 파일들을 사용하는게 좋습니다.
Ctrl + F5를 눌러서 컴파일 및 실행을 합니다. 문제 없으면 아래처럼 두 개의 창이 보여집니다.
명령 프롬프트 창에 사용중인 OpenGL 버전과 사용 가능한 OpenGL extension을 보여줍니다.
OpenGL를 위해 GLFW를 사용하여 생성한 창을 파란색으로 채워서 보여줍니다.
6. OpenGL 버전 확인
현재 윈도우에 설치된 그래픽 드라이버에서 지원하는 OpenGL 버전 확인을 위해 다음 링크를 읽어보세요.
Windows 환경에서 그래픽 드라이버가 지원하는 OpenGL 버전 확인하기
그래픽 드라이버에서 지원하는 OpenGL 버전이 중요한 이유는 최근에 나온 버전인 윈도우 10에도 OpenGL 1.1을 구현해놓은 라이브러리만 포함되어 있기 때문에 상위 OpenGL 버전에 대한 구현은 그래픽 드라이버에 포함되어 나오기 때문입니다.
그래픽 드라이버를 만드는 CPU 또는 그래픽카드 제조사에서 상위 OpenGL 버전의 스펙을 구현하기 위해 opengl32.dll을 수정할 수 없는 상황이라서 extension 메커니즘을 사용하여 해결합니다.
제가 사용하는 노트북에서는 OpenGL 3.0 ~ 4.4 까지만 100 %지원합니다.
100% 라고 하는 의미는 해당 버전 OpenGL 스펙에 기술된 API를 그래픽 드라이버에서 모두 구현했다는 겁니다.
참고로 OpenGL 4.5 이후로는 벌컨(Vulkan - Next Generation OpenGL Initiative)으로 대체될 예정입니다.
'소프트웨어 > OpenGL' 카테고리의 다른 글
OpenGL과 MFC 연동 예제( GLEW 사용, Dialog 기반, OpenGL 3.x 코드) (0) | 2018.05.15 |
---|---|
OpenGL과 MFC 연동 예제( GLEW 사용, Dialog 기반, OpenGL 2.x 코드) (0) | 2018.05.15 |