Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
16
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Qt+OpenGLの環境を整備する

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
16
Help us understand the problem. What are the problem?