2012-03-28 44 views
1

我在使用Qty中的QGLFrameBufferObjects渲染部分不透明的簡單形狀時出現問題。當渲染到QGLFrameBufferObject vs屏幕時,Alpha合成錯誤

我已經下降減少了問題的:

當我使一個簡單的四到QGLFrameBufferObject顏色設置爲(1,0,0,.5),然後是的blit到屏幕上,我得到一個50%不透明度太淺的結果。如果我使用相同的顏色(實際上是相同的代碼)直接在屏幕上繪製相同的四邊形,我會得到正確的顏色值。如果我使用不透明度== 1.0渲染四邊形,那麼結果是相同的......在兩種情況下,我都會得到完整的深紅色。我已經通過buffer.toImage()。save(「/ tmp/blah.tif」)直接將緩衝區轉儲到磁盤來確認緩衝區中的顏色真的是錯誤的。

在這兩種情況下,在執行操作之前,我已將輸出緩衝區清除爲(1,1,1,1)。

爲什麼繪製到屏幕外緩衝區時我繪製的部分透明部分比從屏幕右側繪製時亮得多?必須有一些狀態,我必須在FBO或什麼,但我不知道它是什麼。

回答

3

Alpha並不意味着「透明」。它根本不意味着任何東西。當你給給它一個時,它只會佔用一個含義。當您設置使用alpha控制透明度的混合模式時,它只意味着「透明」。所以如果你沒有set up a blend modecreates the effect of transparency,那麼alpha就是另一個顏色分量,它將被完全寫入幀緩衝區。

+0

如果你說的確實是我的問題的根源,那麼你說我的混合模式在繪製到屏幕時已經正確設置,而在繪製到屏幕外緩衝區時卻沒有。然而,這兩種情況之間唯一的區別是我創建了一個屏幕外緩衝區並將其綁定到當前的上下文中。那麼,什麼可以解釋我的混合模式在一種情況下是正確的,在另一種情況下是錯誤的是否存在特定於屏幕外緩衝區的混合模式,我需要獨立於其餘環境進行設置? – Steve 2012-03-28 20:03:18

+0

@Steve:'那麼怎麼解釋我的混合模式在一種情況下是正確的,在另一種情況下是錯誤的。'你的代碼有一個錯誤。但是你沒有顯示你的代碼,所以我不能說。 – 2012-03-28 20:04:30