模型的奇怪渲染(一个在另一个前面)

Odd rendering of models (one in front of the other)

我有两个模型。我的地形之一是使用网格生成的。另一个模型(深蓝色海洋)是使用模型构建器创建的圆柱体。

海洋模型和地形模型在地形底部相交。如何阻止这些行发生?

更新:

我已将属性添加到我的模型中:

modelBuilder.part("chunk" + Integer.toString(x) + "." + Integer.toString(y), myMesh, GL20.GL_TRIANGLES, new Material(new DepthTestAttribute(0))); 

但是现在我的模型没有了,只剩下大海了。

oceanModel = mb.createCylinder(10000f, 15, 10000f , 30, new Material(ColorAttribute.createDiffuse(Color.NAVY)), Usage.Position | Usage.Normal | Usage.TextureCoordinates);

如果您不需要地形在水下通过(即,您在模型中水应该显示的地方打洞),您可以在绘制这两个网格时关闭深度测试。如果您使用的是 LibGDX 3D API,您可以通过为地形模型提供一个 DepthTestAttribute 并将该属性的 depthFunc 设置为 0 来实现。如果您自己处理网格渲染,您可以直接用Gdx.gl.glDisable(GL20.GL_DEPTH_TEST);

关掉

如果你确实需要两个网格相交,那么保持深度测试,你需要将相机的近平面设置得更远(更大的数字)。通常,在它开始剪切游戏中的对象之前,您应该将它设置得尽可能远。这也有助于将相机的远平面设置得更近,但不如将近平面设置得更远。

如果您想了解有关此问题的更多信息,请查看 Z-fighting。