Mac에서 freeglut 사용하는 방법 (with Cmake)
by luis lee
freeglut 이란?
opengl 을 처음 입문하게 된다면 gl 와 glut 에 대해서 익숙할 것이다.
그런데 처음엔 opengl 을 사용하고 싶은것 뿐인데, glut 이라는 것을 왜 사용해야되는지 몰랐다.
계속해서 공부해 나가다 보니, opengl 의 생태계에 대해서 공부하게 되었고 gl, glut, glew, glfw 와 같은
여러 라이브러리의 탄생과 존재이유에 대해 알게되었다.
이번 포스팅은 간단하게 freeglut 을 mac os 에서 사용할 수 있게 세팅하는 것이기 때문에 gl 과 glut , 그리고
freeglut 에 대해서 말해보고자 한다.
gl.h
만 사용해도 openGL 을 이용할 수 있다.- 하지만 keyboard,mouse,display,window callback 등의 모든 함수를 우리가 직접 구현해야하는 문제점이있다.
- 즉
gl.h
에는 원론적인, low level 의 기능을 제공하고 있기 때문에 사용자가 직접 이용하기 힘들다. - 따라서 glut(GL Utility Toolkit) 은 gl.h 의 함수를 이용해 사용자에게 high level 함수를 제공한다.
- 즉 glut 을 사용하게 되면 keyboard,mouse,display,window 함수 등을 구현하지 않고 쉽게 이용할 수 있게된다.
결론적으로 glut 은 gl 함수들을 사용자 편의에 맞추어 미리 작성해놓은 함수 집합들이라고 할 수 있다.
그렇다면 glut과 freeglut 의 차이는 무엇인가?
- glut 과 freeglut 의 존재이유는 똑같다.
- 둘 모두 utility toolkit 이다.
- 그러나 glut 은 1998년 이후로 업데이트를 하지 않았으며 라이센스 문제가 있다.
- freeglut 은 계속해서 update 되고 있으며 기존의 glut 라이브러리를 개선시킨 버젼이다.
- 또한 freeglut 에는 mac,window,linux 등 다양한 os 에서의 glut include path 를 지원한다.
- 필자는 위의 모든 os 에서 작업을 하고 있기 때문에 freeglut 을 애용한다.
따라서 기본 glut 라이브러리 대신 freeglut 을 사용하는 방법에 대해 이야기해보겠다.
준비물
- freeglut
- homebrew 를 이용해서 freeglut 을 다운받는다.
- 자세한 것은 구글링하면 잘 나온다.
- cmake
- 이하 동문
MAC 에서 freeglut 사용하기.
필자는 window, linux 에서 주로 작업을 했으며 linux 의 경우는 CLI를 이용해서 freeglut 을 쉽게 설치하고 glut path 를 쉽게 잡아주었기 때문에 문제없이 환경설정을 할 수 있었다. 하지만 MAC 에서 opengl 프로젝트를 다시 빌드하려다보니 mac 의 original glut path 때문인지 잘 안됬다. 그렇기 때문에 본 포스팅을 작성하게 되었다.
freeglut path 확인
freeglut 을 다운받았다면 어디에 저장되어었는지 확인해보자. 잘 받았다면
/opt/X11/include/GL => 헤더
/opt/X11/lib/libglut.3.dylib => 라이브러리
에 잘 저장되어 있을 것이다.
cmake 에서 freeglut path 설정
CMAKE_MINIMUM_REQUIRED ( VERSION 3.0.0 )
# 프로젝트 이름 및 버전
PROJECT ( "test" )
# 빌드 대상 바이너리 파일명 및 소스파일 목록
SET ( OUTPUT_ELF
"test.out"
)
SET ( SRC_FILES
"./test.cpp"
)
# 공통 컴파일러
SET ( CMAKE_CXX_COMPILER "clang++" )
find_package(OpenGL REQUIRED)
#find_package(GLUT REQUIRED)
set(GLUT_LIBRARIES libglut.3.dylib)
set(GLUT_INCLUDE_DIRS /opt/X11/include)
set(GLUT_LIBRARY_DIRS /opt/X11/lib)
INCLUDE_DIRECTORIES ( ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} )
ADD_COMPILE_OPTIONS ( "-g" )
LINK_LIBRARIES( ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} )
LINK_DIRECTORIES ( ${OPENGL_LIBRARY_DIRS} ${GLUT_LIBRARY_DIRS} )
ADD_EXECUTABLE( ${OUTPUT_ELF} ${SRC_FILES} )
다음과 같이 cmake 파일을 작성했다. 실제로 필자의 경우에는 cmake 에서 glut 패키지를 찾는경우 확인해본 결과 원하는 디렉토리의 라이브러리에 접근하지 못하였다. 따라서
#find_package(GLUT REQUIRED)
set(GLUT_LIBRARIES libglut.3.dylib)
set(GLUT_INCLUDE_DIRS /opt/X11/include)
set(GLUT_LIBRARY_DIRS /opt/X11/lib)
를 통해서 find_package 로 맡기지 말고 직접 glut libaray 경로와 include 경로를 설정해 주었다.
소스코드 작성
이 소스코드의 경우에는 인터넷 상의 test code를 가져온 것으로
본인만의 test 코드를 작성해보면 된다.
다만 주의할 점은 glut.h 와 gl.h 가 아니라
다음과 같이 freeglut.h
로 헤더를 입력해야한다.
#include <iostream>
#include <GL/freeglut.h>
/* Handler for window-repaint event. Call back when the window first appears and
whenever the window needs to be re-painted. */
void display() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set background color to black and opaque
glClear(GL_COLOR_BUFFER_BIT); // Clear the color buffer
// Draw a Red 1x1 Square centered at origin
glBegin(GL_QUADS); // Each set of 4 vertices form a quad
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex2f(-0.5f, -0.5f); // x, y
glVertex2f( 0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush(); // Render now
}
/* Main function: GLUT runs as a console application starting at main() */
int main(int argc, char** argv) {
glutInit(&argc, argv); // Initialize GLUT
glutCreateWindow("OpenGL Setup Test"); // Create a window with the given title
glutInitWindowSize(320, 320); // Set the window's initial width & height
glutInitWindowPosition(50, 50); // Position the window's initial top-left corner
glutDisplayFunc(display); // Register display callback handler for window re-paint
glutMainLoop(); // Enter the infinitely event-processing loop
return 0;
}
확인하기
결과가 잘 나온다면 알맞게 freeglut 을 mac 에서 사용할 수 있게 된것이다. 만약 결과가 안나오고 linker error 가 나온다면 자신이 설치한 freeglut 의 문제일 수 도 있고, 라이브러리 경로, include 경로, 라이브러리 파일이름이 맞는지 확인을 해 보자.
끝
필자의 개발환경이기 때문에 맹신하지 말고 본인의 환경에 맞게 이 글을 활용하면 될것 같습니다.
Subscribe via RSS