QtでOpenGL描画を行うためのWidget.
以下が,おおよそ最小の実装になります.
GLView.h1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class GLView : public QGLWidget { Q_OBJECT public : GLView(QWidget *parent = 0); virtual ~GLView(){} private: virtual void initializeGL(); virtual void paintGL(); virtual void resizeGL(int width, int height); };
|
initializeGL関数内では,OpenGLが初期化された際の処理を行います.例えば,シェーダーのコンパイルやテクスチャデータの作成,ステートの初期化などがこれにあたります.
paintGL関数では,実際にOpenGLの関数群をコールして,Viewへの描画を行います.
resizeGL関数はWidgetのサイズが更新された時に呼ばれ,viewportの更新等を行います.
以下,実装部分です.
GLView.cpp1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| GLView::GLView(QWidget *parent) : QGLWidget(QGLFormat(QGL::SampleBuffers|QGL::AlphaChannel), parent) { setMouseTracking( true ); setFocusPolicy(Qt::StrongFocus); } void GLView::initializeGL() { qglClearColor(QColor(255,0,0)); } void GLView::paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3d( 0.3, 0.3, 0.8); glBegin(GL_QUADS); glVertex2d(0.1, 0.1); glVertex2d(0.9, 0.1); glVertex2d(0.9, 0.9); glVertex2d(0.1, 0.9); glEnd(); } void GLView::resizeGL(int width, int height) { glViewport(0, 0, width, height); }
|
QGLFormat(QGL::SampleBuffers|QGL::AlphaChannel)は一般的なQGLWidgetのフレームバッファフォーマットです.QGL::AlphaChannelを指定することによりアルファ付の画像を扱えるようになります.QGLWidgetのマウス操作はデフォルトでは無効になっているので,setMouseTracking( true )とすることによりマウス操作を有効にすることができます.