위 이미지와 같이 3차원 공간에 몇개의 도형을 렌더링 하는 코드를 작성해 보도록 하자.
우선 할것은 App 를 상속받는 것이다.
---------------------------------------ex1.h
#ifndef EX1_H #define EX1_H #include "app.h" class Example1 : public App { public: bool OnInit(int argc, TCHAR* argv[]); void OnEvent(SDL_Event* Event); void OnLoop(); void OnRender(); void OnCleanUp(); private: public: Example1(); virtual ~Example1(); }; #endif
다음으로 할것은 실제 이벤트 핸들러등을 구현하는 것이다.
--------------------------------------- ex1.cpp
#include "ex1.h" #include "log.h" Example1::Example1() {} Example1::~Example1() { } bool Example1::OnInit(int argc, TCHAR* argv[]) { return true; } void Example1::OnEvent(SDL_Event* Event) {} void Example1::OnLoop() {} void Example1::OnRender() { glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity(); gluLookAt(5,5,10, 0,0,0,0,1,0); static float angle =0; glRotatef(angle += 1, 0,1,0); glBegin( GL_TRIANGLES ); glColor3f(1, 1, 1); glVertex3f( 0.0f, 1.0f, 0.0f ); glVertex3f( -1.0f, -1.0f, 0.0f ); glVertex3f( 1.0f, -1.0f, 0.0f ); glEnd( ); glPushMatrix(); glTranslatef( 3.0f, 0.0f, 0.0f ); glBegin( GL_QUADS ); glColor3f(1, 1, 0); glVertex3f( -1.0f, 1.0f, 0.0f ); glVertex3f( 1.0f, 1.0f, 0.0f ); glVertex3f( 1.0f, -1.0f, 0.0f ); glVertex3f( -1.0f, -1.0f, 0.0f ); glEnd( ); glPopMatrix(); glBegin(GL_LINES); glColor4f(1, 0, 0, 1); glVertex3f( 0.0f, 0.0f, 0.0f ); glVertex3f( 5.0f, 0.0f, 0.0f ); glColor4f(0, 1, 0, 1); glVertex3f( 0.0f, 0.0f, 0.0f ); glVertex3f( 0.0f, 5.0f, 0.0f ); glColor4f(0, 0, 1, 1); glVertex3f( 0.0f, 0.0f, 0.0f ); glVertex3f( 0.0f, 0.0f, 5.0f ); glEnd(); } void Example1::OnCleanUp() { }
자 모든 구현이 완료되었다. 오직 화면을 렌더링하는 이벤트(OnRender)만 구현하였으며 다른 이벤트는 모두 미 구현상태이다. 특히 OpenGL 함수들로만 구성되어 있어 SDL 등의 익숙치 않는 함수들은 전혀 포함되어 있지 않아 쉽게 응용이 가능하게 되었다.
시작점 즉 메인함수의 모습은 아래와 같다.
#include <windows.h> #include "app.h" #include "ex1.h" int _tmain(int argc, TCHAR* args[]) { App* app = new Example1; int n = app->Execute(argc, args); return n; }
다음 글에서는 좀더 복잡한 것들을 해보자
댓글 없음:
댓글 쓰기