我正在Qt/openGL上工作,我有一些問題來激活我的深度緩衝區。Qt OpenGL:深度測試不起作用
在每一幀,我激活以下狀態: glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL);
另外我檢查了我的深度緩衝區的大小不是空(glGetIntegerv(GL_DEPTH_BITS)給我24,這是期望值) 但是深度測試不起作用,應該通過深度測試丟棄一些片段不是。
有什麼想法?
我正在Qt/openGL上工作,我有一些問題來激活我的深度緩衝區。Qt OpenGL:深度測試不起作用
在每一幀,我激活以下狀態: glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL);
另外我檢查了我的深度緩衝區的大小不是空(glGetIntegerv(GL_DEPTH_BITS)給我24,這是期望值) 但是深度測試不起作用,應該通過深度測試丟棄一些片段不是。
有什麼想法?
行,所以問題修復! 這是我使用的方法,如果有人得到相同的問題。
我安裝了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);
和一切工作!
編輯:其實,國家的激活必須在每幀進行正確渲染
請注意,'DEPTH_WRITEMASK'的默認值是'TRUE'。所以如果你以前稱之爲'glDepthMask(GL_FALSE)',你只需要調用'glDepthMask(GL_TRUE)'。 – 2014-09-29 14:27:46
在OpenGL中爲True,但由於某些原因(可能與QML有關),初始化時該值爲false。 – Zed 2014-11-25 14:33:36
我面臨同樣的問題,並設置GL_DEPTH_BUFFER_BIT在glClear函數解決我的問題。
我想你可以確保你使用的Qt版本不使用ANGLE,因爲這似乎導致深度測試問題相當多(只有當你在Windows上時)。 – PeterT 2014-09-26 19:20:47
你提到啓用深度測試並設置它的值,但忽略提及任何有關清除深度緩衝區的內容... – 2014-09-26 19:26:20
嗨,謝謝你的答案。在我進行渲染之前,我在每一幀都使用glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)命令。 – Zed 2014-09-26 19:29:24