본문 바로가기
College Study/OpenGL

[그래픽스] 컴퓨터 그래픽스 프로그래밍 개발 환경 구축 (Windows, MacOS)

by 2den 2020. 5. 22.
728x90

그래픽스 교재 구매 링크 (원서)

Windows OpenGL 개발환경 구축

MacOS OpenGL 개발환경 구축

 

+ 이 교재에서 요구하는 texture mapping을 정확하게 수행하기 위해서는, 윈도우 환경에서 학습하실 것을 추천합니다.

 

 

 

 

Computer Graphics Programming in Opengl Using C++

책으로 만나는 새로운 세상

book.naver.com

"Computer Graphics Programming in OpenGL with C++"라는 위 교재로 공부 후 업로드합니다. 현재까지 번역본이 없어 원서로 학습 후 한글로 업로드할 예정입니다.

 

 

 


Windows 환경 구축

 

MacOS 개발 환경의 한계를 느껴 데스크탑을 맞췄습니다. Windows 에서 다시 개발 환경을 구축해봅시다.

1. Visual Studio 설치

비주얼 스튜디오를 설치합니다. 저 같은 경우에는 c++ 콘솔 응용 프로그램 개발 옵션을 선택하여 설치했습니다. 이 책에서 권장하는 비주얼 스튜디오 개발 방식은 책에서 사용하는 라이브러리를 먼저 모두 설치한 후, 공유된 하나의 로케이션에 저장하여 커스텀 탬플릿을 구축하는 것입니다. 프로젝트마다 새로 라이브러리를 연결시키지 않고 필요한 라이브러리를 이미 가지고 있을 수 있도록 말이지요.

2. OpenGL / GLSL 설치 (확인)

OpenGL이나 GLSL을 '설치'할 필요는 없습니다. 보통 윈도우 PC용 그래픽카드는 OpenGL과 GLSL이 설치되어 있습니다. 다만, 사용하는 기계의 그래픽카드가 OpenGL 버전 4.3을 지원하는지 확실히 해둘 필요가 있습니다. 책에 있는 프로그램을 완전히 다루려면 4.3 이상의 버전이 필요합니다. (제가 맥북에서 갈아타 데스크탑을 맞춘 이유입니다.)

3. GLFW 준비

https://www.glfw.org/

 

GLFW - An OpenGL library

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop. It provides a simple API for creating windows, contexts and surfaces, receiving input and events. GLFW is written in C and supports Windows, macOS,

www.glfw.org

먼저, 위 링크에서 GLFW 소스코드를 다운로드합니다.

 

https://cmake.org/

 

CMake

CMake is an open-source, cross-platform family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files, and generate native makefile

cmake.org

그다음, 위 링크에서 CMAKE를 다운로드하여 설치합니다.

CMAKE를 실행한 후, GLFW 소스의 위치와 원하는 빌드 폴더 위치를 입력합니다. "configure" 버튼을 누르고 "generate"를 클릭하여 생성합니다. 중간에 생성을 멈추고, 빨갛게 하이라이트 된 체크리스트가 나타나면 "generate" 버튼을 한 번 더 눌러주세요. "Generating done"이라는 메시지가 나오면 완료된 것입니다.

빌드 폴더 위치에 생성된 "GLFW.sln" (확장자는 속성에서 확인하세요.) 파일이 비주얼 스튜디오 프로젝트 파일입니다. 클릭해서 열면 비주얼 스튜디오로 열립니다. release 모드로 설정하여 (디폴트 값은 debug입니다.) 빌드를 눌러 컴파일해주세요. 책에서는 32비트 애플리케이션을 권장하고 있습니다. (실행하실 때에 버전 체크 후 안정화된 64비트 애플리케이션으로 컴파일하셔도 상관없습니다.) 빌드해주면 glfw3.lib 파일이 생성되고, GLFW 소스 폴더 안 (빌드 폴더 아닙니다.) "include" 폴더에 필요한 헤더 파일 두 개가 생성됩니다.

4. GLEW 준비

