EarthManipulator實現定位

    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

這個方法定位模型不是很好,定位一個點效果剛剛的。定位點我使用這個方法。

以上是個人理解,不喜勿噴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章