どうも新年あけましておめでとうございます。
皆さんいかがお過ごしですか?私は寒い・やかましい・長い、三重苦そろったお笑い特番にうんざりしている次第であります。...なんとかなりませんかねアレ。毎年、付き合いで見ざる得ないんですよね。とりあえず過剰な自虐、遮る会話、キンキン声...etcやめてくんねぇかなぁ...。どう考えても下品で貧相でやりすぎ。そりゃ視聴率もさがるっての。
はい、それではOpenGLを使った描画をやっていきます。
はじめに宣言しておきます。私はOpenGLは初めて使います。ですので、OpenGLの関数の説明はまったくできません。Qtではこんな風に使えますよ的なサンプルとして見てください。
また、OpenGLはあらかじめインストールされていることが前提となります。windowsやmacのインストール方法はわかりません。他のサイトを参考にしてください。ubuntuなどlinuxではたぶんパッケージが用意されているのでapt-getでそれらをインストールしてください。私の環境(ubuntu)では端末で
sudo apt-get install freeglut3 freeglut3-dev
でOKでした。
サンプルは独自のものを使います。
そして、いつものようにQtCreaterの使用を前提とします。(QtCreaterなどの使い方は ”Qtをはじめよう" を見てください。)
また、.proファイルに以下のような感じで
QT += core gui \
opengl
(opengl)を追加済みであるとします。ではコードを
(custumopengl.h)
#include <QGLWidget> #include <qgl.h> class CustumOpenGL : public QGLWidget { Q_OBJECT public: explicit CustumOpenGL(QWidget *parent = 0); protected: void initializeGL(); void resizeGL(int width, int height); void paintGL(); };
(custumopengl.cpp)
#include "custumopengl.h" CustumOpenGL::CustumOpenGL(QWidget *parent) : QGLWidget(parent) { } void CustumOpenGL::initializeGL() { glClearColor(0.9, 0.9, 0.9, 0.9); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); } void CustumOpenGL::resizeGL(int width, int height) { glViewport(0, 0, width, height); glLoadIdentity(); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); } void CustumOpenGL::paintGL() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glColor3d(0.0, 0.0, 0.0); glVertex2d(0.2,0.1); glColor3d(0.0, 0.0, 1.0); glVertex2d(0.6, 0.6); glColor3d(0.0, 0.0, 0.0); glVertex2d(0.3,0.6); glEnd(); }
QGLWidgetを継承したというところが普通のやり方と違いますね。前述のとおり各関数の説明は省きます。
このウィジットの使い方は
(main.cpp)
#include <QtGui/QApplication> #include "custumopengl.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); CustumOpenGL *gl = new CustumOpenGL(); gl->resize(300, 300); gl->show(); return a.exec(); }
のようになります。
実行すると以下のようになります。