http://glew.sourceforge.net/

 

GLEW: The OpenGL Extension Wrangler Library

The OpenGL Extension Wrangler Library The OpenGL Extension Wrangler Library (GLEW) is a cross-platform open-source C/C++ extension loading library. GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the tar

glew.sourceforge.net

위 링크에서 32비트 바이너리를 다운로드하세요. (책에는 32비트를 권장하지만 제가 다운로드할 때에는 32비트와 64비트 파일이 같았습니다.) 다운로드 후 압축을 풀어보면 glew32.lib 파일("lib" 폴더 안에), glew32.dll 파일("release" 폴더 안에), 헤더 파일이 몇 개 들어있는 "GL" 폴더("include" 폴더 안에)가 있습니다.

5. GLM 준비

http://glm.g-truc.net/0.9.8/index.html

 

OpenGL Mathematics

OpenGL Mathematics GLSL + Optional features = OpenGL Mathematics (GLM) A C++ mathematics library for graphics programming OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) sp

glm.g-truc.net

위 링크에서 release 노트가 포함되어 있는 최신 버전 glm을 다운로드하세요. 압축을 풀어보면 앞으로 사용하게 될 "glm" 폴더가 있습니다.

6. SOIL2 준비

SOIL2를 다운로드합니다. 레포 주소가 바뀌었네요. 아래 깃허브에서 zip 파일로 다운받으세요.

https://github.com/SpartanJ/soil2

 

SpartanJ/SOIL2

SOIL2 is a tiny C library used primarily for uploading textures into OpenGL. - SpartanJ/SOIL2

github.com

 

저는 비주얼 스튜디오를 2019로 설치했기 때문에 vs2019로 soil2를 설치하려고 합니다. premake4는 vs2019를 지원을 하지 않으니 아래 링크에서 premake5를 다운받으세요.

https://premake.github.io/download.html

 

Downloads | Premake

Binaries simply need to be unpacked and placed somewhere on the system search path or any other convenient location. The source code package includes solutions, workspaces, and makefiles for all of the supported toolsets in the build/ directory. Premake is

premake.github.io

 

SOIL2 개발자 분께서 제가 premake5를 지원해달라고 요청했더니, 바로 레포에 premake5.lua 파일을 추가해 주셨습니다. 따라서 premake5.exe 파일을 바로 SOIL2-master 폴더에 이동시켜준 후, 명령 프롬프트(cmd)를 이용해 premake로 soil2를 만들어 줍시다.

cd <SOIL2 위치>
premake5 vs2019

다른 버전의 비주얼 스튜디오를 사용 중이시라면, 버전 체크 후 알맞은 premake, 명령어를 사용해주세요.

완료되면 SOIL2-master 폴더로 돌아옵니다. "make" > "windows" > SOIL2.sln 을 클릭하면, 역시 솔루션 프로그램을 비주얼 스튜디오로 열게 되어있습니다. 모드를 다시 debug로 설정해주시고, 왼쪽 패널에서 "soil2-static-lib"을 찾아 오른쪽 마우스 클릭 > "빌드" 를 선택해주세요. 컴파일이 완료되었습니다. 다시 SOIL2 폴더로 돌아가 보면 새로운 폴더가 형성되어 있을 것입니다.

7. "lib" , "include" 폴더 준비

원하는 디렉터리를 하나 정합니다. 그곳에 "lib" 폴더와 "include" 폴더를 생성해주세요. (저는 문서(document) 디렉터리에 OpenGL template 폴더를 생성했습니다.) "lib" 폴더에 glew32.lib(glew > glew > lib > Release > 64x)와 glfw3.lib(GLFW > src > Debug)를 이동시킵니다. SOIL2 폴더에 있는 soil2-debug.lib(soil > soil > lib > windows)도 같은 곳으로 옮겨주세요. "include" 폴더에는 GL(glew > glew > include), GLFW(glfw > glfw > include), glm(glm > glm) 폴더를 이동시킵니다. SOIL2(soil > soil > src) 폴더도 같은 곳으로 옮겨주세요. 저는 책의 권고를 따라 glew32.dll(glew > glew > bin > Release > 64x) 파일도 OpenGL template으로 옮겼습니다.

