本文主要是介绍7.OsgEarth加载Obj模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
愿你出走半生,归来仍是少年!
除了大面积的倾斜摄影的加载,同时还存在单个模型的加载。常用的obj模型作为单体在三维场景中的呈现。
原理类似于6.OsgEarth加载倾斜摄影-CSDN博客中的倾斜加载。
1.代码
通过osg读取文件作为节点添加到GeoTransform节点中,然后将节点添加到ModelLayer中进行加载。
osgDB::Options("noRotation")可保证obj模型加载到场景中后不会被自动旋转90°。
osgEarth::Registry::shaderGenerator().run(node)保证纹理。
osg::ref_ptr<osgEarth::ModelLayer> Cv::LayerFactory::CreateObjModelLayer(std::string fileFullName, const SpatialReference* srs, double x, double y, double z)
{osg::ref_ptr<osgEarth::GeoTransform> xform = new osgEarth::GeoTransform();bool exist = FileUtility::exist(fileFullName);osgEarth::GeoPoint position(srs, x, y, z);auto pos4326 = position.transform(SpatialReference::get("wgs84"));//设置文件读取不旋转osg::ref_ptr<osgDB::Options> options = new osgDB::Options("noRotation");auto node = osgDB::readNodeFile(fileFullName, options);osgEarth::Registry::shaderGenerator().run(node);xform->addChild(node);xform->setPosition(pos4326);ref_ptr<osgEarth::ModelLayer> modelLayer = new osgEarth::ModelLayer();string lyName = Utilitys::FileUtility::getNameWithoutType(fileFullName);modelLayer->setLocation(pos4326);modelLayer->setNode(xform);modelLayer->setName(lyName);return modelLayer;
}
2.效果
这篇关于7.OsgEarth加载Obj模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!