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を継承を選択
- Projectを右クリックし、クラスを追加。
- 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) {
}
- このような画像が描画される
- 今回のソースは https://bitbucket.org/yohm/helloqtgl に置いた。