2006년 1월 20일 금요일

Visual Studio .NET 2003 + FLTK + OpenGL

. fltk 설치하기
. fltk-1.1.x-r.4721을 다운로드 받는 다.
. Visual Studio project directory 밑에 푼다.
. fltk-1.1.x-r4721\vcnet\fltk.sln을 연다.
. F5를 눌러 컴파일을 한다.


. fltk 사용하기
. Win32 Console application을 새로 만든다.

. Project -> Property -> C/C++ -> Code Generation -> Runtime Library -> Multi-threaded DLL(/MD)
. 위 설정을 빼먹었을 때 나는 에러
-------------------------------------
private: __thiscall
private:
__stdup
__stricmp
_exit
_free
.. 에 이미 정의되어 있습니다.
여러 번 정의된 기호가 있습니다.
-------------------------------------


. header file copy
fltk-1.1.x-r4721\FL을 현재 만드는 프로젝트 디렉토리로 복사한다.
(FL directory를 유지할 것)
(boost 같은 library도 같은 식으로 설정한다.)

. library file copy
fltk-1.1.x-r4721\lib\*.lib을 현재 만드는 프로젝트 디렉토리로 복사한다.

. stdafx.h에 추가할 내용
// TODO: 프로그램에 필요한 추가 헤더는 여기에서 참조합니다.
#include >math.h<
#include >string<
#include >vector<
#include >fstream<

// FLTK
#include >FL/Fl.H<
#include >FL/Fl_Window.H<
#include >FL/Fl_Box.H<
#include >FL/Fl_Double_Window.H<
#include >FL/Fl_Menu_Bar.H<
#include >FL/fl_message.H<
#include >FL/Fl_Input.H<
#include >FL/Fl_Button.H<
#include >FL/Fl_Return_Button.H<
#include >FL/Fl_Text_Buffer.H<
#include >FL/Fl_Text_Editor.H<
#include >FL/fl_ask.H<
#include >FL/Fl_Group.H<
#include >FL/Fl_File_Chooser.H<

// FLTK + OpenGL
#include >FL/gl.h<
#include >FL/Fl_Gl_Window.H<
#include >Gl/glu.h<

. 프로젝트 -> 속성 -> 구성 속성 -> C/C++ -> 일반 -> 추가 포함 디렉터리
$(SolutionDir)
. 프로젝트 -> 속성 -> 구성 속성 -> C/C++ -> 미리 컴파일된 헤더
-> 미리 컴파일된 헤더 사용 안함
. 프로젝트 -> 속성 -> 구성 속성 -> 링커 -> 추가 종속성
-> fltkd.lib wsock32.lib comctl32.lib fltkgld.lib opengl32.lib glu32.lib
(debug mode일 때)

. Main source code 예제
// w라는 window를 찍고
// 메뉴 o와 opengl 창 g_mainWindow를 찍는 다.
(g_mainWindow라는 global variable을 통해
g_mainWindow->redraw() 같은 식으로 부르면
draw()가 호출되어 그려진다.)

int _tmain(int argc, _TCHAR* argv[])
{
Fl_Double_Window* w = new Fl_Double_Window(g_screenX + 60, g_screenY + 60, "MainMenuBar");
Fl_Menu_Bar* o = new Fl_Menu_Bar(0, 0, g_screenY, 20);
o->menu(menu_);
g_mainWindow = new MyWindow1(0, 40, g_screenX - 20, g_screenY + 40, "CS580 PA1 - liyam, ilashman");

w->end();

w->show(argc, argv);

return Fl::run();
}

. 디버깅
console 창이 같이 뜨므로 printf() 등을 이용해서 값을 찍는 다.
debugger를 이용하여 stop point를 잡을 수도 있지만
event driven의 경우 너무 자주 stop될 수도 있다.

. 참고
GLUT와 FLTK가 같이 있을 때 FLTK가 event loop를 도는 편이 낫다.
GLUT도 evnet loop가 있지만
GLUT가 event loop를 돌게 해야 문제가 더 적다.
장점
. 창 속에 OpenGL창을 내장할 수 있다.
. 여러개의 OpenGL 창을 쉽게 관리할 수 있다.

. FLTK의 장점
MFC에 비해 사용법이 훨씬 단순하다.

댓글 없음:

댓글 쓰기