在osgEarth中通過三維模型的LOD顯示來提高系統的幀率的解決方法

在osgearth程序的開發過程中,爲了提高系統的幀率和運行效率,需要對三維模型進行LOD優化處理,通過使用OSG的osg::LOD類來實現。

如果在osgEarth中直接加載三維模型,當三維模型的數量很多時,會消耗大量的計算機內存,這是個不可取的做法。使用LOD方法處理大量三維模型時,能提升系統的幀率和運行效率,使用LOD加載三維模型如圖1所示,使用LOD卸載三維模型如圖2所示。

                                                                          圖1    LOD加載三維模型(幀率2.53)

                                                                           圖2   LOD卸載三維模型(幀率31.21)

關鍵代碼如下:

lodmodel ->addChild(model,0,5000);
scale_model ->setMatrix(osg::Matrix::scale(1.0,1.0,1.0));
scale_model ->addChild(lodmodel );
const osg::Matrix model_matrix = scale_model ->getMatrix();
const osg::BoundingSphere model_box = scale_model ->getBound(); 
osg::Matrix modelMat = osg::Matrix::translate(-model_box .center()) ;
osg::Matrix modelmatrix1 = model_matrix * modelMat ; 
osg::Matrix modelmatrix2 = modelmatrix1 * osg::Matrix::rotate(osg::DegreesToRadians(0.0), 1, 0, 0) * osg::Matrix::rotate(osg::DegreesToRadians(0.0), 0, 0, 1)* osg::Matrix::rotate(osg::DegreesToRadians(0.0), 0, 1, 0);
scale_model ->setMatrix(modelmatrix2 ) ; 
model_locator = new osgEarth::Util::ObjectLocatorNode( mapNode->getMap());
model_locator ->getLocator()->setPosition(osg::Vec3d(116.823925, 28.753795, 29));
model_locator ->addChild(scale_model );

最近一段時間一直在研究osgEarth和OSG渲染引擎,收穫頗多,歡迎志同道合的小夥伴一起交流與合作(QQ:1628271050,請備註OSG開發交流)。另外,相關OSG/osgEarth小項目代碼的github存儲地址如下:

1、https://github.com/SheyWang/flight_simulation

2、https://github.com/SheyWang/roaming_system

自己在開發系統之前,成功編譯了OSG和osgearth,並整理和學習了一些OSG的資料。需要相關資料的小夥伴可以下載,下載地址如下:

1、https://download.csdn.net/download/xiaoyuwang1994/12049698

OSG資料大全,該資源包括了一些入門OSG(OpenSceneGraph)三維圖形渲染引擎必看的文檔書籍,對三維開發非常有幫助。

2、https://download.csdn.net/download/xiaoyuwang1994/10177254

osgearth2.8幫助文檔,自己使用doxygen_1.8.6和htmlhelp.exe編譯的osgearth2.8的幫助文檔,希望能夠幫助到大家。

3、https://download.csdn.net/download/xiaoyuwang1994/10176063

osg完整配置過程(vs2010,win7,win10),本人經過自己的實踐成功編譯了osg3.4,步驟詳盡,編譯後自己總結的文檔,希望對大家有幫助。

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