OSGEarth新手学习随笔 — 星空的显示
过程中发现的问题:
1.地球上没有变天和夜晚的明暗变化(图1)
2.地球上的黑夜部分太黑,看不到任何东西(图2)
3.设置时间后发现和实际不对应
//---------------------------------------------
osgEarth::DateTime dateTime(2020, 11, 11, 3);
sky_node = osgEarth::Util::SkyNode::create(mapNode);
sky_node->setName("sky");
sky_node->setDateTime(dateTime);
sky_node->setLighting(true);
sky_node->attach(viewer, 0);
mRoot->addChild(sky_node);
在某处找了添加星空的代码(如上),运行后发现没有白天黑夜的明暗变化。(效果如下图)
上面的代码中直接将skyNode添加到了根节点中,查找资料发现有人说与mapNode和SkyNode添加到节点中有先后顺序有关,经测试发现不管用。后边发现使用insertGroup 方法可以解决该问题,修改如下:
osgEarth::DateTime dateTime(2020, 11, 11, 3);
sky_node = osgEarth::Util::SkyNode::create(mapNode);
sky_node->setName("sky");
sky_node->setDateTime(dateTime);
sky_node->setLighting(true);
sky_node->attach(viewer, 0);
osgEarth::insertGroup(sky_node,mapNode->getParent(0));
//mRoot->addChild(sky_node);
这样修改完后可以显示明暗(具体原因不清楚),但是夜间部分特别的黑 如下图:
经过查找发现skyNode创建时有一个参数,通过他可以控制夜间部分黑暗的程度,修改如下:
osgEarth::DateTime dateTime(2020, 11, 11, 3);//格林尼治时间
osgEarth::Util::SkyOptions skyOptions;
skyOptions.ambient()=0.4;//控制黑夜部分明暗程度
sky_node = osgEarth::Util::SkyNode::create(skyOptions,mapNode);
sky_node->setName("sky");
sky_node->setDateTime(dateTime);
sky_node->setLighting(true);
sky_node->attach(viewer, 0);
osgEarth::insertGroup(sky_node,mapNode->getParent(0));
至于问题3,时间不对应问题,经测试发现skyNode中使用的时间是格林尼治时间,与中国的东八区相差8个小时。转换一下即可。