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

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();
}
相关推荐
Theodore_10223 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
----云烟----5 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024065 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic5 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it5 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康5 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神6 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海6 小时前
scala String
大数据·开发语言·scala
qq_327342736 小时前
Java实现离线身份证号码OCR识别
java·开发语言
锅包肉的九珍6 小时前
Scala的Array数组
开发语言·后端·scala