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
这个方法定位模型不是很好,定位一个点效果刚刚的。定位点我使用这个方法。
以上是个人理解,不喜勿喷。
本文探讨了在osgEarth中使用三种不同方法进行相机定位的具体实现。方法一通过设置TetherNode和Viewpoint来锁定相机,但可能影响鼠标操作;方法二利用Viewpoint设置焦点头部、俯仰和范围,适合根据模型大小调整;方法三直接设置经纬度、方位角、俯仰角和范围,适用于精确点定位。

2728

被折叠的 条评论
为什么被折叠?



