1、创建Qt设计界面类
2、在.pro文件中加入opengl,以及加入需要用到的Libs
QT += core gui opengl
LIBS += -lglut -lglu32 -lopengl32
3、修改Widget的父类继承QGLWidget,并导入QGLWidget虚函数initializeGL( )、resizeGL( )、paintGL( )。如有需要其它函数根据实际情况继续导入。
widget.h代码如下:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtOpenGL/QGLWidget>
namespace Ui {
class Widget;
}
class Widget : public QGLWidget
{
Q_OBJECT
public:
explicit Widget(QGLWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
// QGLWidget interface
protected:
void initializeGL();
void resizeGL(int w, int h);
void paintGL();
};
#endif // WIDGET_H
4、在.cpp文件中实现虚函数
widget.cpp文件如下:
#include "widget.h"
#include "ui_widget.h"
#include "gl/glu.h" //gluPerspective()函数需要用到此头文件
Widget::Widget(QGLWidget *parent) :
QGLWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::initializeGL()
{
setGeometry(300, 150, 640, 480); //设置窗口初始位置和大小
glShadeModel(GL_SMOOTH); //设置阴影平滑模式
glClearColor(1.0, 1.0, 1.0, 0); //改变窗口的背景颜色,不过我这里貌似设置后并没有什么效果
glClearDepth(1.0); //设置深度缓存
glEnable(GL_DEPTH_TEST); //允许深度测试
glDepthFunc(GL_LEQUAL); //设置深度测试类型
glHint(GL_PERSPECTIVE_CORRECTION_HINT,
GL_NICEST); //进行透视校正
glEnable(GL_BLEND); //打开混合
glBlendFunc(GL_SRC_ALPHA,
GL_ONE_MINUS_SRC_ALPHA); //设置颜色混合,用于透明
}
void Widget::resizeGL(int w, int h)
{
if(0 == h)
h = 1; //防止一条边为0
glViewport(0, 0, (GLint)w, (GLint)h); //重置当前视口,本身不是重置窗口的,只不过是这里被Qt给封装好了
glMatrixMode(GL_PROJECTION); //选择投影矩阵
glLoadIdentity(); //重置选择好的投影矩阵
gluPerspective(45.0, (GLfloat)w/(GLfloat)h
, 0, 1000.0f); //建立透视投影矩阵
glMatrixMode(GL_MODELVIEW); //以下2句和上面出现的解释一样
glLoadIdentity();
}
void Widget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslated(0,0,-5); //视角后移,不然看不到绘制的图形
glColor3f(0,0,0); //选取颜色为黑色
glBegin(GL_TRIANGLES); //绘制一个简单的三角形
glVertex2d(0,0);
glVertex2d(1,1);
glVertex2d(1,0);
glEnd();
}
绘制结果:
至此,简单的OpenGL框架就搭好了,关于OpenGL的相关知识请自行百度“NeHe”学习。