Version 3
OpenGL(2D)
Version 4
|
はじめにQtではOpenGLの機能を使える.これにはQGLWidgetを使う.QGLWidgetとはOpenGLの絵が出せるQWidgetと考えればよい.QGLWidgetを使うときには,一つ注意しなければいけないことがある.それはコンパイルするときに,普通は $ qmake -project $ qmake $ make とするが,これではOpenGLのコンパイルができない.どうするかというと,qmakeをした後に*.proというファイルができあがるのでそれに CONFIG += opengl という行を足しておく.どうしてこんなに面倒なことをするのかよく分からないが,とりあえずこうしなければならない. OpenGLの使い方は,「GLUTによる「手抜き」OpenGL入門」にとてもわかりやすくかかれています.このページではGLUTでOpenGLを使っています.ここではGLUTの代わりにQtでOpenGLを使う方法を説明します.「GLUTによる「手抜き」OpenGL入門」の中のgl*()という部分はOpenGLの関数なのでそれを参考にしてください. プログラムOpenGLの機能を使う場合は,QGLWidgetを継承したクラスを作る.例えば,QopenGLというクラスは, class QopenGL : public QGLWidget { Q_OBJECT public: QopenGL( QWidget *parent = 0 , const char *name = 0 ); protected: void initializeGL(); void resizeGL(int width, int height); void paintGL(); }; のように定義する.ここで,initializeGL()は最初の設定をしておき,resizeGLでWidgetの大きさが変わったときの設定をしておく.そして,paintGL()の中で描画を指定する.作成したプログラムを以下に示す. 001 #ifndef QOPENGL_H 002 #define QOPENGL_H 003 #include <qgl.h> 004 005 class QopenGL : public QGLWidget 006 { 007 Q_OBJECT 008 009 public: 010 QopenGL( QWidget *parent = 0 , const char *name = 0 ); 011 012 protected: 013 void initializeGL(); 014 void resizeGL(int width, int height); 015 void paintGL(); 016 017 }; 018 019 #endif 001 #include <iostream> 002 003 #include "qopengl.h" 004 005 using namespace std; 006 007 QopenGL::QopenGL( QWidget *parent, const char *name) 008 : QGLWidget(parent, name) 009 { 010 011 } 012 013 void QopenGL::initializeGL() 014 { 015 glClearColor(0.9, 0.9, 0.9, 1.0); 016 glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 017 } 018 019 void QopenGL::resizeGL(int width, int height) 020 { 021 glViewport(0, 0, width, height); 022 glLoadIdentity(); 023 glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 024 } 025 026 void QopenGL::paintGL() 027 { 028 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 029 030 //描画をここにかく 031 glColor3d( 0.0, 0.0, 1.0); 032 glBegin(GL_QUADS); 033 glVertex2d(0.1, 0.1); 034 glVertex2d(0.9, 0.1); 035 glVertex2d(0.9, 0.9); 036 glVertex2d(0.1, 0.9); 037 glEnd(); 038 039 } 040 041 001 #include <qapplication.h> 002 003 #include "qopengl.h" 004 005 int main(int argc, char *argv[]) 006 { 007 QApplication app(argc, argv); 008 009 QopenGL* gl = new QopenGL; 010 gl->resize(300, 300); 011 012 app.setMainWidget(gl); 013 gl->show(); 014 return app.exec(); 015 } できあがったプログラムを実行すると,以下のウィンドウが現れる.
|