本文主要介绍一下个人在魔方项目( RubiksCubeOpenGL-master )基础上改写成基于Qt的OpenGL项目的过程,喜欢的伙伴私信获取项目地址。该项目包含两大功能点:1.旋转魔方;2.视频推流拉流。 基本介绍 魔方是一种经典的益智玩具,自1974年由匈牙利建筑学教授鲁比克发明以来,便风靡全球。它不仅是一种娱乐工具,更是一种锻炼逻辑思维、空间想象力和耐心的工具。为了更好地理解魔方的内部结构和操作逻辑,也为了玩起来方便,我在互联网上尝试寻找一款可以直接使用的魔方开源项目。并在此基础上基于Qt 进行了适配。 该项目使用Qt界面库开发,使用opengl接口将数据绘制在QOpenglWidget上。包括以下功能: 1. 魔方的三维渲染( 使用 OpenGL 实现了魔方的三维渲染,支持高质量的光照和纹理效果、 每个小方块都可以独立绘制,支持不同的颜色和纹理)。 2.交互式操作(上、下、左、右、F、B分别控制魔方的上、下、左、右以及前、后六个面。shift按键控制魔方旋转的顺逆时针、鼠标配合相机系统是模仿能够被拖动,观察各个视角。提供工具栏按钮方便调整旋转速度、顺逆时针、魔方打乱步数等)。 魔方的基本设置包括随机打乱步数、顺逆时针旋转、转动速度。随机打乱步数代表按下R(Random)按键后魔方自动打乱旋转的次数。转动方向即代表旋转方向。转动速度即转动时的速度(废话文学吗?)。详见下图: 其中,系统设置中可以设置窗口的数量,默认只有一个魔方窗口,其余窗口为视频推流拉流并绘制在OpenGl中的窗口。 下图预览下视频推流拉流与魔方共存的界面效果: 软件内部集成了流媒体服务器,让众多功能全部汇聚在小小项目中,通过该项目我们也能GET到简单的推流拉流的流程。鼠标聚焦在魔方小窗口上时可进行魔方的操作。 魔方从glfw到qt的适配 为什么需要适配,看一下两张图就明白了,是因为刷新机制不一样! glfw框架是在while循环中不断读取数据,执行opengl的渲染管线去进行绘制的。而Qt是在 QOpenGLWidget的paintGL中执行渲染。所以数据点发生变化后需要执行widget的update以触发界面的更新渲染。 在Qt中进行OpenglWidget需要实现一些虚函数,如 initializeGL()、 paintGL()、 resizeGL(int w, int h)等。本项目中魔方的绘制是在 rubikcubeglwin类中进行。其继承关系如下图所示: RTSP推流拉流 输入可以是摄像头数据、本地数据流以及互联网上的流媒体,首先将其绘制在了QOpengL窗口上,然后推流至流媒体服务器,在子窗口中可以选择从流媒体服务器拉流并显示在该窗口上。具体流程如下: 结束语
以上就是本次从 GLFW 到 Qt 的 OpenGL 魔方项目适配与功能拓展全分享啦!从经典的魔方三维交互到实用的 RTSP 推流拉流,每一个功能的落地都离不开对框架差异的探索和细节的打磨。这个项目不仅是对 OpenGL 技术的实践,更是一次‘从基础到综合’的技术整合尝试 —— 既解决了不同框架下渲染逻辑的适配痛点,也融入了流媒体相关的实用场景,希望能给同样热爱图形编程、开源项目的伙伴们带来一点参考和启发~
如果这份小 Demo 刚好戳中你的兴趣点,或者你在适配 Qt/OpenGL、流媒体开发中遇到了问题想要交流,欢迎随时私信我获取项目地址,一起探讨技术、优化功能!开源的快乐在于分享与共创,期待在评论区或私信里看到你的身影,咱们下次技术分享再见呀~