在QT中使用OPENGL的步聚

news/2024/11/30 15:23:49/

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()函数中进行绘制


http://www.ppmy.cn/news/368559.html

相关文章

当代化工研究杂志当代化工研究杂志社当代化工研究编辑部2022年第22期目录

本刊特稿《当代化工研究》投稿:cnqikantg126.com 正己醇耦合氢氧化钾水解溶出光伏组件中乙烯醋酸乙烯酯 郭蔓;李登新;蒋红博;朱宏艺;高康宁;夏张; 1-4 原料种类和预烧温度对Ba2Ti9O20微波陶瓷烧结特性、相结构、微观形貌以及介电性能的影响 肖亚奇;黎洪天;张…

致敬中国半导体圈儿的“她们”!

林兰英 半导体材料学家。我国半导体科学事业开拓者之一。先后负责研制成我国第一根硅、锑化铟、砷化镓、磷化镓等单晶,为我国微电子和光电子学的发展奠定了基础。开创了我国微重力半导体材料科学研究新领域,并在砷化镓晶体太空生长和性质研究方面取得了世…

中美晶2016营收增但仍亏损,将续推高效光伏技术

硅片厂中美硅晶公布2016年财报,全年合并营收315.99亿元新台币,和去年相比成长11.8%,创下历史新高。 中美晶2016年税后净损15.89亿元新台币,税后每股亏损2.77元新台币。2016年太阳能市场动荡,为造成中美硅晶亏损原因之一…

中美晶结盟华为 推动逆变器商机

台厂中美晶与中国华为签订合作备忘录,将在太阳能光伏逆变器领域进行合作。中美晶将为新的电站安装华为的FusionSolar智慧型光伏电站方案,同时也取得销售代理权,垂直整合中美晶的太阳能方案来共同拓展全球商机。 半导体厂中美晶近年来陆续跨足…

硅晶圆短缺:12寸硅晶圆产能虽被包下,但交货困难!

之前市场就传出硅晶圆短缺,“客户得先付订金,才能优先巩固产能并锁定价格”的讯息,硅晶圆业者也不否认,坦承接单真的太满。 半导体硅晶圆市场情况从今年初到现在一直呈现供不应求状态,并且以这种状态进入超级循环&…

Qt调用工业相机之映美精相机

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 开发环境 操作系统:Windows 10 1903 18362.778 相机型号:IMAGING SOURCE DMK 33G274 相机软件:ic_s…

react-useId

// App.tsx const id Math.random();export default function App() {return <div id{id}>Hello</div> }如果应用是CSR&#xff08;客户端渲染&#xff09;&#xff0c;id是稳定的&#xff0c;App组件没有问题。 但如果应用是SSR&#xff08;服务端渲染&#xff…

flutter getx 简单使用教程

所以Flutter使用GetX真的很不错 为什么说什么GetX好用呢&#xff1f; 1、依赖注入 GetX是通过依赖注入的方式&#xff0c;存储相应的XxxGetxController&#xff1b;已经脱离了InheritedWidget那一套玩法&#xff0c;自己手动去管理这些实例&#xff0c;使用场景被大大拓展 2、…