2014-09-26 3 views
0

Я работаю над Qt/openGL, и у меня есть проблема, чтобы активировать буфер глубины.Qt OpenGL: глубина теста не работает

В каждом кадре активируйте следующие состояния: glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL);

Кроме того, я проверил, что размер моего буфера глубины не является нулевым (glGetIntegerv (GL_DEPTH_BITS) дает мне 24, что ожидаемое значение) однако тест глубины не работает, и некоторые фрагменты, которые должны быть отброшены проверки глубины не.

Любая идея?

+0

Я думаю, вы можете убедиться, что версия Qt, которую вы используете, не использует ANGLE, так как это, по-видимому, приводит к проблемам с глубинным тестированием совсем немного (только если вы на Windows, конечно). – PeterT

+0

Вы упомянули включение теста глубины и установление его значений, но пренебрегли упоминанием о расчистке буфера глубины ... –

+0

Привет, спасибо за ответы. Перед выполнением рендеринга я использую команду glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) в каждом кадре. – Zed

ответ

0

OK, поэтому проблема исправлена! Вот метод, который я использовал, если кто-то получает ту же проблему.

Я установил 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); 

и все работает!

EDIT: На самом деле, активация состояния должна быть сделана в каждом кадре для правильной передачи

+1

Обратите внимание, что значение по умолчанию для 'DEPTH_WRITEMASK' равно' TRUE'. Поэтому вам нужно только вызвать 'glDepthMask (GL_TRUE)', если вы ранее называли 'glDepthMask (GL_FALSE)'. –

+0

True в OpenGL, но по некоторым причинам (возможно, связано с QML, я бы сказал), при инициализации значение false. – Zed

0

Я столкнулся с той же проблемой, и установки GL_DEPTH_BUFFER_BIT в функции glClear решить мою проблему.

Смежные вопросы