2016-01-07 80 views
5

我在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。

我想要什麼:

What I want

我能得到什麼:

enter image description here

+1

使用QSG_VISUALIZE = overdraw選項啓動以查看該rect是否不透明。可能QQuickFramebufferObject方法導致QSGSimpleTextureNode,也許有辦法爲它啓用半透明。如果它還不夠,你應該能夠使用QSGGeometryNode實現一個項目渲染,因此它將直接渲染幾何圖形而不通過紋理廣告牌。 – Velkan

回答

2

我想通了,這是一個錯誤不與FBO,但是矩形抱着它。我從來沒有設置它的顏色,因爲我只用它作爲其他對象的持有者,這似乎默認爲白色,不透明。我將其改爲顏色:「透明」,現在一切正常。

+0

請注意,當您不需要該項目的邊框或背景時,最好使用'Item'而不是'Rectangle'。 –