8. VS에서 OpenGL 프로젝트 개발/배포하는 방법

우선은 비주얼 스튜디오를 열고 빈 c/c++ 프로젝트를 생성합니다.

처음 프로젝트(설루션 탐색기에 솔루션'이름'(1/1개 프로젝트) 밑 이름으로 된 프로젝트)를 클릭한 후 메뉴에서 프로젝트(P) > 속성(P) > vc++ 를 클릭합니다. 같은 작업을 debug모드와 release모드에 동일하게 둘 다 해주어야 합니다. 속성 창에서 "모든 구성" 옵션을 사용할 것을 추천합니다. 플랫폼도 "모든 플랫폼"으로 설정해주세요.

 

"포함 디렉터리"에 편집을 눌러 새로운 디렉터리를 연결해줍시다. "편집"을 누르면 뜨는 새로운 창의 맨 윗부분 빈칸을 클릭하고 선택되는 줄의 오른쪽 끝부분을 클릭해보면 "..." 버튼이 나옵니다. 탐색기에서 위 7번에서 추가한 "include" 폴더를 추가해줍시다.

추가되었다면 이번에는 vc++ 메뉴 바로 아래에 있는 링커 메뉴를 클릭합니다. "추가 라이브 디렉터리"에 방금과 같은 방법으로 7번에서 추가한 "lib" 폴더를 추가해줍니다.

링커 메뉴의 하위 메뉴인 입력을 클릭합니다. "추가 종속성"에 glfw3.lib, glew32.lib, soil2-debug.lib, opengl32.lib를 입력해줍니다. 이번에는 "..." 버튼이 나오지 않기 때문에 직접 입력해야 합니다. 이름과 이름은 줄 바꿈으로 구분합니다.

완료되었다면, 속성 창을 닫고, 프로젝트(P) > 템플릿 내보내기 > 프로젝트 템플릿을 선택하세요. 템플릿 이름은 책을 따라 OpenGL project라고 설정했습니다. 템플릿을 내보내면 zip 파일이 하나 생깁니다. 그냥 내버려두면 됩니다. 비주얼 스튜디오에서 새로운 프로젝트를 생성할 때, 목록에 방금 내보낸 템플릿이 보이게 됩니다. 그 템플릿을 선택하여 프로젝트를 생성하면 같은 속성을 가진 프로젝트가 생깁니다. (탬플릿을 만들 때 생성된 레포는 이제 삭제하셔도 됩니다.)

소스 파일 메뉴에 main.cpp 를 추가하여 개발을 시작하게 됩니다. 상위 폴더에 debug와 release 파일에 "glew32.dll"을 추가하여 사용할 수도 있게 됩니다. 개발이 끝나면, release 모드를 통해 .exe 파일을 추출할 수 있고, 쉐이더 파일과 텍스쳐 이미지, 모델 파일, glew32.dll 파일이 폴더에 남아있게 됩니다.

 

+ 201112 오류노트 추가

1) 프로그램 실행 시 "'glfw3.lib' 파일을 열 수 없습니다.", "'glfw.lib' 파일을 열 수 없습니다.", "'glew32.lib' 파일을 열 수 없습니다.", "'glew.lib' 파일을 열 수 없습니다." 등의 오류 메세지가 출력된다면, lib 파일의 이름과 링커 입력 설정의 입력된 이름이 다르기 때문입니다. 프로그램 내에서 서로 언급하는 파일명을 동일하게 하려면, 'glfw.lib', 'glew.lib'로 파일명을 변경하는 것을 추천합니다. (lib 폴더 속 파일)

