LoginSignup
15
15

More than 5 years have passed since last update.

Qt+OpenGLの環境を整備する

Last updated at Posted at 2013-10-14

QtのOpenGLの歴史

  • Qt4系では QGLWidget などの QGL... というクラス群が用意されていた。
    • OpenGLとOpenGL ESの差異はユーザー側で吸収する必要がある。
  • Qt5ではQOpenGLで始まるクラス群が追加された

ここではQt4系のQGL...のクラスを使う方法について説明する。

Hello Qt+OpenGL

概要

QGLWidgetを継承したクラスをプロジェクトに追加し、

  • initializeGL
  • resizeGL
  • paintGL

の3つのvirtual functionを実装する。

手順

http://www.youtube.com/watch?v=1nzHSkY4K18 の手順を参考に。

  • QtGUIアプリケーションを新規作成
  • .proを編集。QTに opengl を追加する
  • QGLWidget を継承したクラス(ここではMyGLWidgetとする)を追加
    • Projectを右クリックし、クラスを追加。
      • 基底クラスをQGLWidgetにする
      • 型情報で QWidgetを継承を選択
  • MyGLWidgetクラスに initializeGL, resizeGL, paintGLの3つの仮想関数の実装を追加する。
myglwidget.h
...
public:
    explicit MyGLWidget(QWidget *parent = 0);
    virtual void initializeGL();
    virtual void resizeGL(int w, int h);
    virtual void paintGL();
...
myglwidget.cpp
void MyGLWidget::initializeGL() {
}

void MyGLWidget::paintGL() {
}

void MyGLWidget::resizeGL(int w, int h) {
}

  • UIにwidgetを追加。widgetを右クリックして「格上げ先を指定」し、MyGLWidgetを追加

    • この時点でビルドするとwidget部分には化けたような画像が表示される。適切にOpenGLを初期化していないため
  • initializeGL, paintGLを実装

myglwidget.cpp
void MyGLWidget::initializeGL() {
    glClearColor(0.1, 0.1, 0.1, 1);
}

void MyGLWidget::paintGL() {
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_TRIANGLES);
    glColor3f(1,0,0);
    glVertex3f(-0.5, -0.5, 0);
    glColor3f(0,1,0);
    glVertex3f( 0.5,-0.5,  0);
    glColor3f(0,0,1);
    glVertex3f( 0, 0.5, 0);
    glEnd();

}

void MyGLWidget::resizeGL(int w, int h) {
}
  • このような画像が描画される

kobito.1381728084.266932.png

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15