OpenGL ES 2.0使用LibGDX以相反的深度顺序显示对象

时间:2014-07-31 23:29:10

标签: libgdx opengl-es-2.0 depth-buffer

我正在使用LibGDX并渲染一些模型。这可以按预期工作,除了远离"更远的对象"显示"在前面" "更近"对象。换句话说,深度顺序似乎与我的预期相反。

奇怪的是,模型被远剪裁平面以正确的顺序剪切。 (大多数距离物体首先消失)

我尝试启用GL_DEPTH_TEST,我正在清除GL_DEPTH_BUFFER_BIT

有谁知道造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:2)

如果订单总是错误,请检查您是否已通过glDepthFunc有意义的内容。默认值通常是明智的GL_LESS;试试GL_GREATER

如果订单显示为您正在发出绘图调用的订单,请检查您是否确实有深度缓冲区。在不知道你使用哪个LibGDX后端的情况下很难更具体,但除非已经分配了深度缓冲区,否则你对深度测试所做的事情并不重要,那里有什么问题。无论如何都没有存储缓冲区。

正确答案,根据下面的twiz评论:

  

我需要设置GL_LESS,但显然LibGDX并不喜欢它   你使用glDepthFunc()。我的自定义着色器实现了Shader类,   所以我不得不使用传递给begin()的RenderContext   方法。然后我添加了这一行:context.setDepthTest(GL20.GL_LESS);

我的猜测是LibGDX可能正在使用线程做一些聪明的事情,并且在调用着色器之前没有设置适当的上下文(或者,LibGDX可能严格要求你使用显式上下文而不是隐式一,因此不要设置一个 - 可能考虑到未来可能的线程和保持编码规则统一的愿望。当然是随机猜测。