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
這個方法定位模型不是很好,定位一個點效果剛剛的。定位點我使用這個方法。
以上是個人理解,不喜勿噴。