osgEarth基礎入門 - 第一個demo


  osgEarth是基於三維引擎osg開發的三維數字地球引擎庫,在osg基礎上實現了瓦片調度插件,可選的四叉樹調度插件,更多的地理數據加載插件(包括GDAL,ogr,WMS,TMS,VPB,filesystem等),再結合一套地理投影轉換插件,這樣就能夠實現高效處理加載調度地理數據在三維地球上的顯示,實現三維虛擬地球。

  osgEarth的特點:支持加載常見的柵格數據(影像和DEM),但是大數據必須建立金字塔,設置為地理投影,想要高效率最好處理為瓦片,這樣也便於部署在服務端。矢量數據,最好盡可能的簡化,因為大的矢量會十分影響渲染速度,當然也可以對矢量柵格化處理加快速度,對於模型的話,大數據量一定要做LOD或者pageLod。

  想要實現一個簡單的基於osgEarth的三維地球,有兩種方式,這兩種方式是互通的。一種基於XML標簽的earth文件加載,另外一種是采用C++代碼,本質是一樣的。

  osgEarth程序的常規流程:

  創建osgViewer---->創建MapNode---->設置Earth操作器---->設置場景參數----->run

  • MapNode是繼承自osg的Node,是osgEarth中地球節點,你所添加的影像,DEM,模型都包含在MapNode中,因為它們都加入到Map中,Map則類似二維中的Map可以添加各種圖層。
  • 剩余的不管是模型節點Node,或者是標注Node,還是其他的都是可以直接添加到MapNode中或者另外的Group中。
  • Earth操作器則和其他osg操作器一樣,只不過專門為三維地球瀏覽定制,具體參數可以設置。
  • 場景參數則主要有自動地形裁剪,最小裁剪像素等其他優化場景的參數。
int main()
{
  //osgViewer
  osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
  //MapNode
  osg::ref_ptr
<osg::Group> root = new osg::Group;   osg::ref_ptr<osg::Node> earthNode = osgDB::readNodeFile("sample.earth");
  //Earth操作器   osg::ref_ptr
<osgEarth::Util::EarthManipulator> em = new osgEarth::Util::EarthManipulator;   root->addChild(earthNode);   viewer->setSceneData(root.get());   viewer->setCameraManipulator(em);   viewer->realize();   return viewer->run(); }

 

 

 

轉載鏈接:osgEarth基礎入門 - sunliming - 博客園 (cnblogs.com)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM