首页 > 编程语言 >四、第一个opengl的qt程序

四、第一个opengl的qt程序

时间:2023-03-20 11:56:08浏览次数:48  
标签:widget 调用 函数 OpenGL opengl 程序 initializeGL paintGL qt

原链接

1、QOpenGLWidget:不需要GLFW

QOpenGLWdiget提供了三个便捷的虚函数,可以重载,用来重新实现典型的OpenGL任务:

.panitGL:渲染OpenGL场景。widget需要更新时调用。

.resizeGL:设置OpenGL视口、投影等。widget调整大小(或首次显示)时调用。

.initializeGL:设置OpenGL资源和状态。第一次调用resizeGL()/panitGL()之前调用一次。

 

2、如果需要从panitGL()以外的位置触发重新绘制(典型实例是使用计时器设置场景动画),则应调用widget的update()函数来更新。

 

3、调用paintGL()、resizeGL()或initializeGL()时,widget的OpenGL呈现上下文将变为当前。如果需要从其他位置,(例如,在widget的构造函数或自己的绘制函数中)调用OpenGL API函数,则必须首先调用makeCurrent().

在paintGL()以外的地方调用绘制函数,没有意义。绘制图像最终将被paintGL()覆盖。

 

4、QOpenGLFunctions_x_x_Core:不需要GLAD

.QOpenGLFunction_x_xCore提供OpenGLx.x核心模式的所有功能。是对OpenGL函数的封装:

.initializeOpenGLFunctions:初始化OpenGL函数,将Qt里的函数指针指向显卡的函数。

 

5、例

glClearColor(0.2f,0.3f,0.3f,1.0f); //设置状态

glClear(GL_COLOR_BUFFER_BIT); //使用状态

 

6、新建qt工程,样式设置

QWidget{
    background-color:rgb(68,68,68);
    color:rgb(255,255,255);
    font:10pt"幼圆";
    
}
QMenuBar{
    background-color:rgb(200,200,200);
    color:rgb(60,60,60);
}

7、拖一个QOpenGLWidget空间到ui上

8、新建一个Openwidget类,继承QOpenGLWidge 和 QOpenGLFunctions_3_3_Core

9、重写虚函数 initializeGL() 、 reizeGL(int w,int h)、paintGL()

10、头文件代码

#ifndef OPENGLWIDGET_H
#define OPENGLWIDGET_H

#include <QOpenGLWidget>
#include <QOpenGLFunctions_3_3_Core>

class Openglwidget : public QOpenGLWidget,public QOpenGLFunctions_3_3_Core
{
    Q_OBJECT
public:
    explicit Openglwidget(QWidget *parent = nullptr);

signals:

protected:
    virtual void initializeGL() override;
    virtual void resizeGL(int w,int h) override;
    virtual void paintGL() override;

};

#endif // OPENGLWIDGET_H

11、源文件代码

 

标签:widget,调用,函数,OpenGL,opengl,程序,initializeGL,paintGL,qt
From: https://www.cnblogs.com/RedWetPlace/p/17235329.html

相关文章

  • 关于微信小程序的boundingClientRect用法
    微信小程序提供了wx.createSelectorQuery接口,用于获取WXML节点信息。其中,boundingClientRect方法可以获取某个节点的布局位置和尺寸信息。boundingClientRect方法接......
  • LearnOpenGL (2) 绘制三角形
    本文基于Win10+VisualStudio2019+OpenGL3.3。参考“你好,三角形”。一、准备工作图形渲染管线 顶点数据 图元 顶点缓冲对象(VBO) 顶点数组对象(VAO) ......
  • [Android] Android版本 和 SDK / NDK / Qt 版本对应关系
    系统版本与SDK版本平台版本 API级别(SDK版本)版本代号发布时间Android1130R2020.9Android10.029 Q2019.8Android9.028Pie2018.8Android8.1 27 Oreo2017.12Android8.0......
  • Qt5.12实战之QByteArray与字符指针及字符串转换
    示例源码:#include<QCoreApplication>#include<QDebug>#include<QTextStream>staticQTextStreamcout(stdout,QIODevice::WriteOnly);#include<iostream>#include......
  • Qt5.12实战之字节数组QByteArray使用
    示例源码:#include<QCoreApplication>#include<QDebug>#include<QTextStream>staticQTextStreamcout(stdout,QIODevice::WriteOnly);#include<iostream>#inclu......
  • Qt 生成uuid方法
    chatgpt结果#include<QUuid>#include<QDebug>intmain(){//生成一个新的UUIDQUuiduuid=QUuid::createUuid();//将UUID转换为字符串,并打印输出......
  • Qt+OpengGL使用教程(1)
    首先,建议阅读和QtOpenGL相关的类。本人对其中的一些类,做了一些翻译,例如:QOpenGLWidget。环境:Ubuntu16.04,Qt5.14.2首先,新建立一个工程qtopengltest,使用uidesigner,拖动......
  • 悬赏任务app源码(uniapp小程序源码)成品平台搭建及开发
    悬赏任务app源码,从名字本身就可以理解这个PHP项目的流程。通过在线管理员工任务。即使它也可以在Intranet中工作。MySQL数据库是此源代码的最终部分。它易于实施和遵循。它......
  • 三、OpenGL对象
     原链接1、一个对象是指一些选项的集合,代表OpenGL状态的一个子集。例如:我们可以用一个对象来代表绘图窗口的设置,设置它的大小、支持的颜色、位数等等。可以把对象看作......
  • Qt 计算字符串和文件的md5 值
    chatgpt结果string#include<QCryptographicHash>#include<QDebug>QStringstring="Hello,World!";QByteArraydata=string.toUtf8();QByteArrayhash=QCry......