我在QML中使用QQuickFramebufferObject來繪製OpenGL代碼。我發現了一些使用QML來實現OpenGL的方法,其中一種方法(在Qt的Squircle示例中)是在所有或一切之上繪製所有OpenGL,但我使用的是QQuickFramebufferObject方法,因爲我需要上面的常規QML對象並在OpenGL繪製的對象下面。我可以將QQuickFramebufferObject的背景設置爲透明嗎?
所有的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選項啓動以查看該rect是否不透明。可能QQuickFramebufferObject方法導致QSGSimpleTextureNode,也許有辦法爲它啓用半透明。如果它還不夠,你應該能夠使用QSGGeometryNode實現一個項目渲染,因此它將直接渲染幾何圖形而不通過紋理廣告牌。 – Velkan