반응형



OpenGL( freeGLUT ) 코드를  Visual Studio 2015에서 컴파일 하기 위해서 필요한 작업을 진행해보았습니다. 



빈 프로젝트 파일 생성


Visual Studio 2015를 실행시키고 메뉴에서 파일-새로 만들기-프로젝트를 선택합니다. 왼쪽 항목 중에 Win32를 선택하고 오른쪽 창에서 Win32 콘솔 응용프로그램을 선택합니다.  적당한 프로젝트 이름과 위치를 지정해 줍니다.



응용프로그램 마법사에서 응용 프로그램 설정할 때, 빈 프로젝트를 선택해주고 SDL은 체크 해제합니다. 



왼쪽 프로젝트 창에서 소스 파일 항목을 선택한 후 마우스 오른쪽 버튼을 눌러 나오는 메뉴에서 추가 - 새 항목을 선택합니다.  새 항목 추가 창이 뜨면 C++ 파일(cpp)를 선택하고 이름을 main.cpp로 수정한 후 추가 버튼을 클릭합니다.




glew 라이브러리를 프로젝트 폴더로 복사


https://sourceforge.net/projects/glew/files/glew/에서 현재 최신 버전인 glew-2.0.0-win32.zip을 다운로드 받아 압축을 풀어 줍니다. 


이후 중복되는 것을 피하기 위해서 경로를 일부만 적었습니다. 예를 들어 프로젝트관련 경로를 아래처럼 다 표시하는 대신에 

C:\Users\webnautes-NoteBook\Documents\VC\glut_test\glut_test 


사용자마다 달라질 수 있는 C:\Users\webnautes-NoteBook\Documents\VC\는 생락하고 프로젝트 폴더 이후부터 경로를 적었습니다.

glut_test\glut_test


glew 압축을 푼 폴더 glew-2.0.0-win32\glew-2.0.0\bin\Release\x64 경로에 있는 glew32.dll파일을  프로젝트 폴더 glut_test\x64\Debug 경로로 복사해줍니다. 


프로젝트 폴더 glut_test\glut_test 경로에 library폴더를 생성한 후, glew 압축을 푼 폴더 glew-2.0.0-win32\glew-2.0.0\lib\Release\x64 경로에 있는 glew32.lib과 glews32.lib 파일을 복사하여 프로젝트 폴더 glut_test\glut_test\library 경로에 붙여넣어 줍니다. 


glew 압축을 푼 폴더 glew-2.0.0-win32\glew-2.0.0 경로에 있는 include 폴더를 복사하여  프로젝트 폴더 glut_test\glut_test 경로에 붙여넣어 줍니다.



freeglut 라이브러리를 프로젝트 폴더로 복사


http://www.transmissionzero.co.uk/software/freeglut-devel/에서 freeglut MSVC Package를 다운로드 받아 압축을 풀어줍니다.  현재 버전은 3.0.0입니다. 


freeglut 압축을 푼 폴더 freeglut-MSVC-3.0.0-2.mp\freeglut\bin\x64 경로에 있는 freeglut.dll 파일을 복사하여 프로젝트 폴더 glut_test\x64\Debug 경로에 붙여넣어 줍니다.


freeglut 압축을 푼 폴더 freeglut-MSVC-3.0.0-2.mp\freeglut\lib\x64 경로에 있는 freeglut.lib 파일을 복사하여 프로젝트 폴더 glut_test\glut_test\library경로에 붙여넣어 줍니다.


freeglut 압축을 푼 폴더 freeglut-MSVC-3.0.0-2.mp\freeglut 경로에 있는 include 폴더를 복사하여 프로젝트 폴더 glut_test\glut_test 경로에 붙여넣어 줍니다



프로젝트 설정


glew와 freeglut 라이브러리 관련 파일들을 프로젝트 폴더로 복사하면 다음과 같은 구조가 됩니다.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
glut_test(프로젝트 폴더)
│  glut_test.sln
│  glut_test.VC.db
├─Debug
├─glut_test
│  │  glut_test.vcxproj
│  │  glut_test.vcxproj.filters
│  │  main.cpp
│  │
│  ├─Debug
│  │  └─glut_test.tlog
│  ├─include
│  │  └─GL
│  │          eglew.h
│  │          freeglut.h
│  │          freeglut_ext.h
│  │          freeglut_std.h
│  │          glew.h
│  │          glut.h
│  │          glxew.h
│  │          wglew.h
│  │
│  ├─library
│  │      freeglut.lib
│  │      glew32.lib
│  │      glew32s.lib
│  │
│  └─x64
│      └─Debug
│          │  glut_test.Build.CppClean.log
│          │  glut_test.log
│          │  main.obj
│          │  vc140.idb
│          │  vc140.pdb
│          │
│          └─glut_test.tlog
│                  CL.command.1.tlog
│                  CL.read.1.tlog
│                  CL.write.1.tlog
│                  glut_test.lastbuildstate
│                  link.command.1.tlog
│                  link.read.1.tlog
│                  link.write.1.tlog
└─x64
    └─Debug
            freeglut.dll
            glew32.dll
            glut_test.exe
            glut_test.ilk
            glut_test.pdb