2) 변경 후에도 'glew.lib' 파일에 대한 오류메세지가 연속적으로 뜨는 것을 확인했습니다. 'glew.lib'로 파일명을 바꾸면 'glew32.lib' 파일이 필요하다며 오류를 내고, 'glew32.lib'로 링커 입력 설정을 바꾸면 'glew.lib' 파일이 필요하다며 오류를 내더군요. 저는 lib 폴더 안에 똑같은 lib 파일을 'glew.lib'와 'glew32.lib' 두개의 이름으로 중복 저장하여 오류를 해결했습니다.

3) 위 오류들을 해결했음에도 빌드가 안된다면, c/c++ 속성 설정에서 추가 포함 디렉터리에 "include" 폴더를 추가해보세요. 그래도 안된다면, 직접 입력한 디렉토리 속성들마다 "부모 또는 프로젝트 기본값에서 상속" 체크박스를 체크해보세요.

4) "... glew32.dll'을(를) 언로드했습니다."라는 오류메세지와 함께 프로그램이 종료된다면, .dll 파일이 프로젝트 코드들이 있는 폴더 안에 위치하는지 확인하세요. 그럼에도 오류가 계속된다면, glew 파일들을 'Win32'가 아닌 '64x' 폴더에서 꺼낸 것이 맞는지 확인하세요.

5) 도움이 필요하다면, 언제든지 댓글을 남겨주세요.

 

 


MacOS 환경 구축

 

제가 맥북을 쓰기 때문에 맥북 기준으로 환경 구축을 설명하겠습니다.

저는 엑스코드로 개발하고요, glfw, glew, glm, soil 2, premake 4, premake5를 사용했습니다.

 

+ 191201 수정 : Mac OS Catalina 업데이트 후 64-bit Mac 용 premake4가 존재하지 않아 soil2의 premake5 업데이트 요청 후 사용했습니다.

+ 위 Windows 환경 구축 전에 쓰인 포스트입니다. 참고하세요.

 

 

1. brew 다운로드

brew.sh/

 

Homebrew

The Missing Package Manager for macOS (or Linux).

brew.sh

위 링크로 들어가면 사실 명령어 밖에 없어요 :

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

위 명령어를 맥 terminal에 복붙해서 쓰시면 다운로드가 시작됩니다.

2. GLFW, glew 설치

다운로드가 완료되면 아래 두 개의 명령어도 실행해 주세요 :

brew install glfw3
brew install glew

 

GL 폴더와 GLFW 폴더가 "/usr/local/include"에 포함되었는지 확인합니다. 맥의 Finder를 실행하고 command + shift + G 키보드를 동시에 누르면 원하는 디렉터리로 이동 가능합니다. 위의 디렉터리 주소를 그대로 복사 붙여 넣기 하시면 돼요. include 안에 GL 폴더와 GLFW 폴더가 있는지 확인하세요. 설치가 제대로 되었다면 잘 있을 겁니다 :

 

 

 

3. glm 설치

github.com/g-truc/glm/tags

 

g-truc/glm

OpenGL Mathematics (GLM). Contribute to g-truc/glm development by creating an account on GitHub.

github.com

공식 깃허브입니다. 최신 버전의 tar.gz를 다운로드하시고 압축 해제하세요.

압축해제를 하면 나타나는 많은 파일들 중 glm이라고 이름 지어진 폴더를 찾아 "/usr/local/include" 디렉터리로 이동시키세요.

이동할 때 terminal 창에서 이 코드를 사용하면 간편합니다 :

mv 이동대상 이동위치

 

 

4. SOIL2, premake4 설치

 

bitbucket.org/SpartanJ/soil2/downloads/

 

SpartanJ / SOIL2 / Downloads — Bitbucket

Name Size Uploaded by Downloads Date Download repository 57.3 KB

bitbucket.org

premake.github.io/download.html

 

Downloads | Premake

Binaries simply need to be unpacked and placed somewhere on the system search path or any other convenient location. The source code package includes solutions, workspaces, and makefiles for all of the supported toolsets in the build/ directory. Premake is

premake.github.io

위 링크에서 soil2와 premake4를 다운로드하세요. (premake5) 버전은 상관없을 것 같습니다. 저는 soil2와 premake4가 가장 최신 베타 버전이라 다운로드하였어요.

