您的位置:首页 > 编程语言 > Qt开发

vs2013使用QT自带的openGL

2017-11-07 10:12 966 查看

基础知识:

1 OpenGL

OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库,gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台工具库,gl中包含了最基本的3D函数,而glu似乎对gl的辅助,如果算数好,不用glu的情况下,也是可以做出同样的效果。glut是基本的窗口界面,是独立于gl和glu的。可以使用Qt窗口界面来代替glut的界面。

2 QGLWidget

QGLWidget中有三个虚函数。关于这三个虚函数,调用顺序及功能如下:

1. initializeGL() ,在程序开始执行的时候最先被调用一次(当然构造函数是最先执行的,其次是initializeGL() )。用来完成相关的初始化工作,比如建立opengl绘图的上下文环境。

2. resizeGL(),在initializeGL()完成之后被调用一次(实际为多次),以及在窗口位置以及大小改变时被调用。用于完成建立opengl视图窗口等一系列工作。

3. paintGL(),绘制opengl图像。当窗口需要被刷新时会被调用(即用户使用updateGL()函数的时候,屏幕会被重绘),以及在resizeGL()完成之后,也会引起重绘。

程序开始>>构造函数>>initializeGL()>>resizeGL()>>paintGL()

若用户调用updateGL()函数>>引起paintGL()函数的调用。

若窗口位置或者尺寸改变>>调用resizeGL()>>调用paintGL()

测试案例

1 新建QT项目



2 勾选QT GUI的OpenGL



3 选择Form File 添加新类



4 添加QT5Class



5 命名方式如下,注意选择下面的文件



6 头文件和cpp文件重写如下:

#ifndef MY_QOPENGLWIDGET_H
#define MY_QOPENGLWIDGET_H

#include <QOpenGLWidget>
#include <QOpenGLFunctions>

class My_QOpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
Q_OBJECT

public:
My_QOpenGLWidget(QWidget *parent);
~My_QOpenGLWidget();

void initializeGL();
void resizeGL(int width, int height);
void paintGL();

private:

};

#endif // MY_QOPENGLWIDGET_H


#include "my_qopenglwidget.h"

My_QOpenGLWidget::My_QOpenGLWidget(QWidget *parent)
: QOpenGLWidget(parent)
{
// 设置OpenGL的版本信息
QSurfaceFormat format;
format.setRenderableType(QSurfaceFormat::OpenGL);
format.setProfile(QSurfaceFormat::CoreProfile);
format.setVersion(3, 3);
setFormat(format);
}

My_QOpenGLWidget::~My_QOpenGLWidget()
{

}
void My_QOpenGLWidget::initializeGL()
{
//初始化OpenGL函数
initializeOpenGLFunctions();

//设置全局变量
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

setGeometry(20, 50, 300, 200);//设置窗口初始位置和大小
glShadeModel(GL_FLAT);//设置阴影平滑模式
glClearColor(0.1, 1.0, 0.2, 0);//改变窗口的背景颜色,不过我这里貌似设置后并没有什么效果
glClearDepth(1.0);//设置深度缓存
glEnable(GL_DEPTH_TEST);//允许深度测试
glDepthFunc(GL_LEQUAL);//设置深度测试类型
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);//进行透视校正

}

void My_QOpenGLWidget::paintGL()
{
//清理屏幕
glClear(GL_COLOR_BUFFER_BIT);
}

void My_QOpenGLWidget::resizeGL(int width, int height)
{
//未使用
Q_UNUSED(width);
Q_UNUSED(height);
}


7 打开ui文件,



8 选择Open GL Widget 放入



9 提升Open GL Widget为My_QOpenGLWidget



10 最终可以得到



本教程所需资源下载

http://download.csdn.net/download/u012260117/10106890
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl qt vs2013 ui