위 이미지와 같이 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;
}
다음 글에서는 좀더 복잡한 것들을 해보자

댓글 없음:
댓글 쓰기