查看: 2048|回复: 2

用osgearth2.4的时候,导出osgEarth::Annotation::PlaceNode到ive的时候出错了

[复制链接]

该用户从未签到

发表于 2013-10-1 22:00:57 | 显示全部楼层 |阅读模式
  1. #include <osg/Notify>
  2. #include <osgViewer/Viewer>
  3. #include <osgEarthUtil/EarthManipulator>
  4. #include <osgEarthUtil/ExampleResources>
  5. #include <osgEarthAnnotation/ModelNode>

  6. #include <osgEarthAnnotation/PlaceNode>

  7. int main()
  8. {
  9.         int argc = 2;
  10.         char* argv[2];
  11.         argv[0] = "*.exe";
  12.         argv[1] = "D:\\RUNTIME\\osgearth-3.0.1-2.4\\Release\\tests\\gdal_tiff.earth";

  13.         osg::ArgumentParser arguments( &argc, argv );
  14.         osg::ref_ptr<osgViewer::Viewer> viewer=new osgViewer::Viewer(arguments);
  15.         osg::ref_ptr<osg::Group> group=new osg::Group;

  16.         viewer->getDatabasePager()->setUnrefImageDataAfterApplyPolicy( false, false );
  17.        
  18.         osg::ref_ptr<osgEarth::Util::EarthManipulator> em=new osgEarth::Util::EarthManipulator;
  19.         viewer->setCameraManipulator(em);

  20.         osg::ref_ptr<osg::Node> earthFileNode=osgEarth::Util::MapNodeHelper().load(arguments,viewer);
  21.         osgEarth::MapNode* mapNode = osgEarth::MapNode::findMapNode(earthFileNode);

  22.         group->addChild(earthFileNode);

  23.         //add Annotation:
  24.         osgEarth::Symbology::Style AnnotationStyle;
  25.         AnnotationStyle.getOrCreate<osgEarth::IconSymbol>()->url()->setLiteral( "D:/EARTH/data/images/PNG/placemark32.png" );
  26.         AnnotationStyle.getOrCreate<osgEarth::Annotation::TextSymbol>()->size() =50.0;
  27.         const osgEarth::SpatialReference* geoSRS=mapNode->getMapSRS()->getGeographicSRS();
  28.         osg::ref_ptr<osgEarth::Annotation::PlaceNode> pn=new osgEarth::Annotation::PlaceNode(mapNode,osgEarth::GeoPoint(geoSRS, -74.00, 40.71), "New York", AnnotationStyle);
  29.         group->addChild(pn);

  30.         //output Annotation:
  31.         osgDB::Registry::instance()->writeNode(*pn,"Annotation.ive",osgDB::Registry::instance()->getOptions());


  32.     if ( earthFileNode )
  33.     {
  34.         viewer->setSceneData( group );

  35.         viewer->getCamera()->setNearFarRatio(0.00002);
  36.         viewer->getCamera()->setSmallFeatureCullingPixelSize(-1.0f);

  37.         viewer->run();
  38.     }

  39.     return 0;
  40. }
复制代码
以上是源代码,下面是报错:
Error writing IVE image: StateSet::write(): Unknown StateAttribute: VirtualProgram

该用户从未签到

发表于 2013-10-2 09:24:33 | 显示全部楼层
从错误代码中看应该是ive在写的时候不识别VirtualProgram属性
造成这种情况的原因可能是osg版本和osgearth版本不一致   或者VirtualProgram属性不是osg的属性  而是osgearth中自定义的

该用户从未签到

 楼主| 发表于 2014-4-12 18:36:59 | 显示全部楼层
VirtualProgram在2.3版本之前是没有的,这是osgearh的属性,用osg是没法直接输出的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表