1.开发平台:Win7系统,Qt Creator5.7.0社区版;
2.环境配置:
1).下载OpenGL开发库;
2) .分别将OpenGL开发库中的.h文件(如glut.h)拷贝至QT的安装路径\...\include\QtOpenGL\目录下;
3) .分别将OpenGL开发库中的.lib文件(如glut.lib,glut32.lib)拷贝至QT的安装路径\...\lib\目录下;
4) .分别将OpenGL开发库中的.dll文件(如glut.dll,glut32.dll)拷贝至QT的安装路径\...\bin\目录下;
3.创建Qt Widget Application项目FrameWork,基类为QGLWidget,FrameWork.h文件如下所示:
#ifndef FRAMEWORK_H
#define FRAMEWORK_H
#include <QWidget>
#include <QGLWidget>
#include <QtOpenGL>
class FrameWork : public QGLWidget
{
Q_OBJECT
public:
FrameWork(QWidget *parent = 0);
~FrameWork();
protected:
void initializeGL() Q_DECL_OVERRIDE;
void resizeGL(int width,int height) Q_DECL_OVERRIDE;
void paintGL() Q_DECL_OVERRIDE;
private:
void draw();
};
#endif // FRAMEWORK_H
4.完成FrameWork.cpp中的成员函数定义,如下所示:
#include "framework.h"
FrameWork::FrameWork(QWidget *parent)
: QGLWidget(parent)
{
//指定OpenGL的显示描述表
setFormat(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer));
}
FrameWork::~FrameWork()
{
}
void FrameWork::initializeGL()
{
//qglClearColor(Qt::black);
glClearColor(0.1f,0.1f,0.2f,1.0f); //颜色的不同表达方式
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
}
void FrameWork::resizeGL(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
GLfloat x = GLfloat(width)/height;
glFrustum(-x,+x,-1.0,+1.0,4.0,15.0);
glMatrixMode(GL_MODELVIEW);
}
void FrameWork::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
draw();
}
void FrameWork::draw()
{
static const GLfloat P1[3] = {0.0,-1.0,+2.0};
static const GLfloat P2[3] = {+1.73205081,-1.0,-1.0};
static const GLfloat P3[3] = {-1.73205081,-1.0,+2.0};
static const GLfloat P4[3] = {0.0,+2.0,0.0};
static const GLfloat *const coords[4][3]={
{P1,P2,P3},{P1,P3,P4},{P1,P4,P2},{P2,P4,P3}
};
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0,0.0,-10.0);
for(int i=0;i<4;++i)
{
glBegin(GL_TRIANGLES);
qglColor(Qt::red);
for(int j=0;j<3;++j)
{
glVertex3f(coords[i][j][0],coords[i][j][1],coords[i][j][2]);
}
glEnd();
}
}
5.在项目文件FrameWork.pro文件中添加包含的库,如下所示:
QT += opengl
LIBS = -lopengl32 -lglu32 -lglut
6.编译项目,运行结果如下所示: