カテゴリー別アーカイブ: OpenGL

QOpenGLWidget 入門 (1)

Qt で OpenGL を使う場合、従来は QGLWidget を使っていたが、
Qt 5.4(?) で QOpenGLWidget が導入され、QGLWidget は非推奨となった。
なので、本稿ではその QOpenGLWidget を試してみることにする。

なお、QGLWidget を使う場合のコードは Qt + OpenGL 入門 を参照してほしい。

再実装が必要なメソッドは以下の3つ。これは QGLWidget の場合と同じだ。

  • void initializeGL()
  • void resizeGL(int w, int h)
  • void paintGL()

QGLWIdget との違いは、OpenGL のコマンドを直接実行するのではなく、

QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();

で、OpenGL コマンドを実行するためのオブジェクトを取得し、それに対してコマンドを実行するという点だ。

以下に、最も簡単なサンプルとして、背景を明るい緑にするだけのコードを示しておく。

class MyGLWidget : public QOpenGLWidget
{
public:
  MyGLWidget(QWidget *parent) : QOpenGLWidget(parent) { }
protected:
  void initializeGL()
  {
    // Set up the rendering context, load shaders and other resources, etc.:
    QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
    f->glClearColor(0.75f, 1.0f, 0.75f, 1.0f);  // 背景色指定
  }
  void resizeGL(int w, int h)
  {
  }
  void paintGL()
  {
  }
};

実行結果は以下のとおり。

temp

■ 演習問題:

  1. 上記サンプルが正しく動作することを確認しなさい
  2. 背景色をグレイに変えてみなさい
  3. 背景色を好きな色に変えてみなさい