C++ 地球相机位置

C++ 地球相机位置,c++,camera,position,openscenegraph,osgearth,C++,Camera,Position,Openscenegraph,Osgearth,在几次消极尝试之后,我给你写信 我使用的是OSGEarth,尤其是我无法为起始位置设置相机的经度、纬度和高度 恐怕这与我使用地球操纵器有关 osg::ref_ptr<osgViewer::Viewer> g_viewer = new osgViewer::Viewer; osg::Vec3d eye(1110.0, 1110.0, 1110.0); osg::Vec3d center(10.0, 10.0, 10.0); osg::Vec3d up(0.0, 1.0, 0.0);

在几次消极尝试之后,我给你写信

我使用的是OSGEarth,尤其是我无法为起始位置设置相机的经度、纬度和高度

恐怕这与我使用地球操纵器有关

osg::ref_ptr<osgViewer::Viewer> g_viewer = new osgViewer::Viewer;

osg::Vec3d eye(1110.0, 1110.0, 1110.0);
osg::Vec3d center(10.0, 10.0, 10.0);
osg::Vec3d up(0.0, 1.0, 0.0);

g_viewer->setCamera(camera.get());

EarthManipulator* manip = new EarthManipulator();

manip->setViewpoint(Viewpoint(
    "Home",
    -71.0763, 42.34425, 0,
    // -71.0763, 42.34425, 0,   // longitude, latitude, altitude
    24.261, -21.6, 3450.0), // heading, pitch, range//3450
    4.0);     // duration, 4.0);

g_viewer->setCameraManipulator(manip);
因此,我创建了摄影机:

osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());  
osg::ref_ptr<osg::Camera> camera = new osg::Camera;
camera->setGraphicsContext(gc);
camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));
camera->setClearMask(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
osg::ref\u ptr gc=osg::GraphicsContext::createGraphicsContext(traits.get());
osg::ref_ptr camera=新osg::camera;
摄像头->设置图形上下文(gc);
摄影机->设置视口(新osg::视口(0,0,特征->宽度,特征->高度));
摄像头->设置透明蒙版(GL_深度_缓冲_位| GL_颜色_缓冲_位);
然后,我创建了视图,我将地球操纵器传递到该视图

osg::ref_ptr<osgViewer::Viewer> g_viewer = new osgViewer::Viewer;

osg::Vec3d eye(1110.0, 1110.0, 1110.0);
osg::Vec3d center(10.0, 10.0, 10.0);
osg::Vec3d up(0.0, 1.0, 0.0);

g_viewer->setCamera(camera.get());

EarthManipulator* manip = new EarthManipulator();

manip->setViewpoint(Viewpoint(
    "Home",
    -71.0763, 42.34425, 0,
    // -71.0763, 42.34425, 0,   // longitude, latitude, altitude
    24.261, -21.6, 3450.0), // heading, pitch, range//3450
    4.0);     // duration, 4.0);

g_viewer->setCameraManipulator(manip);
osg::ref_ptr g_viewer=新的osgViewer::viewer;
osg::Vec3d眼(1110.01110.01110.0);
osg::Vec3d中心(10.0,10.0,10.0);
osg::Vec3d向上(0.0,1.0,0.0);
g_viewer->setCamera(camera.get());
EarthManipulator*manip=新的EarthManipulator();
manip->setViewpoint(视点(
“家”,
-71.0763, 42.34425, 0,
//-71.0763,42.34425,0,//经度,纬度,海拔
24.261,-21.63450.0),//航向、俯仰、射程//3450
4.0);     // 持续时间,4.0);
g_viewer->setCameraManipulator(manip);
但我不能从通常的角度出发

我还试着在EarthMipulator上工作,特别是设置起始位置

manip->setHomePosition()


但是没有任何变化

您想要的方法是EarthManipulator::setHomeViewpoint:

manip->setHomeViewpoint(视点(
“家”,
-71.0763,42.34425,0,//经度,纬度,海拔
24.261, -21.6, 3450.0)); // 航向、俯仰、范围