在osgEarth中通过三维模型的LOD显示来提高系统的帧率的解决方法

在osgearth程序的开发过程中,为了提高系统的帧率和运行效率,需要对三维模型进行LOD优化处理,通过使用OSG的osg::LOD类来实现。

如果在osgEarth中直接加载三维模型,当三维模型的数量很多时,会消耗大量的计算机内存,这是个不可取的做法。使用LOD方法处理大量三维模型时,能提升系统的帧率和运行效率,使用LOD加载三维模型如图1所示,使用LOD卸载三维模型如图2所示。

在osgEarth中通过三维模型的LOD显示来提高系统的帧率的解决方法

                                                                          图1    LOD加载三维模型(帧率2.53)

在osgEarth中通过三维模型的LOD显示来提高系统的帧率的解决方法

                                                                           图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 );

 

上一篇:理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”?


下一篇:夜光带你走进 传奇语言php(8)