먼저 premake의 압축을 풀고, premake의 .exe 파일을 soil2 폴더에 이동시킵니다.

그다음 terminal을 켜고, soil2의 디렉터리로 이동합니다. 사용되는 명령어 :

// 현재 디렉토리의 모든 파일 보기
ls
// 원하는 디렉토리로 이동
cd 디렉토리

soil2 폴더에 도착했다면, 다음 명령어를 차례로 실행합니다 :

./premake5 gmake2

 

(191203 추가 : 혹시, 확인되지 않은 개발자 경고가 떠서 실행이 안된다면 다음 명령어를 실행하고 실행해주세요 :

sudo spctl --master-disable

다시 게이트키퍼를 활성시키려면,

sudo spctl --master-enable

을 실행시켜주면 됩니다.)

저는 아래 명령어를 실행했을 때 몇 가지 에러가 발생했어요. 나중에 문제가 발생하면 제대로 된 파일을 공유하도록 하겠습니다. (191202 추가 : 해당 오류 :

ld: library not found for -lSDL2
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [../../lib/macosx/libsoil2-debug.dylib] Error 

위와 같은 오류가 발생하는 분들은 SDL2를 추가 설치해줘야 합니다.

brew install sdl2

sdl2.framework 폴더를 library/frameworks 디렉터리로 옮기고 같은 명령을 실행하세요. 권한 없음이 나오면 'sudo(관리자 권한)'으로 실행하세요.)

 

cd make/macosx
make

 

src/SOIL2 폴더를 'usr/local/include'로 이동시킵니다. 그다음에는 lib/libsoil2-debug.a 파일을 찾아서 찾기 쉬운 디렉터리로 이동시켜야 합니다. 저는 'usr/local/Frameworks'로 이동시켰어요.

5. Xcode 프로젝트 설정

Xcode를 실행합니다. Command Line Tool (C++) 프로젝트를 새로 생성해주세요. 이후로는 제 깃허브에 있는 wiki의 설명으로 대신할게요 :

1) 프로젝트 이름 클릭 후 build settings > search paths > header search paths 에 /usr/local/include 추가

2) build settings > search paths > library search paths 에 usr/local/Frameworks 추가 (위에서 .a 파일이 다른 위치였으면 그 위치로)

3) build phases > link binary with libraries > '+' > opengl 입력 > OpenGl.framwork > add

4) '+' > core 입력 > CoreFoundation.framwork > add

5) '+' > add other > cmd키 + shift키 + G 누르기 > /usr/local/ 입력 > go > Cellar > glew > 버전 폴더 > lib > .dylib(바로가기 화살표 있는 거 말고) > open

6) '+' > add other > cmd키 + shift키 + G 누르기 > /usr/local/ 입력 > go > Cellar > glfw > 버전 폴더 > lib > .dylib > open

7) '+' > add other > cmd키 + shift키 + G 누르기 > /usr/local/Framework 입력 (.a의 위치) > go > libsoil2-debug.a > open

8) xcode 메뉴(상단바) product > scheme > edit scheme > use custom working directory 체크박스 선택 > 프로젝트 폴더(main.cpp 위치) 입력

(191203 추가 : 위 link bbinary with libraries에 CoreFoundation.framework도 추가해야 SOIL2 에러가 안 남)

+ xcode 메뉴 xcode > preference > location > custom paths > '+' 로 HEADER_SEARCH_PATHS 와 LIBRARY_SEARCH_PATHS 직접 추가 가능

+ xcode navigation 두 번째 아이콘 > remote > 마우스 우클릭 > add existing repository 로 원격 저장소 설정 가능

+ 이름이 같은 프로젝트 파일을 프로젝트 directory로 옮기면 그곳에 있는 소스코드로 프로젝트 빌드 가능

+ xcode 메뉴 xcode > preference > source control > git > ignored files 에 gitignore 대신 파일 기입 가능

 

 

728x90

댓글