cs



Visual Studio 예전 버전(2008 ?) 사용시에는 DLL 파일들을 프로젝트 폴더 glut_test\glut_test 경로에 넣어주어야  Visual Studio에서 프로그램 실행시 DLL파일을 못찾는 다는 에러 없었던거 같은데..  


지금 사용 중인 visual studio 2015에서 해보니 DLL파일을 프로젝트 폴더 glut_test\glut_test 경로에 넣어도 되고 실행파일이 생성되는 경로인 glut_test\x64\Debug 경로에 넣어도 되는 군요..



이제 Visual Studio의 상단에 있는 콤보박스의 x86을 x64로 변경합니다.


메뉴에서 프로젝트 - 속성을 선택한 후, 속성 페이지 창이 뜨면 왼쪽 항목에서 링커 - 일반을 선택합니다. 오른쪽 항목 중 추가 라이브러리 디렉터리를 선태하고 .\library를 추가해줍니다. main.cpp가 있는 폴더를 기준으로 라이브러리가 있는 폴더를 상대 경로로 적어 준 것입니다.



GLUT 예제 컴파일 및 실행 태스트

http://www.lighthouse3d.com/tutorials/glut-tutorial/animation/에 있는 예제 코드를 사용하여 테스트를 진행하였습니다. 


프로젝트 속성에서 설정해주지 않아서 코드 상단 1~6줄은 GLUT 소스코드 마다 넣어주어야 합니다.  프로젝트 속성에서 추가해주셔도 됩니다.


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//상대경로로 헤더파일을 지정합니다.
#include ".\include\GL\freeglut.h"
 
//사용할 라이브러리를 지정해줍니다.
#pragma comment(lib, "freeglut.lib")
#pragma comment(lib, "glew32.lib")
 
 
void changeSize(int w, int h) {
 
    // Prevent a divide by zero, when window is too short
    // (you cant make a window of zero width).
    if (h == 0)
        h = 1;
 
    float ratio = w * 1.0 / h;
 
    // Use the Projection Matrix
    glMatrixMode(GL_PROJECTION);
 
    // Reset Matrix
    glLoadIdentity();
 
    // Set the viewport to be the entire window
    glViewport(00, w, h);
 
    // Set the correct perspective.
    gluPerspective(45.0f, ratio, 0.1f, 100.0f);
 
    // Get Back to the Modelview
    glMatrixMode(GL_MODELVIEW);
}
 
float angle = 0.0f;
 
void renderScene(void) {
 
    // Clear Color and Depth Buffers
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
    // Reset transformations
    glLoadIdentity();
    // Set the camera
    gluLookAt(0.0f, 0.0f, 10.0f,
        0.0f, 0.0f, 0.0f,
        0.0f, 1.0f, 0.0f);
 
    glRotatef(angle, 0.0f, 1.0f, 0.0f);
 
    glBegin(GL_TRIANGLES);
    glVertex3f(-2.0f, -2.0f, 0.0f);
    glVertex3f(2.0f, 0.0f, 0.0);
    glVertex3f(0.0f, 2.0f, 0.0);
    glEnd();
 
    angle += 0.1f;
 
    glutSwapBuffers();
}
 
int main(int argc, char **argv) {
 
    // init GLUT and create window
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100100);
    glutInitWindowSize(320320);
    glutCreateWindow("Lighthouse3D- GLUT Tutorial");
 
    // register callbacks
    glutDisplayFunc(renderScene);
    glutReshapeFunc(changeSize);
    glutIdleFunc(renderScene);
 
    // enter GLUT event processing cycle
    glutMainLoop();
 
    return 1;
}
cs



실행시켜 보니 윈도우 안에서 삼각형이 회전하게 계속 반복됩니다. 별문제 없이 사용가능할 듯합니다. 혹 문제 발생하면 댓글로 알려주세요..


반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts