В настоящее время я работаю с OSGEarth и хочу создать на море буй со светом.
Идея состоит в том, чтобы создать простой прожектор с использованием OSG :: light.
Затем Я могу установить его положение с точки зрения широты и долготы Земли, но я не могу установить высоту / z света. Он всегда находится в положении z = 0.
GeoPoint point(geosrs, 8.91879, 44.4039, 10, ALTMODE_ABSOLUTE);
point.toWorld(world);
osg::Light* spot = new osg::Light(lightNum++);
spot->setPosition(worldToVec4(world));
spot->setAmbient(osg::Vec4(1, 0, 0, 1));
spot->setDiffuse(osg::Vec4(1, 0, 0, 1));
spot->setSpotCutoff(15);//20
spot->setSpotExponent(10.0f);
// point straight down at the map:
world.normalize();
spot->setDirection(-world);
osg::LightSource* spotLS = new osg::LightSource();
spotLS->setLight(spot);
lights->addChild(spotLS);
, где
osg::Vec4 worldToVec4(const osg::Vec3d& ecef){
osg::Vec4 result(0.0f, 0.0f, 0.0f, 1.0f);
osg::Vec3d d = ecef;
while (d.length() > 1e6)
{
d *= 0.1;
result.w() *= 0.1;
}
return osg::Vec4(d.x(), d.y(), d.z(), result.w());
}
Я думаю, что проблема связана с преобразованием из lat / lon / alt в Vec4.
Спасибо за ваше внимание.