OsgEarth开发笔记:Qt5.15.2在QtCreator集成Osg3.6.3+OsgEarth3.1+OsgQt的vs2019x64版本开发环境搭建

Posted 长沙红胖子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OsgEarth开发笔记:Qt5.15.2在QtCreator集成Osg3.6.3+OsgEarth3.1+OsgQt的vs2019x64版本开发环境搭建相关的知识,希望对你有一定的参考价值。

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/122105565
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

OSG、OSGEARTH三维开发专栏

上一篇:《OsgEarth开发笔记(三):Osg3.6.3+OsgEarth3.1+vs2019x64开发环境搭建(下)
下一篇:敬请期待…


前言

  本篇非常麻烦,博主用QtCreator作为IDE,因为Osg3.6.3放弃对osgQt的支持,集成起来比较繁琐。


前提

  基于前面三篇的基础上,才可以进行本篇。


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

  

Demo运行程序下载

  QQ群:1047134658(点击“文件”搜索“osgEarth v1.0.0”,群内与博文同步更新)


OsgQt下载

  OsgQt地址:https://github.com/openscenegraph/osgQt
  QQ群:1047134658(点击“文件”搜索“osgQt”,群内与博文同步更新)


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();


工程模板

  osgEarthDemo_工程模板_v1.0.0_搭建好Qt+OSG+EARTH环境显示地球_QtCreaotr下的msvc2019x64版本.rar


上一篇:《OsgEarth开发笔记(三):Osg3.6.3+OsgEarth3.1+vs2019x64开发环境搭建(下)
下一篇:敬请期待…


若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/122105565

以上是关于OsgEarth开发笔记:Qt5.15.2在QtCreator集成Osg3.6.3+OsgEarth3.1+OsgQt的vs2019x64版本开发环境搭建的主要内容,如果未能解决你的问题,请参考以下文章

CentOS8安装Geant4笔记:CentOS8安装Qt5.15.2并测试运行环境

CentOS8安装Geant4笔记:CentOS8安装Qt5.15.2并测试运行环境

Ubuntu 18.04 安装Qt5.15.2开发环境

Qt for Android开发环境搭建(QtCreator6.0.1+Qt5.15.2/Qt6.2.2+win10)

QT5.15.2静态编译包下载

CentOS7 + Qt5.15.2安装流程