osgEarth 线段关闭深度测试之后,如何让地形模型表面遮挡
时间: 2023-08-05 15:16:31 浏览: 272
在使用 osgEarth 绘制线段时,如果关闭了深度测试,那么线段就会覆盖在地形模型表面之上,而不会被遮挡。如果需要让地形模型表面遮挡线段,则可以通过以下方法实现:
1. 禁用线段的深度缓冲区写入。可以使用 osg::Depth 类中的 setWriteMask() 方法,将线段的深度缓冲区写入设为 false。
```cpp
osg::ref_ptr<osg::Depth> depth = new osg::Depth;
depth->setWriteMask(false);
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->getOrCreateStateSet()->setAttributeAndModes(depth, osg::StateAttribute::ON);
```
2. 开启地形模型的深度测试。可以使用 osg::Depth 类中的 setFunction() 方法,设置地形模型的深度测试函数。
```cpp
osg::ref_ptr<osg::Depth> depth = new osg::Depth;
depth->setFunction(osg::Depth::LEQUAL);
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->getOrCreateStateSet()->setAttributeAndModes(depth, osg::StateAttribute::ON);
```
通过以上方法,可以实现线段被地形模型表面遮挡的效果。需要注意的是,由于禁用了线段的深度缓冲区写入,因此线段会出现透明效果,而不是完全不可见。如果需要完全不可见的效果,可以将线段的颜色设为背景色。
阅读全文