setRenderBinDetails DepthSortedBin添加无效
时间: 2024-01-25 20:02:17 浏览: 17
如果使用 `setRenderBinDetails` 方法添加 `DepthSortedBin` 后发现无效的话,可能是以下几个原因:
1. 没有开启深度测试。在使用深度排序时,需要开启深度测试才能正确进行渲染。可以使用以下代码开启深度测试:
```cpp
osg::StateSet* stateSet = node->getOrCreateStateSet();
stateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);
```
2. 没有设置正确的深度信息。深度排序是根据对象离相机的距离来排序的,如果深度信息不正确,就无法正确进行排序。一般情况下,深度信息会通过相机自动计算得出,但是如果自定义了相机或者使用了多个相机,就需要手动设置深度信息。可以使用以下代码手动设置深度信息:
```cpp
osg::StateSet* stateSet = node->getOrCreateStateSet();
osg::Depth* depth = new osg::Depth;
depth->setWriteMask(true);
depth->setFunction(osg::Depth::LEQUAL);
stateSet->setAttributeAndModes(depth, osg::StateAttribute::ON);
```
其中,`setFunction` 方法用来设定深度比较的方式,这里我设定为小于等于(LEQUAL),也可以根据实际情况进行调整。
3. 没有设置正确的 RenderBin 名称。在使用深度排序时,需要使用 `setRenderBinDetails` 方法将节点添加到 `DepthSortedBin` 中才能正确进行排序。可以使用以下代码设置 RenderBin 名称:
```cpp
node->setRenderBinDetails(1, "DepthSortedBin");
```
其中,第一个参数是 RenderBin 的编号,第二个参数是 RenderBin 的名称。在使用深度排序时,RenderBin 名称应该是 “DepthSortedBin”。
希望以上信息能对你有所帮助。