2014년 7월 23일

SDL2 기반의 OPENGL 렌더링 데모 1부

앞선글에서 SDL2 및 이를 쉽게 OPENGL 기반으로 응용할수 있는 개발 환경을 소개한 바 있다. App 라는 클래스를 상속받아 렌더링 부분등의 이벤트만 구현해주면 쉽게 접근이 가능하다.




위 이미지와 같이 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;  
}

다음 글에서는 좀더 복잡한 것들을 해보자

댓글 없음:

댓글 쓰기

시리우스 라이브러리 홈페이지 오픈

현재 시리우스(Sirius) 라이브러리라는 제품을 개발하고 이를 소개하는 홈페이지를 오픈 하였습니다. 관심있는 분들의 많은 방문 요청드립니다. 앞으로 업데이트 소식및 변경사항은 스파이럴랩 홈페이지를 통해 진행할 예정입니다. 스파이럴랩 홈페이지 :  h...