osgearth3.2添加一个云层layer的代码
时间: 2023-09-17 20:10:11 浏览: 310
下面是在osgEarth 3.2中添加一个云层layer的示例代码:
```cpp
#include <osgEarth/Map>
#include <osgEarth/MapNode>
#include <osgEarthUtil/Sky>
#include <osgEarthUtil/Controls>
#include <osgEarthUtil/LayerManipulator>
using namespace osgEarth;
using namespace osgEarth::Util;
int main(int argc, char** argv)
{
// 创建一个地图
osg::ref_ptr<Map> map = new Map();
// 创建一个图层
osg::ref_ptr<Layer> layer = new ImageLayer(
new ImageLayerOptions("Clouds", "http://tile.openweathermap.org/map/clouds_new/0/0/0.png",
ProfileOptions(), ImageLayerOptions::IMAGE, osgEarth::optional<int>(7)));
// 将图层添加到地图中
map->addLayer(layer.get());
// 创建一个地图节点
osg::ref_ptr<MapNode> mapNode = new MapNode(map.get());
// 创建一个控制器
osg::ref_ptr<osgEarth::Util::EarthManipulator> manipulator = new osgEarth::Util::EarthManipulator();
// 创建一个天空节点
osg::ref_ptr<osgEarth::Util::SkyNode> skyNode = new osgEarth::Util::SkyNode();
skyNode->attach(mapNode.get());
skyNode->setDateTime(DateTime(2019, 7, 1, 12, 0, 0));
// 设置相机
osg::ref_ptr<osg::Camera> camera = new osg::Camera();
camera->setViewport(0, 0, 800, 600);
camera->setClearColor(osg::Vec4(0.2, 0.2, 0.6, 1.0));
camera->setProjectionMatrixAsPerspective(30.0, 800.0 / 600.0, 1.0, 100000.0);
camera->setViewMatrixAsLookAt(osg::Vec3d(0.0, 0.0, 1000000.0), osg::Vec3d(), osg::Vec3d(0.0, 1.0, 0.0));
// 创建一个场景图节点
osg::ref_ptr<osg::Group> root = new osg::Group();
root->addChild(mapNode.get());
root->addChild(skyNode.get());
root->addChild(manipulator.get());
root->addChild(camera.get());
// 添加图层控制器
osg::ref_ptr<osgEarth::Util::LayerManipulator> layerManipulator = new osgEarth::Util::LayerManipulator(mapNode.get());
layerManipulator->setTerrainEnabled(false);
layerManipulator->setDynamic(true);
root->addChild(layerManipulator.get());
// 运行场景
osgViewer::Viewer viewer;
viewer.setSceneData(root.get());
viewer.run();
return 0;
}
```
这个示例代码中,我们使用 `ImageLayer` 类创建一个云层图层,并将其添加到地图中。然后创建一个地图节点、一个控制器、一个天空节点和一个相机,并将它们都添加到一个场景图节点中。最后添加一个图层控制器,用于控制图层的显示。运行程序后,你应该能够看到一个带有云层的地球。
阅读全文