2014-09-26 168 views
0

我正在Qt/openGL上工作,我有一些問題來激活我的深度緩衝區。Qt OpenGL:深度測試不起作用

在每一幀,我激活以下狀態: glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL);

另外我檢查了我的深度緩衝區的大小不是空(glGetIntegerv(GL_DEPTH_BITS)給我24,這是期望值) 但是深度測試不起作用,應該通過深度測試丟棄一些片段不是。

有什麼想法?

+0

我想你可以確保你使用的Qt版本不使用ANGLE,因爲這似乎導致深度測試問題相當多(只有當你在Windows上時)。 – PeterT 2014-09-26 19:20:47

+0

你提到啓用深度測試並設置它的值,但忽略提及任何有關清除深度緩衝區的內容... – 2014-09-26 19:26:20

+0

嗨,謝謝你的答案。在我進行渲染之前,我在每一幀都使用glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)命令。 – Zed 2014-09-26 19:29:24

回答

0

行,所以問題修復! 這是我使用的方法,如果有人得到相同的問題。

我安裝了GDebugger,並檢查了深度緩衝區確實沒有寫入。 我出口的openGL的當前狀態,並在這裏是相對於深度測試狀態:

GL_DEPTH_BIAS=0 
GL_DEPTH_BITS=24 
GL_DEPTH_CLEAR_VALUE=2147482496 
GL_DEPTH_FUNC=GL_LESS 
GL_DEPTH_RANGE={0, 1} 
GL_DEPTH_SCALE=1 
GL_DEPTH_TEST=TRUE 
GL_DEPTH_WRITEMASK=FALSE 

似乎一切都還好,除了GL_DEPTH_WRITEMASK哪個是假的。 我激活它使用:

glDepthMask(GL_TRUE); 

和一切工作!

編輯:其實,國家的激活必須在每幀進行正確渲染

+1

請注意,'DEPTH_WRITEMASK'的默認值是'TRUE'。所以如果你以前稱之爲'glDepthMask(GL_FALSE)',你只需要調用'glDepthMask(GL_TRUE)'。 – 2014-09-29 14:27:46

+0

在OpenGL中爲True,但由於某些原因(可能與QML有關),初始化時該值爲false。 – Zed 2014-11-25 14:33:36

0

我面臨同樣的問題,並設置GL_DEPTH_BUFFER_BIT在glClear函數解決我的問題。