EarthManipulator* em = new EarthManipulator();
viewer.setCameraManipulator( em );
方法一
em->setTetherNode( app.geo );
osgEarth::Viewpoint vp;
vp.setNode( app.geo );
vp.heading()->set( -45.0, Units::DEGREES );
vp.pitch()->set( -20.0, Units::DEGREES );
vp.range()->set( model->getBound().radius()*10.0, Units::METERS );
em->setViewpoint( vp );
这种方法会锁定相机,导致鼠标左键不能移动。资料说可以解除绑定,具体没详细研究。
方法二
Viewpoint vp;
vp.focalPoint() = GeoPoint(_srs.get(), -90.0, 0, 0, ALTMODE_ABSOLUTE);
vp.heading()->set( 0.0, Units::DEGREES );
vp.pitch()->set( -89.0, Units::DEGREES );
vp.range()->set( _srs->getEllipsoid()->getRadiusEquator() * 3.0, Units::METERS );
vp.positionOffset()->set(0,0,0);
em->setViewpoint( vp );
这种方法稍微能好些,range需要自己根据模型的大小计算合适的范围。定位模型我使用这个方法。
方法三
manip->setViewpoint( Viewpoint(
"Home",
-71.0763, 42.34425, 0, // longitude, latitude, altitude
24.261, -21.6, 3450.0), // heading, pitch, range
5.0 ); // duration
这个方法定位模型不是很好,定位一个点效果刚刚的。定位点我使用这个方法。
以上是个人理解,不喜勿喷。