Qt(MinGW)+Freeglutでティーポットくるくるできたよ~
ようやくできた。忘れないうちにメモメモ。
環境はWin8.1+Qt5.3(MinGW)+freeglut-MinGW-2.8.1。
freeglutは解凍したファイルを以下のようにコピー。
・includeフォルダ内のGLフォルダ→Qt\Tools\mingw482_32\i686-w64-mingw32\includeへ
・libフォルダの中身→Qt\Tools\mingw482_32\i686-w64-mingw32\libへ
で、コードは以下の通り。
.proファイル
QT += core gui opengl TARGET = OpenGLTest TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp \ glwidget.cpp HEADERS += mainwindow.h \ glwidget.h FORMS += mainwindow.ui LIBS += -lfreeglut
main.cpp
#include "mainwindow.h" #include#include <GL/glut.h> int main(int argc, char *argv[]) { glutInit(&argc,argv); QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
MainWindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #includenamespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; }
glwidget.h
#ifndef GLWIDGET_H #define GLWIDGET_H #include#include #include <GL/glut.h> class GLWidget : public QGLWidget { Q_OBJECT public: explicit GLWidget(QWidget *parent = 0); void initializeGL(); void paintGL(); void resizeGL(int w, int h); void mousePressEvent(QMouseEvent *e); private: QTimer timer; }; #endif // GLWIDGET_H
glwidget.cpp
#include "glwidget.h" #include <GL/glut.h> #include <GL/glu.h> #includeGLWidget::GLWidget(QWidget *parent) : QGLWidget(parent) { connect(&timer,SIGNAL(timeout()),this,SLOT(updateGL())); timer.start(16); } void GLWidget::initializeGL(){ glClearColor(0.2,0.2,0.2,1); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); } void GLWidget::paintGL(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glRotatef(0.5, 1,1,1); glColor3f(1,0.6,0); glutSolidTeapot(0.6); // glBegin(GL_TRIANGLES); // glColor3f(1,0,0); // glVertex3f(-0.5, -0.5, 0); // glColor3f(0,1,0); // glVertex3f( 0.5, -0.5, 0); // glColor3f(0,0,1); // glVertex3f( 0.0, 0.5, 0); // glEnd(); } void GLWidget::resizeGL(int w, int h){ glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45,(float)w/h,0.01,100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0,0,5, 0,0,0, 0,1,0); } void GLWidget::mousePressEvent(QMouseEvent *e){ //if mouse clicked,timer will stop if(e->button() == Qt::LeftButton){ if(timer.isActive()){ timer.stop(); } else{ timer.start(); } } }
んで、実行結果はこんな感じ。
Ubuntuとかだったら楽勝だったのに、Win上では1週間くらいかかった・・・。
わかってしまえばどうってことないのよねorz