在 OpenSceneGraph 中控制深度缓冲区和绘制顺序

Controlling depth buffer and drawing order in OpenSceneGraph

我正在使用 OSG 开发一个小型 GIS 应用程序,但我对它还是个新手。

由于视野没有太大变化,我并没有努力保持一个不错的 fps 比率。

我必须在同一视图上绘制多个图层。图层可能会重叠,但并非总是如此。

现在,为了能够选择哪个图层在其他图层之上,我正在使用 PolygonOffet 属性,但我不喜欢它。

这是我想尝试的: - 在我的根上放置一个清除节点以清除所有缓冲区 - 在每个层节点的顶部放置一个清除节点以仅清除深度缓冲区 -找到一种方法来强制 OSG 以特定顺序绘制这些图层

所以我的问题是: - 可能吗 ? - 如何选择图层节点的渲染顺序?

您可以清除相机的缓冲区。例如。如果你的主摄像头绘制了所有东西而你只想清除一个缓冲区,你可以添加第二个摄像头,它除了具有相同的 renderTargetImplementation 之外什么都不做,将 DepthBuffer 附加到它,具有 GL_DEPTH_BUFFER_BIT clearMask 并让它在之后渲染你的主摄像头。

对于相机,您可以通过 setRenderOrder 选择渲染顺序,对于节点,您可以使用 setRenderBin。

如果您使用多相机解决方案,虽然您有一个多通道渲染,但可能会变得昂贵,因为在您的情况下,您可能会用它自己的相机绘制每一层。

旁注,您想要的是避免 z-fighting,有几种技术可以做到这一点。或许通过这个关键词你就能找到答案。