当前位置:   article > 正文

osg qt5.15 osg3.6.3 osgEarth3.1 编译爬山

osg qt5.15 osg3.6.3 osgEarth3.1 编译爬山

Demo演示:Qt5.15.2+OSG3.6.3+OsgEarth3.1的QtCreator下的msvc2019x64版本

 

osgQt编译

步骤一:下载解压

步骤二:CMake配置

步骤三:CMake配置添加osg环境

步骤四:CMake配置添加Qt环境

步骤五:CMake修改CMakeLists文件内容:


还是出现错误:


检查,并未发现错误


继续深入

有一个路径填错了:


过了,继续配置:


填入其他Qt路径:

步骤六:配置通过

步骤七:生成成功

步骤八:打开工程,进行编译


编译各种问,尝试过多次后放弃,看其他博客是可以的。


(后面的复杂,博主直接修改源码开始移植过去,直接加入工程方式,过程比较艰难,如果能编译好osgQt是最好的,改源码问题较多,需要的可联系博主获取,但是不免费,尊重劳动成果,禁止白嫖)

模块化

配置文件

OsgEarthWidget.pri

  1. INCLUDEPATH += $$PWD
  2. DEPENDPATH += $$PWD
  3. QT += opengl
  4. FORMS += \
  5. $$PWD/OsgWidget.ui
  6. HEADERS += \
  7. $$PWD/OsgViewerWidget.h \
  8. $$PWD/OsgWidget.h \
  9. $$PWD/define.h \
  10. $$PWD/osgQt/include/osgQOpenGL/Export.h
  11. SOURCES += \
  12. $$PWD/OsgViewerWidget.cpp \
  13. $$PWD/OsgWidget.cpp \
  14. $$PWD/define.cpp
  15. # osg
  16. INCLUDEPATH += $$PWD/osg3.6.3-vs2019/include
  17. DEPENDPATH += $$PWD/osg3.6.3-vs2019/include
  18. LIBS += -L$$PWD/osg3.6.3-vs2019/lib
  19. LIBS += -lOpenThreads \
  20. -losg \
  21. -losgAnimation \
  22. -losgDB \
  23. -losgFX \
  24. -losgGA \
  25. -losgManipulator \
  26. -losgParticle \
  27. -losgPresentation \
  28. -losgShadow \
  29. -losgText \
  30. -losgUI \
  31. -losgUtil \
  32. -losgViewer \
  33. -losgVolume \
  34. -losgWidget \
  35. # -losgQt \
  36. -losgSim \
  37. -losgTerrain
  38. # osgQt
  39. INCLUDEPATH += $$PWD/osgQt/include
  40. DEPENDPATH += $$PWD/osgQt/include
  41. HEADERS += \
  42. $$PWD/osgQt/include/osgQOpenGL/CullVisitorEx \
  43. $$PWD/osgQt/include/osgQOpenGL/GraphicsWindowEx \
  44. $$PWD/osgQt/include/osgQOpenGL/OSGRenderer \
  45. $$PWD/osgQt/include/osgQOpenGL/RenderStageEx \
  46. $$PWD/osgQt/include/osgQOpenGL/StateEx \
  47. $$PWD/osgQt/include/osgQOpenGL/osgQOpenGLWidget \
  48. $$PWD/osgQt/include/osgQOpenGL/osgQOpenGLWindow
  49. SOURCES += \
  50. $$PWD/osgQt/include/osgQOpenGL/CullVisitorEx.cpp \
  51. $$PWD/osgQt/include/osgQOpenGL/GraphicsWindowEx.cpp \
  52. $$PWD/osgQt/include/osgQOpenGL/OSGRenderer.cpp \
  53. $$PWD/osgQt/include/osgQOpenGL/RenderStageEx.cpp \
  54. $$PWD/osgQt/include/osgQOpenGL/StateEx.cpp \
  55. $$PWD/osgQt/include/osgQOpenGL/osgQOpenGLWidget.cpp \
  56. $$PWD/osgQt/include/osgQOpenGL/osgQOpenGLWindow.cpp
  57. # osgEarth
  58. INCLUDEPATH += $$PWD/osgearth3.1-vs2019/include
  59. LIBS += -L$$PWD/osgearth3.1-vs2019/lib
  60. LIBS += -losgEarth

Demo源码

  1. osg::ref_ptr<osg::Node> OsgWidget::getEarthSphiere()
  2. {
  3. osg::ref_ptr<osg::Group> pGroup = new osg::Group;
  4. osgEarth::initialize();
  5. const char* styles_css =
  6. R"(
  7. p {
  8. altitude-clamping: terrain-drape;
  9. render-backface-culling: false;
  10. }
  11. p1: p{ fill: #ff3f3f9f; }
  12. p2: p{ fill: #3fff3f9f; }
  13. p3: p{ fill: #3f3fff9f; }
  14. p4: p{ fill: #ff3fff9f; }
  15. p5: p{ fill: #ffff3f9f; }
  16. )";
  17. const char* script_source =
  18. R"(
  19. function getStyleClass()
  20. {
  21. // Exclude any countries beginning with the letter A:
  22. if ( feature.properties.name.charAt(0) === 'A' )
  23. return null;
  24. // If it starts with the letter C, return an inline style:
  25. if ( feature.properties.name.charAt(0) == 'C' )
  26. return '{ _fill: #ffc838; stroke: #8f8838; extrusion-height: 250000; }';
  27. // Otherwise, return a named style based on some calculations:
  28. var pop = parseFloat(feature.properties.pop);
  29. if ( pop <= 14045470 ) return "p1";
  30. else if ( pop <= 43410900 ) return "p2";
  31. else if ( pop <= 97228750 ) return "p3";
  32. else if ( pop <= 258833000 ) return "p4";
  33. else return "p5";
  34. }
  35. )";
  36. osg::ref_ptr<Map> map = new Map();
  37. GDALImageLayer* basemap = new GDALImageLayer();
  38. basemap->setURL("world.tif");
  39. map->addLayer(basemap);
  40. // Next we add a layer to provide the feature data.
  41. OGRFeatureSource* features = new OGRFeatureSource();
  42. features->setName("vector-data");
  43. features->setURL("world.shp");
  44. map->addLayer(features);
  45. Style style;
  46. LineSymbol* ls = style.getOrCreateSymbol<LineSymbol>();
  47. ls->stroke()->color() = Color::Yellow;
  48. ls->stroke()->width() = 2.0f;
  49. ls->tessellationSize()->set(100, Units::KILOMETERS);
  50. FeatureModelLayer* layer = new FeatureModelLayer();
  51. layer->setFeatureSource(features);
  52. StyleSheet* styleSheet = new StyleSheet();
  53. styleSheet->addStyle(style);
  54. layer->setStyleSheet(styleSheet);
  55. map->addLayer(layer);
  56. LayerVector layers;
  57. map->getLayers(layers);
  58. for (LayerVector::const_iterator i = layers.begin(); i != layers.end(); ++i)
  59. {
  60. Layer* layer = i->get();
  61. if (layer->getStatus().isError() &&
  62. layer->getEnabled())
  63. {
  64. OE_WARN << layer->getName() << " : " << layer->getStatus().toString() << std::endl;
  65. }
  66. }
  67. MapNode* mapNode = new MapNode(map.get());
  68. _pViewer->setCameraManipulator(new EarthManipulator());
  69. pGroup->addChild(mapNode);
  70. return pGroup.get();
  71. }
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号