GLView
QtでOpenGL描画を行うためのWidget.
以下が,おおよそ最小の実装になります.
class GLView : public QGLWidget
{
Q_OBJECT
public :
//! Constructor.
GLView(QWidget *parent = 0);
//! Destructor.
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::GLView(QWidget *parent)
: QGLWidget(QGLFormat(QGL::SampleBuffers|QGL::AlphaChannel), parent)
{
setMouseTracking( true );
setFocusPolicy(Qt::StrongFocus);
}
void GLView::initializeGL()
{
qglClearColor(QColor(255,0,0));
// glEnable(GL_DEPTH_TEST);
}
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 )とすることによりマウス操作を有効にすることができます.