OsgEarth開發筆記(四):Qt5.15.2整合Osg3.6.3+OsgEarth+OsgQt的vs2019x64

21497936發表於2021-12-24

前言

  本篇非常麻煩,博主用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地址:
  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# osgINCLUDEPATH += $$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# osgQtINCLUDEPATH += $$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# osgEarthINCLUDEPATH += $$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開發環境搭建(下)
下一篇:敬請期待…


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010283/viewspace-2849232/,如需轉載,請註明出處,否則將追究法律責任。

相關文章