赞
踩
Demo演示:Qt5.15.2+OSG3.6.3+OsgEarth3.1的QtCreator下的msvc2019x64版本
osgQt编译
步骤一:下载解压
步骤二:CMake配置
步骤三:CMake配置添加osg环境
步骤四:CMake配置添加Qt环境
步骤五:CMake修改CMakeLists文件内容:
还是出现错误:
检查,并未发现错误
继续深入
有一个路径填错了:
过了,继续配置:
填入其他Qt路径:
步骤六:配置通过
步骤七:生成成功
步骤八:打开工程,进行编译
编译各种问,尝试过多次后放弃,看其他博客是可以的。
(后面的复杂,博主直接修改源码开始移植过去,直接加入工程方式,过程比较艰难,如果能编译好osgQt是最好的,改源码问题较多,需要的可联系博主获取,但是不免费,尊重劳动成果,禁止白嫖)
模块化
配置文件
OsgEarthWidget.pri
- INCLUDEPATH += $$PWD
- DEPENDPATH += $$PWD
-
- QT += opengl
-
- FORMS += \
- $$PWD/OsgWidget.ui
-
- HEADERS += \
- $$PWD/OsgViewerWidget.h \
- $$PWD/OsgWidget.h \
- $$PWD/define.h \
- $$PWD/osgQt/include/osgQOpenGL/Export.h
-
- SOURCES += \
- $$PWD/OsgViewerWidget.cpp \
- $$PWD/OsgWidget.cpp \
- $$PWD/define.cpp
-
- # osg
- INCLUDEPATH += $$PWD/osg3.6.3-vs2019/include
- DEPENDPATH += $$PWD/osg3.6.3-vs2019/include
-
- LIBS += -L$$PWD/osg3.6.3-vs2019/lib
- LIBS += -lOpenThreads \
- -losg \
- -losgAnimation \
- -losgDB \
- -losgFX \
- -losgGA \
- -losgManipulator \
- -losgParticle \
- -losgPresentation \
- -losgShadow \
- -losgText \
- -losgUI \
- -losgUtil \
- -losgViewer \
- -losgVolume \
- -losgWidget \
- # -losgQt \
- -losgSim \
- -losgTerrain
-
- # osgQt
- INCLUDEPATH += $$PWD/osgQt/include
- DEPENDPATH += $$PWD/osgQt/include
-
- HEADERS += \
- $$PWD/osgQt/include/osgQOpenGL/CullVisitorEx \
- $$PWD/osgQt/include/osgQOpenGL/GraphicsWindowEx \
- $$PWD/osgQt/include/osgQOpenGL/OSGRenderer \
- $$PWD/osgQt/include/osgQOpenGL/RenderStageEx \
- $$PWD/osgQt/include/osgQOpenGL/StateEx \
- $$PWD/osgQt/include/osgQOpenGL/osgQOpenGLWidget \
- $$PWD/osgQt/include/osgQOpenGL/osgQOpenGLWindow
-
- SOURCES += \
- $$PWD/osgQt/include/osgQOpenGL/CullVisitorEx.cpp \
- $$PWD/osgQt/include/osgQOpenGL/GraphicsWindowEx.cpp \
- $$PWD/osgQt/include/osgQOpenGL/OSGRenderer.cpp \
- $$PWD/osgQt/include/osgQOpenGL/RenderStageEx.cpp \
- $$PWD/osgQt/include/osgQOpenGL/StateEx.cpp \
- $$PWD/osgQt/include/osgQOpenGL/osgQOpenGLWidget.cpp \
- $$PWD/osgQt/include/osgQOpenGL/osgQOpenGLWindow.cpp
-
-
- # osgEarth
- INCLUDEPATH += $$PWD/osgearth3.1-vs2019/include
-
- LIBS += -L$$PWD/osgearth3.1-vs2019/lib
- LIBS += -losgEarth
Demo源码
- osg::ref_ptr<osg::Node> OsgWidget::getEarthSphiere()
- {
- osg::ref_ptr<osg::Group> pGroup = new osg::Group;
-
- osgEarth::initialize();
-
- const char* styles_css =
- R"(
- p {
- altitude-clamping: terrain-drape;
- render-backface-culling: false;
- }
- p1: p{ fill: #ff3f3f9f; }
- p2: p{ fill: #3fff3f9f; }
- p3: p{ fill: #3f3fff9f; }
- p4: p{ fill: #ff3fff9f; }
- p5: p{ fill: #ffff3f9f; }
- )";
-
- const char* script_source =
- R"(
- function getStyleClass()
- {
- // Exclude any countries beginning with the letter A:
- if ( feature.properties.name.charAt(0) === 'A' )
- return null;
- // If it starts with the letter C, return an inline style:
- if ( feature.properties.name.charAt(0) == 'C' )
- return '{ _fill: #ffc838; stroke: #8f8838; extrusion-height: 250000; }';
- // Otherwise, return a named style based on some calculations:
- var pop = parseFloat(feature.properties.pop);
- if ( pop <= 14045470 ) return "p1";
- else if ( pop <= 43410900 ) return "p2";
- else if ( pop <= 97228750 ) return "p3";
- else if ( pop <= 258833000 ) return "p4";
- else return "p5";
- }
- )";
-
-
- osg::ref_ptr<Map> map = new Map();
-
- GDALImageLayer* basemap = new GDALImageLayer();
- basemap->setURL("world.tif");
- map->addLayer(basemap);
-
- // Next we add a layer to provide the feature data.
- OGRFeatureSource* features = new OGRFeatureSource();
- features->setName("vector-data");
- features->setURL("world.shp");
- map->addLayer(features);
-
- Style style;
-
- LineSymbol* ls = style.getOrCreateSymbol<LineSymbol>();
- ls->stroke()->color() = Color::Yellow;
- ls->stroke()->width() = 2.0f;
- ls->tessellationSize()->set(100, Units::KILOMETERS);
-
- FeatureModelLayer* layer = new FeatureModelLayer();
- layer->setFeatureSource(features);
-
- StyleSheet* styleSheet = new StyleSheet();
- styleSheet->addStyle(style);
-
- layer->setStyleSheet(styleSheet);
- map->addLayer(layer);
-
-
- LayerVector layers;
- map->getLayers(layers);
- for (LayerVector::const_iterator i = layers.begin(); i != layers.end(); ++i)
- {
- Layer* layer = i->get();
- if (layer->getStatus().isError() &&
- layer->getEnabled())
- {
- OE_WARN << layer->getName() << " : " << layer->getStatus().toString() << std::endl;
- }
- }
-
- MapNode* mapNode = new MapNode(map.get());
-
- _pViewer->setCameraManipulator(new EarthManipulator());
-
- pGroup->addChild(mapNode);
-
- return pGroup.get();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。