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

时间:2016-06-15 08:48:51

标签: openscenegraph depth-buffer

我正在使用OSG开发一个小型GIS应用程序,但我很喜欢它。

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

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

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

以下是我想要尝试的内容: - 在我的根上输入一个清除节点以清除所有缓冲区 - 在每个层节点的顶部输入一个清除节点,仅清除深度缓冲区 - 找到一种方法迫使OSG按特定顺序绘制这些图层

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

1 个答案:

答案 0 :(得分:2)

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

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

如果你使用多相机解决方案,你有多通道渲染,这可能会花费很多,因为在你的情况下,你可能会用它自己的相机绘制每一层。

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