main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.resize(800,400);
w.show();
return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include <QTimer>
#include <math.h>
MainWindow::MainWindow(QWidget *parent) :
QGLWidget(parent)
{
angle = 0;
}
MainWindow::~MainWindow()
{
}
void MainWindow::resizeGL(int w, int h)
{
Q_UNUSED(w);Q_UNUSED(h);
glViewport(0,0,width(),height());
}
void MainWindow::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glRotated(angle+10,1,0,0);
glRotated(angle+10,0,1,0);
glRotated(angle+10,0,0,1);
glBegin(GL_QUADS);
glColor3f(1,0,1);glVertex3f(0.9,0.9,0.0);
glColor3f(0,0,1);glVertex3f(-0.9,0.9,0.0);
glColor3f(1,0,0);glVertex3f(-0.9,-0.9,0.0);
glColor3f(1,1,0);glVertex3f(0.9,-0.9,0.0);
glEnd();
glFlush();
}
void MainWindow::initializeGL()
{
initializeOpenGLFunctions();
timer();
glClearColor(0.0,0.0,0.0,0.0);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
}
void MainWindow::timer()
{
angle++;
updateGL();
const int interval = 100;
QTimer::singleShot(interval, this, SLOT(timer()));
}
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QGLWidget> #include <QOpenGLFunctions_3_0> class MainWindow : public QGLWidget,QOpenGLFunctions_3_0 { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); void paintGL(); void initializeGL(); void resizeGL(int w, int h); ~MainWindow(); public slots: void timer(); private: GLdouble angle; }; #endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.resize(800,400);
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QGLWidget> #include <QOpenGLFunctions_3_0> class MainWindow : public QGLWidget,QOpenGLFunctions_3_0 { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); void paintGL(); void initializeGL(); void resizeGL(int w, int h); ~MainWindow(); private: GLubyte Point[136][136][3]; ///< 五角星坐标 }; #endif // MAINWINDOW_H
mainwindow.cpp
#include <QTimer>
#include <math.h>
const GLfloat PI = 3.1415926536f;
MainWindow::MainWindow(QWidget *parent) :
QGLWidget(parent)
{
for(short i=0;i<136;++i)
{
for(short j=0;j<136;++j)
{
Point[i][j][0] = cos(i * PI/18)*255;
Point[i][j][1] = sin(j * PI/18)*255;
Point[i][j][2] = 0.4*255; // Z值
}
}
}
MainWindow::~MainWindow()
{
}
void MainWindow::resizeGL(int w, int h)
{
Q_UNUSED(w);Q_UNUSED(h);
glViewport(0,0,width(),height());
}
void MainWindow::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
glTexCoord2f(0,0);glVertex3f(1,1,0.0);
glTexCoord2f(1,0);glVertex3f(-1,1,0.0);
glTexCoord2f(1,1);glVertex3f(-1,-1,0.0);
glTexCoord2f(0,1);glVertex3f(1,-1,0.0);
glEnd();
glFlush();
}
void MainWindow::initializeGL()
{
initializeOpenGLFunctions();
glClearColor(0.0,0.0,0.0,0.0);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
glTexImage2D(GL_TEXTURE_2D,0,3,136,136,0,GL_RGB,GL_UNSIGNED_BYTE,&Point[0][0]);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glEnable(GL_TEXTURE_2D);
}