【问题标题】:Can I set the background of a QQuickFramebufferObject to transparent?我可以将 QQuickFramebufferObject 的背景设置为透明吗?
【发布时间】:2016-04-12 08:53:26
【问题描述】:

我在 QML 中使用 QQuickFramebufferObject 来绘制 OpenGL 代码。我找到了几种使用 QML 进行 OpenGL 的方法,其中一种(在 Qt 的 Squircle 示例中)是在所有内容下方或上方绘制所有 OpenGL,但我使用的是 QQuickFramebufferObject 方法,因为我需要常规的 QML 对象在上面并在 OpenGL 绘制的对象下方。

所有的 OpenGL 代码都可以正常工作。 QQuickFramebufferObject 的背景需要是透明的,这样才能看到下面的 QML 对象。 (我的 QQuickFramebufferObject 绘制了一个抽象形状。)但是,QQuickFramebufferObject 似乎在屏幕上挡住了它的矩形,并且没有在下面显示任何东西。我试过了

glClearColor( 0.0, 0.0, 0.0, 0.0f );
glClear( GL_COLOR_BUFFER_BIT );

所以背景是透明的,但我只是得到一个白色矩形。即使我完全跳过调用 FBO 的渲染,它仍然会覆盖所有内容,所以我认为这是 OpenGL 代码以及 QML 如何处理 FBO 之外的东西。

我想要什么:

我得到了什么:

【问题讨论】:

  • 使用 QSG_VISUALIZE=overdraw 选项启动以查看该矩形是否不透明。可能 QQuickFramebufferObject 方法会导致 QSGSimpleTextureNode 并且可能有一种方法可以为其启用半透明。如果这还不够,您应该能够使用 QSGGeometryNode 实现项目渲染,因此它将直接渲染几何图形而无需通过纹理广告牌。

标签: c++ qt opengl qml


【解决方案1】:

我明白了,这不是 FBO 的错误,而是持有它的 Rectangle 错误。我从来没有设置它的颜色,因为我只是将它用作其他物体的支架,默认情况下它似乎是白色的,而不是透明的。我将其更改为颜色:“透明”,现在一切正常。

【讨论】:

  • 请注意,当项目不需要边框或背景时,最好使用Item,而不是Rectangle
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2011-05-23
  • 1970-01-01
  • 2018-07-03
  • 2021-03-04
相关资源
最近更新 更多