OpenGL 프로젝트 < animate the fire > 팀명 Basis 20051441 김수영 20051559 양자경 20051664 차미나
CONTENTS 목적 및 개요 프로젝트 소개 소스분석 결과보고 실행화면(1),(2) 프로젝트 후기 Computer Graphics(20071)
목적 및 개요 그래픽 프로그래밍에 대한 이해. OpenGL에 관한 이해. 전체적으로 깊이 있는 학습 유도. 개인 능력 확인 및 향상. 수업 내용의 응용 학습 유도. 팀 프로젝트 적응 및 팀원간의 유대감형성 개발환경) WindowsXP, Microsoft Visual C++ 6.0 Computer Graphics(20071)
프로젝트 소개 animate the fire은 OpenGL을 사용하여 모닥불을 피우는 모습을 표현한 작품이다. Computer Graphics(20071)
소스분석 // 타이머 정보. 성능 다른 컴퓨터들 사이에서 프레임 동일 유지를 위해,, extern float fTime, fDeltaTime; // Current window dimensions. extern GLsizei g_w, g_h; #ifndef NOEXTENSION extern HWND g_hwnd; #endif #include "FirePart.h" // 메시지창 호출 함수 bool Splash() { Computer Graphics(20071)
소스분석 return MessageBox(NULL, " \" \" : rotate/stop camera\n" " ENTER : stop fire animation\n" " ESC : put water on the fire\n" "\n" "Enjoy it :-) Hufo / N.A.A.\n" ,szAppName ,MB_OKCANCEL | MB_ICONWARNING) == IDOK; return True; } #endif bool Init() // 윈도우 초기화 함수 뒤에 OpenGL 초기화 위해 불려짐 { glMatrixMode(GL_PROJECTION); // projection모드로 설정하여 glLoadIdentity(); // GL Matrix 초기화한다. Computer Graphics(20071)
소스분석 float x = (float)g_w/(float)g_h; // Correct the viewing ratio of the window in the X axis. if (x>XSTD) gluOrtho2D( -x, x, -1, 1 ); // Reset to a 2D screen space. else gluOrtho2D( -XSTD, XSTD, -XSTD/x, XSTD/x ); // Reset to a 2D screen space. x0=x; // Reset model view matrix stack. glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); // modelview 모드 설정후 Matrix 초기화 glCullFace(GL_FRONT); // 앞면만 그려지도록 컬링 모드 설정 glDepthFunc(GL_LESS); glBlendFunc(GL_SRC_ALPHA,GL_ONE); // 반투명 텍스쳐 위해 블렌딩 모드 지정 Computer Graphics(20071)
소스분석 for (int i=0;i<9;++i) { CylColor[i].r=CylBColor.r*CylShad[i]; CylColor[i].g=CylBColor.g*CylShad[i]; CylColor[i].b=CylBColor.b*CylShad[i]; } TFire=0.0; TVit=1.0; FireInit(); // initialise fire return true; //모든 것이 잘 동작한다면, return은 true Computer Graphics(20071)
소스분석 #ifndef NOEXTENSION static float secTime=fTime; static int nf=0; if (fTime-secTime>=1.0) { // aff framerate char buf[256]; sprintf(buf,"%s - %g fps",szAppName,nf/(fTime-secTime)); SetWindowText(g_hwnd,buf); secTime=fTime; nf=0; } #endif TFire+=fDeltaTime*TVit; CalcFire(TFire,fDeltaTime*TVit); // 불을 움직이게 함. glClear( GL_COLOR_BUFFER_BIT Computer Graphics(20071)
결과보고 GL Matrix 초기화 >>> modelview 모드 설정후 Matrix 초기화하여 앞면만 그려지도록 컬링 모드 설정, 반투명 텍스쳐 위해 블렌딩 모드 지정 불을 움직이게 한다. CalcFire(TFire,fDeltaTime*TVit); Computer Graphics(20071)
실행화면 그림(1) 실행 초기 화면 Computer Graphics(20071)
실행화면 그림(2) 모닥불꺼지는 모습 Computer Graphics(20071)
프로젝트 후기 그저 결과물만 보기에는 정말 간단한 프로그램이다. 하지만 게임이나 영화에서나 보던 컴퓨터 그래픽으로 처음으로 직접 제작해 보고 그 원리와 구조를 알게 된 것은 값진 수확이라고 생각한다. Computer Graphics(20071)