Qt中创建OpenGL基本框架

1、创建Qt设计界面类
Qt Widget

2、在.pro文件中加入opengl,以及加入需要用到的Libs

QT       += core gui opengl
LIBS     += -lglut -lglu32 -lopengl32

.pro截图

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框架就搭好了,关于OpenGL的相关知识请自行百度“NeHe”学习。

猜你喜欢

转载自blog.csdn.net/sinat_27593959/article/details/53302847