OpenGL:glutでオブジェクト指向

opengl-class.png

!古い記事! GLFWを使えば、static関数やグローバル変数を使わなくても
OpenGLとオブジェクト指向を両立できます。→この記事を参考に

  • 自分のOpenGLクラス.cppにextern クラス名 g変数名;と書く
  • そのクラスを使う側に同じ変数名で宣言するクラス名 g変数名;
  • コールバック関数は自分のOpenGLクラス.cppの中でstaticで書く。クラスメンバを呼びたいときg変数名->を使う

最低限こんなかんじ

#include "TimeSlider.h"
extern CTimeSlider *gTimeDialog;
static void reshape (int w, int h)
{
    glViewport (0, 0, (GLsizei) w, (GLsizei) h);
    // 次の3行で投影行列を規定
    glMatrixMode (GL_PROJECTION); // 今から投影行列を設定すると宣言
    glLoadIdentity ();            // 単位行列をセット
    // 直交投影
    gluOrtho2D (0,240,-25,25);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}
static void display(void){
    glClearColor(0.0f,0.0f,0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    gTimeDialog->Draw();
    glutSwapBuffers();
}
static void mouse(int button , int state , int x , int y) {
    if (button != GLUT_LEFT_BUTTON || state != GLUT_DOWN) return;
 
    glutPostRedisplay();
}
CTimeSlider::CTimeSlider(unsigned int _parentID,unsigned int _width,ISlider* _para)
{
    glutCreateSubWindow(_parentID,0,600,_width,50);
    glutReshapeFunc(reshape);
    glutDisplayFunc(display);
    glutMouseFunc(mouse);  //note we share the mouse function
    glutSetWindow(_parentID);
    m_Time=_para;
    m_Slider=CSlider(vec2<int>(120,0),240,color<unsigned char>(0,255,255,255),14,m_Time);
}
 
CTimeSlider::~CTimeSlider(void)
{
}

object-oriented opengl

サポートサイト Wikidot.com object-orientedopengl