VDragon (aka MrGobus)
GameDev.ru / Страницы / VD / Статьи / (GE) Game Engine by MrGobus

(GE) Game Engine by MrGobus

Автор:

Вы новичек в программировании, и хотите поковырять OpenGL 3.3 Core, но все эти трудности с недоделанным SDL, или freeGlut'om пугают вас.
Вы противник процедурного подхода в глут и его клонах
Вы собрались кодить 3D графику а не ковырятся в какомто там WinAPI
Вы противник буржуйского софта и патриот России матушки !!!

РАЗРЕШИТЕ ПРЕДСТАВИТЬ!!!
(GE) Game Engine от MrGobusa

Для того чтобы оно заработало вам будет достаточно Visual Studio Express 10 (в теории заработает и на 2005 студии, но мне влом собирать под нее)
Уже настроенный проект подключит все библиотеки (да да целый glew) и все, что вам останется - это чистое творчество по описанию событий класса.
Поддержка Core и Compatability профайлов даст вам доступ ко всей палитре возможностей OpenGL 3.3

Все что вам нужно чтобы начать кодить это.
1. Скачать сей совершенное бесплатный продукт (пожертвования приветствуются)
2. Распаковать
3. Двойной клик на ge.sln
4. В "обозревателе решений" выбираем project\Файлы исходного кода\main.cpp
5. Кодим.

Для любителей интеллектуального вникания без чтения мануалов в main.cpp создан класс пример в котором вы может понять как и что работает. Если же есть желание и время то в папке проекта doc вы можете найти краткий мануал по библиотеке.
Кстати из мануала можно узнать много интересного, например то, что библиотека это не только окно, но и поддержка таймера, клавиатуры и мыши.

Со временем, когда "Нью-Васюки" станут столицей вселенной а GE затмит своей крутостью GLUT и прочие приблудный вроде ORGE и т.п.  список поддерживаемых устройств и фичей будет существенно расширен.

Пример создания класса и инициализации библиотеки

#include <ge.h>

//создаем класс сцены
class my_scene:public ge::ge_scene{
public:

  unsigned int fps;
  unsigned int fpst;

  bool rotate;
  float x_angel;
  float z_angel;

  //инициализация сцены
  virtual void on_start(){
    fps=0;
    fpst=ge::system.timer.ticks;
    x_angel = 0.0f;
    z_angel = 0.0f;
    glClearColor(0.1f,0.1f,0.2f,1.0f);
    rotate = false;
  }

  virtual void on_draw(){
    //очищаем экран
    glClear(GL_COLOR_BUFFER_BIT);

    //крутим
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0,0,-1.5);
    glRotatef(x_angel,0,0,1);
    glRotatef(-z_angel,1,0,0);

    //рисуем
    glBegin(GL_QUADS);
      glColor3ub(255,255,0);
      glVertex2f(-0.5,-0.5);
      glColor3ub(255,0,255);
      glVertex2f( 0.5,-0.5);
      glColor3ub(0,255,0);
      glVertex2f( 0.5, 0.5);
      glColor3ub(0,255,255);
      glVertex2f(-0.5, 0.5);
    glEnd();

    //говорим что надо показать пользователю
    ge::system.redraw();

    //считаем фпс
    fps++;
    if (ge::system.timer.ticks>(fpst+1000)){
      wchar_t buffer[100];
      wsprintf(buffer,L"FPS = %d",fps);
      ge::system.window.set_title(buffer);
      fps = 0;
      ge::system.timer.update();
      fpst = ge::system.timer.ticks;
    }

  }

  virtual void on_mouse_down(int x, int y, char ebtn){
    if (ebtn == 0)
      rotate = true;
  }

  virtual void on_mouse_up(int x, int y, char ebtn){
    if (ebtn == 0)
      rotate = false;
  }

  //движение мышей
  virtual void on_mouse_move(int x, int y){
    if (rotate){
      x_angel+=(float)ge::system.mouse.xrel;
      z_angel+=(float)ge::system.mouse.yrel;
    }
  }

  //именение размера окна
  virtual void on_resize(int width, int height){
    glViewport(0,0,width,height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-0.5,0.5,0.5,-0.5,1,1000);
  }

};

//инициализация и запуск
int main(int argc, char **argv){
  if (ge::system.init(512,512,24,L"Hello world",0)) {
    ge::system.run(new(my_scene));
    ge::system.quit();
  }
  return 0;
}

ЗАИНТЕРЕСОВАЛИСЬ, Тогда качать тут : GE 08-02-2012

8 февраля 2012

#3.3, #core, #keyboard, #mouse, #OpenGL, #WinAPI, #Window

2001—2018 © GameDev.ru — Разработка игр