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)