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



我正在使用LibGDX并渲染一些模型。这与预期一样有效,只是"更远"的对象显示在"更近"的对象的"前面"。换句话说,深度顺序似乎与我的预期相反。

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

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

有人知道是什么原因造成的吗?

如果它总是完全错误的顺序,请检查您是否传递了对glDepthFunc有意义的内容。默认值是通常可感知的GL_LESS;尝试GL_GREATER

如果订单看起来是您发出draw调用的订单,那么请检查您是否真的有深度缓冲区。如果不知道您使用的是哪个LibGDX后端,很难更具体,但除非已经分配了深度缓冲区,否则无论您如何进行深度测试,缓冲区都没有存储空间。

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

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

我的猜测是,LibGDX可能在线程方面做了一些智能的事情,并且在调用着色器inits之前没有设置适当的上下文(或者,可能的是,LibGDX严格希望您使用显式上下文,而不是隐式上下文,因此尽量不设置上下文——可能需要考虑将来可以在哪里线程化什么,并希望保持编码规则的统一(。当然,这只是一个随机的猜测。

最新更新