Qt5写的一些OpenGL小例子集合 是在学习LearnOpenGL教程的过程中,使用Qt制作的
-
lesson01
-
lesson02
-
HelloTriangle
-
QuickOpenGL
这个是在不了解QML Quick内部原理的时候,在qml中添加自定义OpenGL渲染控件,用的是QQuickWindow的beforeRendering信号。后来知道了QQuickFramebufferObject之后,基本上这种方式就被抛弃了。这里保留项目仅作为观赏,建议参考下面FrameBufferObject。
-
FrameBufferObject
效果与上一个例子QuickOpenGL 类似,多了全屏放大功能,纹理沿着三个坐标轴旋转的功能。
使用QQuickFramebufferObject 作为OpenGL自绘制控件,相当于QQuickItem了。
QQuickFramebufferObject是 Qt封装好的,需要理解其使用架构。
这里大概说一下用法:
- 继承QQuickFramebufferObject实现一个自定义item,并注册到QML中使用
- 继承QQuickFramebufferObject::Renderer,实现一个自定义Renderer
- 自定义Renderer内部再封装一个OpenGL相关的渲染类。Renderer是在Scene Graph线程工作,始终拥有OpenGL上下文环境,所以渲染类写在Renderer内部,非常方便。
- Renderer 有个函数叫void synchronize(QQuickFramebufferObject *item), 可以用来做线程同步 (Item工作在主线程,Renderer 工作在Scene Graph绘图线程) 我用的时候,是把参数item可以强制转换成我从Item派生出来的子类,然后用里面的数据和这个Renderer交互就好了。
-
light
-
lightCasters
手电筒光源
-
mulitLight
-
material
材质的使用,边缘部分发光,中间部分不发光
-
DepthTest
利用深度测试,后面的箱子边缘部分用红色绘制出来
-
CubeMap
天空盒