加入osgEarth::SkyNode后不能正常退出代码
时间: 2023-08-01 14:06:02 浏览: 158
osgearth:用于 OpenSceneGraph 的 3D 映射引擎和 SDK
以下是一个示例代码,演示如何在退出程序前停止 SkyNode 的线程:
```
#include <osgEarth/MapNode>
#include <osgEarthUtil/Sky>
#include <osgViewer/Viewer>
int main(int argc, char** argv)
{
osgViewer::Viewer viewer;
osg::ref_ptr<osgEarth::MapNode> mapNode = osgEarth::MapNode::create();
viewer.setSceneData(mapNode.get());
// 创建 SkyNode
osg::ref_ptr<osgEarth::Util::SkyNode> skyNode = new osgEarth::Util::SkyNode();
mapNode->addChild(skyNode.get());
// 设置 SkyNode 属性
skyNode->setDateTime(osgEarth::DateTime(2018, 8, 1, 12.0)); // 设置日期时间
skyNode->setAutoDateTime(true); // 自动更新日期时间
viewer.run();
// 程序退出前手动停止 SkyNode 的线程
osgEarth::Util::SkyNode::stop();
return 0;
}
```
在这个示例中,我们首先创建了一个 MapNode,并将其设置为 Viewer 的场景数据。然后,我们创建了一个 SkyNode,并将其添加到 MapNode 上。接着,我们设置了一些 SkyNode 的属性,包括日期时间和自动更新日期时间。最后,我们调用了 Viewer 的 run() 函数来进入主循环。当程序退出时,我们手动调用了 osgEarth::Util::SkyNode::stop() 函数,以确保 SkyNode 的线程能够正常停止。
阅读全文