2016-06-15 149 views
1

我正在使用OSG开发一个小小的GIS应用程序,但我对它很陌生。在OpenSceneGraph中控制深度缓冲区和绘图顺序

由于视图没有太大变化,我并没有努力保持一个体面的fps比率。

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

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

这里是我想尝试什么: -put在我的根清晰的节点来清除所有缓冲区 -put每层节点的顶部一个明确的节点只清除深度缓存 - 查找办法强制OSG按特定顺序绘制这些图层

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

回答

1

您可以使用相机清除缓冲区。例如。如果您的主摄像头绘制了所有内容,并且您只想清除一个缓冲区,则可以添加第二个摄像头,该摄像头除了具有相同的renderTargetImplementation之外不会执行任何操作,将DepthBuffer附加到该摄像头,使用GL_DEPTH_BUFFER_BIT clearMask并在主摄像头之后渲染。

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

如果您使用多相机解决方案,虽然可能会有多通道渲染,但这可能会花费很高,因为在您的情况下,您可能会使用自己的相机绘制每个图层。

在旁注中,你想要的是避免z战斗,并有几种技术来做到这一点。也许有了这个关键字,你可以找到答案。