愿你出走半生,归来仍是少年!
除了大面积的倾斜摄影的加载,同时还存在单个模型的加载。常用的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.效果