2011-10-13 123 views
2

我在openGL中遇到了FBO和深度問題。我將投影,視圖和模型矩陣傳遞給寫入g緩衝區的着色器。當我解開FBO並寫入gl_FragColor時,場景顯示應該如此。但是,當我寫入gl_FragData [0],然後將相應的紋理寫入屏幕對齊的四邊形中,則會根據處理的反向順序繪製對象,而不是深度...我可以看到首先處理的對象與之後處理的對象。有沒有人有同樣的問題,他們知道一個修復?或者有人可以提供從頂點着色器讀取深度值的語法,查詢當前深度,然​​後根據比較結果寫入深度緩衝區,即在片段着色器中手動處理操作。如何在glsl中處理深度

+2

你的理論聽起來都是正確的,很可能這只是你代碼中的一個bug。沒有這些代碼,我們無法真正說出來。 –

回答

4

您的主要幀緩衝區最有可能有深度,而您手動創建的FBO可能沒有它。因此,在繪製屏幕時,您可以使用深度排序的幾何圖形,而FBO無法提供該功能,並且內部可以在禁用的深度測試中使用,而不會與其關聯存儲。

+0

你是對的kvark。我沒有意識到將深度緩衝區附加到fbo是對fbo綁定紋理進行深度剔除的要求。還發現gl_FraDepth [i]已被棄用,有利於定義您自己的輸出變量。 – ste3e

+0

'gl_FragData'已棄用,而不是'gl_FraDepth []'。在stackoverflow界面中還有一個按鈕,用於標記正確的答案:) – kvark