查看: 4106|回复: 4

OSGearth,贴近球面时鼠标无法准确的控制视点位置

[复制链接]

该用户从未签到

发表于 2009-12-17 17:49:23 | 显示全部楼层 |阅读模式
osg::ArgumentParser arguments(&argc,argv);
osgViewer::Viewer viewer(arguments);
viewer.setUpViewOnSingleScreen(0);      
viewer.setCameraManipulator(new osgGA::TrackballManipulator());
std::string modelPath =
  "F:\\google.earth";

{
  osg::ref_ptr<osg::Node> node = osgDB::readNodeFile(modelPath);
  viewer.setSceneData(node.get());
}

// render a frame
viewer.realize();
while(!viewer.done())
{
  viewer.frame();
}

使用的googleearth的图层信息,拉近了发现鼠标操作的高度似乎要低于实际图层所高度,低视角转动地球时无法准确控制找到自己所需的位置。
哪位大侠帮忙告诉一下,在哪里设置鼠标控制点跟球面视角高度保持一致啊?

该用户从未签到

发表于 2009-12-18 08:18:37 | 显示全部楼层
Trackball不太适合用来浏览地球,可以考虑用TerrainManipulator或者osgEarth自带的EarthManipulator

该用户从未签到

 楼主| 发表于 2009-12-18 14:16:07 | 显示全部楼层
好的!谢谢啦!
我试试看!

还有Trackball不适合的原因是什么?

该用户从未签到

 楼主| 发表于 2009-12-18 15:41:20 | 显示全部楼层
谢谢啦!用EarthManipulator解决了鼠标和滚轮的问题!
是这样解决的:
        std::string modelPath =
         "F:\\word_wind.earth";
        {
         // create an osgEarth node. Add it to the scene graph and let the ref pointer go out of scope.
         osg::ref_ptr<osg::Node> node = osgDB::readNodeFile(modelPath);
         viewer.setSceneData(node.get());
        }

    manip->getSettings()->bindMouseDoubleClick(
        osgEarthUtil::EarthManipulator::ACTION_GOTO,
        osgGA::GUIEventAdapter:EFT_MOUSE_BUTTON );

    // add our fly-to handler
    viewer.addEventHandler(new FlyToViewpointHandler( manip ));

    // add some stock OSG handlers:
    viewer.addEventHandler(new osgViewer::StatsHandler());
    viewer.addEventHandler(new osgViewer::WindowSizeHandler());
    viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));

继续找海拔数据,有什么可以提供的建议么?

该用户从未签到

发表于 2009-12-18 16:56:21 | 显示全部楼层
没什么特别的原因,只是浏览地球是我们希望地球中心不要乱跑而已~~呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表