osgEarth2.10 中用setNode替代setTetherNode设置视点跟踪

另外,视点必须在viewer执行senScenceData之后才会有效。

	osg::ref_ptr<osg::Group> mRoot = new osg::Group();	//设置根节点
	osgViewer::Viewer * pViewer = new osgViewer::Viewer();
	osg::MatrixTransform* mtFly = new osg::MatrixTransform;//创建一个模型
	mRoot->addChild(mtFly);//将模型放进根节点
	//初始化一个操作器
	osg::ref_ptr<osgEarth::Util::EarthManipulator> em = new osgEarth::Util::EarthManipulator;
	pViewer->setCameraManipulator(em.get());
	pViewer->setSceneData(mRoot.get());//添加到场景
    pViewer->realize();
    //路径的生成这里不细说了,直接略过了
    mtFly->setUpdateCallback(new osg::AnimationPathCallback(apc,0.0,1.0));
	
	//下面是区别
    //获取当前操作器的视点,将模型放进这个视角中,然后设置这个视角的一些参数,比如从哪个角度和距离观察模型。然后将这个视点设置为操作器的视点。
    osgEarth::Viewpoint vp = m_em->getViewpoint();
    vp.setNode(mtFly);
    vp.range()->set(250000.0, osgEarth::Units::METERS);//观察的距离
    vp.pitch()->set(-45.0, osgEarth::Units::DEGREES);//观察的角度
    em->setViewpoint(vp, 1.0);


posted @ 2022-03-25 00:03  fishpro  阅读(166)  评论(0编辑  收藏  举报