QtOpenGL
QtOpenGL copied to clipboard
some Qt OpenGL Demo
trafficstars
Qt5 OpenGL
Qt5写的一些OpenGL小例子集合, 参考LearnOpenGL教程
- Qt5 OpenGL
- CI徽章
- 工程列表
- HelloTexture
- HelloCube
- HelloMix
- QuickOpenGL
- FrameBufferObject
- light
- lightCasters
- mulitLight
- material
- DepthTest
- SkyBox
- HelloFBO
- 赞助
- 联系作者
CI徽章
| License | Windows | MacOS | Ubuntu | Android | IOS |
|---|---|---|---|---|---|
工程列表
HelloTexture
以QOpenGLWidget为框架,简单的纹理贴图,使用定时器控制纹理旋转。

HelloCube
立方体贴图的例子,自己用画板画了一个图,然后贴成一个Cube。可以用鼠标控制立方体旋转。

HelloMix
绘制了10个立方体,每个立方体的每个表面使用2张纹理混合贴图。混合比例按数字键1/2进行调节。

QuickOpenGL
qml中添加自定义OpenGL渲染控件。

用的是QQuickWindow的beforeRendering信号。
知道了QQuickFramebufferObject之后,基本上这种方式就被抛弃了。(默认渲染区域是整个window,要自己控制viewport。来自Qml的旋转、平移、缩放也要自己做支持。不方便。)
这里保留项目仅作为观赏,建议参考下面FrameBufferObject。
FrameBufferObject
效果与上一个例子QuickOpenGL 类似,多了全屏放大功能,纹理沿着三个坐标轴旋转的功能。

使用QQuickFramebufferObject 作为OpenGL自绘制控件(相当于QQuickItem了)。
QQuickFramebufferObject是 Qt封装好的,需要理解其使用架构。
这里大概说一下用法:
1. 继承QQuickFramebufferObject实现一个自定义item,并注册到QML中使用。Item在Qml中的旋转、平移、缩放都能支持。
2. 继承QQuickFramebufferObject::Renderer,实现一个自定义Renderer
3. 自定义Renderer内部再封装一个OpenGL相关的渲染类。Renderer是在Scene Graph线程工作,始终拥有OpenGL上下文环境,所以渲染类写在Renderer内部,非常方便。
(Item工作在主线程,Renderer 工作在Scene Graph绘图线程。注意线程交互)
light
Shader光照的例子。 一个立方体的前面, 放一个移动的光源。

lightCasters
手电筒光源

mulitLight
镜面反射、漫反射,手电筒的集合

material
材质的使用,边缘部分发光,中间部分不发光

DepthTest
利用深度测试,后面的箱子边缘部分用红色绘制出来

SkyBox
天空盒, 可以键盘和鼠标操作

HelloFBO
帧缓冲的使用
反相处理效果如下:

赞助
如果您觉得这个项目还不错,请打赏一下作者。


联系作者
| - | - |
|---|---|
| 作者 | 武威的涛哥 |
| 博客 | https://jaredtao.github.io/ |
| 博客-gitee镜像 | https://jaredtao.gitee.io |
| 知乎专栏 | https://zhuanlan.zhihu.com/TaoQt |
| QQ群 | 734623697(高质量群,大佬多、不灌水) |
| 邮箱 | [email protected] |
| 微信 | xsd2410421 |
| QQ、TIM | 759378563 |