• OsgEarth开发笔记(四):Qt5.15.2在QtCreator集成Osg3.6.3+OsgEarth3.1+OsgQt的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

  • 相关阅读:
    CentOS安装使用.netcore极简教程(免费提供学习服务器)
    新生命团队netcore服务器免费开放计划
    线程池ThreadPool及Task调度死锁分析
    NetCore版RPC框架NewLife.ApiServer
    NewLife.Net——管道处理器解决粘包
    NewLife.Net——网络压测单机2266万tps
    NewLife.Net——构建可靠的网络服务
    NewLife.Net——开始网络编程
    搬家
    借助Redis做秒杀和限流的思考
  • 原文地址:https://www.cnblogs.com/qq21497936/p/15726922.html
Copyright © 2020-2023  润新知