OSG SpotLight высота - PullRequest
       100

OSG SpotLight высота

0 голосов
/ 19 февраля 2020

В настоящее время я работаю с 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.

Спасибо за ваше внимание.

...