在QT中使用OPENGL的步聚

这篇具有很好参考价值的文章主要介绍了在QT中使用OPENGL的步聚。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OPENGL初始化:

 

  1. 初始化OpenGL函数 : initializeOpenGLFunctions
  2. 初始化各种flag :  glEnable
  3. 创建各种缓存对象 : VAO,VBO
  4. 创建并链接shader : 
    1. QOpenGLShaderProgram::addShaderFromSourceCode 
    2. QOpenGLShaderProgram::Link
  5. 启用shader :  QOpenGLShaderProgram::bind
  6. 启用缓存 :     m_vao.bind();
  7. 绑定缓存(加载不变的数据):      m_vao.bind();
  8. 绑定shader的缓存数据(告诉OpenGL如何从缓存中读取数据到shader中)
    1. setAttributeBuffer(0, GL_FLOAT, 0, 3, 0);
    2. enableAttributeArray(0);
  9. 释放缓存
  10. 释放shader

OPENGL绘制:

        1.清屏

                 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        2.启用shader

               QOpenGLShaderProgram::bind();

        3.绑定shader的全局数据(例如摄像机变换矩阵,投影矩阵等)

                        


        4.启用缓存()

                    // 绑定本模型需要的顶点缓冲
                    bind();
        5.绑定缓存(VBO)(加载变化的数据)

                    // 绑定本模型需要的顶点缓冲
                    bind();
                    setUsagePattern(QOpenGLBuffer::StaticDraw);
                    allocate(m_vertices, m_vertecesCount * 3 * sizeof(float));

        6.绑定shader的缓存数据(告诉OpenGL如何从缓存中读取数据到shader中)

                        // 针对本模型, 设置如何渲染
                          setAttributeBuffer(0, GL_FLOAT, 0, 3, 0);
                          enableAttributeArray(0);

        7.绘制(使用shader读取缓存中的内容,转换为顶点,然后按照命令基于顶点绘制3D数据)

                        // 绘制模型
                        glDrawArrays(GL_POINTS, 0, m_vertecesCount);


        8.释放缓存

                        release();
        9.释放shader

                QOpenGLShaderProgram::release

1.在qwdiget应用中继承QOpenGLWidget和QOpenGLExtraFunctions
2.在qtquick应用中继承QObject和QOpenGLExtraFunctions
3.重载void initializeGL(),void paintGL()还有void resizeGL(int w, int h)
4. 在initializeGL中初始化绘制条件

5.在void paintGL()函数中进行绘制文章来源地址https://www.toymoban.com/news/detail-488046.html

到了这里,关于在QT中使用OPENGL的步聚的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用OpenGL 和 opengl ES 渲染YUV图片文件的QT示例

    头文件:CPlayWidget.h cpp文件:CPlayWidget.cpp 默认打开 ./test.yuv文件 头文件:CPlayWidget.h  与上面没有差别 cpp文件:只替换了着色器代码:

    2024年01月20日
    浏览(33)
  • AliLinux的使用Docker初始化服务(详细)

    AliLinux是基于CentOS的。 1、java 环境 2、mysql环境 3、kafka环境 4、flink环境 5、dinky环境 这些环境,本想直接dnf安装在宿主机上,思来想去,还是用docker方便学习,也方便统一管理和使用 sudo dnf update sudo dnf upgrade 2.1、熟悉docker的命令 2.2、添加Docker存储库 需要注意不同的linux的版本

    2024年02月21日
    浏览(40)
  • C语言:结构体数组的使用和初始化:

    前文:在C语言中,结构体是经常会用到的自定义数据类型,通常在使用结构体时,我们会进行单一的结构体初始化。但在使用同一个结构体,初始化不同的数据时,则可以用到结构体数组来进行初始化。 结构体数组是指在一个数组中存储多个结构体对象的集合。结构体是一

    2024年02月04日
    浏览(44)
  • 【PostgreSQL】Ubuntu 下使用 Prisma 的初始化流程

    步骤如下: 创建 Ubuntu 用户 创建 PostgreSQL 用户 使用 postgres 用户登录,然后创建新用户: 设置用户密码 使用 postgres 或 projectname 用户登录,设置用户密码: 完成上面准备工作就ok了,不需要手工创建数据库,因为下面将由 Prisma 来创建数据库。 Prisma 初始化 schema.prisma 创建好

    2024年01月18日
    浏览(53)
  • 初始化引导程序 & 使用BIOS中断显示字符、读取磁盘

     BIOS会将磁盘的第0个扇区(大小为512字节),加载到0x7c00处。 引导程序负责操作系统的加载,主要用于为操作系统运行提供初始化环境,并运行加载操作系统。 BIOS只加载磁盘的第0个扇区(512字节)到内存中,次程序无法做很多事情。 因此,我们可以采取以下两种方式种的任意一

    2023年04月15日
    浏览(51)
  • Qt中使用OpenGL的三种方式

    1.继承QOpenGLWidget并重写基类如下函数  通过使用QOpenGLContext来操作OPENGL函数   2. 继承QOpenGLFunctions类可直接使用OPENGL函数   直接使用OPENGL函数  3. 继承QOpenGLWidget 与QOpenGLExtraFunctions  在OPENGL中使用Shader 最终效果 

    2024年02月14日
    浏览(40)
  • QTextDocument的使用方法及几种初始化方式

    qtextDocument并不像控件一样可以通过拖拽方式拉到设计器中使用,也不能直接声明就可以初始化使用,而是需要通过包涵库文件的方式包涵在当前的窗体文件中。 如: 上面说了Qtextdocument并不是控件,它是辅助配合QT中的文本编辑控件进行文本操作的类库。 QTextDocument在使用之

    2024年02月09日
    浏览(38)
  • Git第二讲 使用Git命令创建和初始化仓库

    在使用Git之前,您需要创建并初始化一个Git仓库。这个仓库将用于存储您的项目文件并跟踪其版本。 首先,让我们创建一个全新的Git仓库。请按照以下步骤进行操作: 打开命令行终端或Git Bash,并导航到您想要存储项目的目录。 运行以下命令来初始化一个新的Git仓库: 这将

    2024年02月11日
    浏览(33)
  • 轻松使用Docker启动MySQL并初始化SQL(Dockerfile)

    在本教程中,我们将使用Docker来启动MySQL容器,并通过初始化SQL脚本来创建数据库和表。此外,我们还将演示如何将MySQL密码外置到环境变量文件中,以增加安全性。 在开始之前,请确保已经安装了Docker。如果尚未安装,可以参考我前面的教程 首先,我们需要创建一个名为

    2024年02月22日
    浏览(63)
  • pthread 变量静态初始化 避免使用被销毁过的变量

    互斥锁: pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; 读写锁: pthread_rwlock_t g_rwlock = PTHREAD_RWLOCK_INITIALIZER; 条件变量: pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER; 以互斥锁为例,当持有互斥锁的线程,需要进行互斥锁的销毁工作时,无法确保当前没有任何其他线程会在锁销毁之后,仍

    2024年02月06日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包