2014-10-20 5 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); 

관련된 모든 것을 생각합니다.

무슨 일입니까?

+1

GL 컨텍스트를 만들 때 깊이 버퍼 비트를 요청 했습니까? 당신이 묻지 않는 한 당신은 아무 것도 얻을 수 없습니다. – genpfault

+0

OpenGl은 저에게 비교적 새로운 것입니다. 어떻게 알 수 있습니까? 내가 사용하고있는 OpenTK GLControl 주변의 문서를 보면 depthbuffer가 제공되었음을 나타냅니다. "... GLControl은 GL.Clear()를 사용하여 제거해야하는 색상 버퍼와 깊이 버퍼를 제공합니다." – Chris

답변

0

설정 GL.DepthFunc(DepthFunction.Always);은 일을 잘못 만들고 있습니다. 이것은 GL이 이전에 그려진 객체 뒤에 놓여 있더라도 조각을 절대로 폐기하지 말라고 말합니다. GL_LESS 또는 GL_LEQUAL 비교 모드를 사용해야합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 덜 수정했다. 파편이 파기되고 있다고 가정합니다. 그러나 여전히 z 순서보다는 그리기 순서에 따라 파기되는 것 같습니다. 이것이 내가 GL에게 명시 적으로하도록 알려줄 필요가있는 것입니까? – Chris