我正在使用LibGDX并渲染一些模型。这可以按预期工作,除了远离"更远的对象"显示"在前面" "更近"对象。换句话说,深度顺序似乎与我的预期相反。
奇怪的是,模型被远剪裁平面以正确的顺序剪切。 (大多数距离物体首先消失)
我尝试启用GL_DEPTH_TEST
,我正在清除GL_DEPTH_BUFFER_BIT
。
有谁知道造成这种情况的原因是什么?
答案 0 :(得分:2)
如果订单总是错误,请检查您是否已通过glDepthFunc
有意义的内容。默认值通常是明智的GL_LESS
;试试GL_GREATER
。
如果订单显示为您正在发出绘图调用的订单,请检查您是否确实有深度缓冲区。在不知道你使用哪个LibGDX后端的情况下很难更具体,但除非已经分配了深度缓冲区,否则你对深度测试所做的事情并不重要,那里有什么问题。无论如何都没有存储缓冲区。
正确答案,根据下面的twiz评论:
我需要设置GL_LESS,但显然LibGDX并不喜欢它 你使用glDepthFunc()。我的自定义着色器实现了Shader类, 所以我不得不使用传递给begin()的RenderContext 方法。然后我添加了这一行:context.setDepthTest(GL20.GL_LESS);
我的猜测是LibGDX可能正在使用线程做一些聪明的事情,并且在调用着色器之前没有设置适当的上下文(或者,LibGDX可能严格要求你使用显式上下文而不是隐式一,因此不要设置一个 - 可能考虑到未来可能的线程和保持编码规则统一的愿望。当然是随机猜测。