2014-10-20 4 views
-1

Я изо всех сил стараюсь, чтобы моя проверка глубины работала правильно в приложении.Проблемы с глубинным тестированием в OpenTK/OpenGL

Глубины, кажется, полностью основана на порядке жеребьевки, как показано здесь: https://www.youtube.com/watch?v=YErS_loJW7w&feature=youtu.be

Вы можете увидеть в видео, помутнение Сюзанны находится в передней части модели сетки, но при повороте она заканчивается за этим.

Я думаю, что ниже код все соответствующие

// clear the render buffer.... 
GL.Enable(EnableCap.DepthTest); 
GL.DepthMask(true); 
GL.ClearColor(Color.Black); 
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);   

// Render main 3d scene 
GL.Enable(EnableCap.CullFace); 
GL.CullFace(CullFaceMode.Back); 
GL.Enable(EnableCap.DepthTest); 
GL.Enable(EnableCap.DepthClamp); 
GL.DepthFunc(DepthFunction.Always); 
GL.DepthMask(true); 

Я был под впечатлением, что позволяет испытывать Depth бы сделать эту работу правильно.

Что случилось?

+1

Вы запросили некоторые буферы буфера глубины, когда вы создали свой контекст GL? Вы можете не получить, если не спросите. – genpfault

+0

OpenGl относительно новичок. Как мне сказать? Глядя на документы вокруг OpenTK GLControl, которые я использую, похоже, указывается, что предоставлен буфер глубины. «... Обратите внимание, что GLControl предоставляет буфер цвета и глубины, который мы должны очистить с помощью GL.Clear()». – Chris

ответ

0

Установка GL.DepthFunc(DepthFunction.Always); заставляет все погулять. Это говорит GL, чтобы никогда не отбрасывать фрагменты, даже если они лежат за ранее нарисованными объектами. Вы должны использовать режим сравнения GL_LESS или GL_LEQUAL.

+0

Спасибо против вашего ответа. Я изменил это до МЕНЬШЕ. И я полагаю, что фрагменты отбрасываются, но они по-прежнему отбрасываются на основе порядка рисования, а не z-порядка. Это что-то мне нужно сказать GL, чтобы сделать это явно? – Chris

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