vs2013使用QT自带的openGL

原创 2017年11月07日 10:12:20

基础知识:

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012260117/article/details/78464892

OpenGL

-
  • 1970年01月01日 08:00

vs中qt结合opengl搭建

1、QT分为MSVC和MINGW版本,是支持的两种不同的编译器 MSVC是指微软的VC编译器,做Windows应用首选,VS中只能集成这个编译器的QT。 MingGW是指是Minimalist G...
  • u010309553
  • u010309553
  • 2016-08-13 15:14:10
  • 1381

QT5forVS2012OpenGL配置方法

  • 2015年12月23日 23:03
  • 485B
  • 下载

Qt:VS&QT 配置OpenGL

在vs下编译opengl代码出现以下错误,原因是vs没有自带opengl库,需要自己引入 无法解析的外部符号 __imp__glClear@4 无法解析的外部符号 __imp__glClearColo...
  • x356982611
  • x356982611
  • 2016-10-20 22:31:03
  • 1442

学习笔记1--在Qt5中利用OpenGL渲染一个立方体

上文介绍了如何在Qt5中嵌入一个widget来作为OpenGL的渲染窗口,本文将在上文的基础上再嵌入的OpenGL部件中进行简单的渲染,本例打算绘制一个彩色的立方体;在接下来的介绍中,我不打算介绍Op...
  • u014328804
  • u014328804
  • 2017-02-26 08:24:59
  • 1647

请教各位Qt+OpenGL的知识

我利用OpenGL+GLFW在VS2010下实现了三维模型的显示与仿真,现在想将整个项目移植到Qt里面,我的想法是将GLFW中函数创建的窗口直接嵌入Qt中,网上找了好多资料都做不到,请问各位可以提供帮...
  • huster_xdw
  • huster_xdw
  • 2018-01-23 20:41:21
  • 22

Qt浅谈之五十一QT_OpenGL

最近想了解些Qt的OpenGL编程,可能以后会使用。Opengl是对2D和3D图形支持很好,有非常多的优化函数,而且是个跨平台的开源库。Qt的Opengl封装的很好,通过Qt的QGLWidget类,将...
  • taiyang1987912
  • taiyang1987912
  • 2016-04-30 23:31:33
  • 8736

Qt中创建OpenGL基本框架

1、创建Qt设计界面类 2、在.pro文件中加入opengl,以及加入需要用到的LibsQT += core gui opengl LIBS += -lglut -lglu32 ...
  • sinat_27593959
  • sinat_27593959
  • 2016-11-23 11:36:26
  • 674

vs2013 + qt5.3.2 环境搭建

1. PC: win8 2. vs版本: vs2013 3. qt版本: qt5.3.2 x64 opengl 一、所有
  • wangell
  • wangell
  • 2014-11-14 13:40:29
  • 73999

Qt结合GLSL贴出纹理(一、采用原生OpenGL API)

Qt提供QOpenGLShaderProgram这种类来完成GLSL操作,同时也支持原生的OpenglAPI。在接下来的两篇博客里,我将分别介绍如何用QOpenGLShaderProgram来贴出纹理...
  • liji_digital
  • liji_digital
  • 2018-02-21 19:25:37
  • 55
收藏助手
不良信息举报
您举报文章:vs2013使用QT自带的openGL
举报原因:
原因补充:

(最多只允许输入30个字)