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 += $$PWDQT += openglFORMS += \$$PWD/OsgWidget.uiHEADERS += \$$PWD/OsgViewerWidget.h \$$PWD/OsgWidget.h \$$PWD/define.h \$$PWD/osgQt/include/osgQOpenGL/Export.hSOURCES += \$$PWD/OsgViewerWidget.cpp \$$PWD/OsgWidget.cpp \$$PWD/define.cpp# osg
INCLUDEPATH += $$PWD/osg3.6.3-vs2019/include
DEPENDPATH += $$PWD/osg3.6.3-vs2019/includeLIBS += -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/includeHEADERS += \$$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/osgQOpenGLWindowSOURCES += \$$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/includeLIBS += -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();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2805645.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Python笔记-设计模式】享元模式

一、说明 享元模式是一种结构型设计模式&#xff0c;它摒弃了在每个对象中保存所有数据的方式&#xff0c;通过共享多个对象所共有的相同状态&#xff0c;让你能在有限的内存容量中载入更多对象。 (一) 解决问题 旨在减少大量相似对象创建时的内存开销 (二) 使用场景 大量…

可视化 RAG 数据 - 用于检索增强生成的 EDA

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号(NLP Research),及时查看最新内容 原文标题:Visualize your RAG Data — EDA for Retrieval-Augmented Generation 原文地址:https://medi…

蜂窝物联网咖WiFi认证解决方案

项目背景 随着目前网咖模式越来越流行&#xff0c;给网吧部署一套无缝漫游的WIFI网络势在必行。同时&#xff0c;网吧无线准入的验证码在客户机上面进行更新&#xff0c;以防周边的人员进行蹭网&#xff0c;损失网吧的外网带宽。 01 需求分析 1. 网吧服务区域全部覆盖无盲区…

Android 解决后台服务麦克风无法录音问题

Android 解决后台无法录音问题 问题分析问题来源解决方案1. 修改清单文件:`AndroidManifest.xml`2. 修改启动服务方式3. 服务启动时创建前台通知并且指定前台服务类型参考文档最后我还有一句话要说我用心为你考虑黄浦江的事情,你心里想的却只有苏州河的勾当 问题分析 安卓9.…

5G端到端案例三:锚点基站侧5G连接与VOLTE专载建立流程冲突导致CSFB回落问题

1. 问题描述&#xff1a; NSA组网场景下&#xff0c;语音业务仍使用4G VoLTE方案&#xff0c;在拉网测试中&#xff0c;发现存在较多流程交叉导致的VOLTE接入失败的问题。 流程冲突时的空口信令表现为&#xff0c;终端添加SCG流程与语音专载流程冲突时&#xff0c;专有承载建…

125 Linux C++ 系统编程4 Linux 静态库制作,动态库制作,静态库和动态库对比。静态库运行时找不到库的bug fix

一 静态库 和动态库 对比 静态库的原理&#xff1a;假设我们有一个 静态库&#xff0c;大小为500M&#xff0c;这个静态库实现了一些打牌的逻辑算法&#xff0c;提供了一堆API&#xff0c;让开发者 可以轻松的实现 54张扑克牌的随机发牌&#xff0c;指定发牌等功能。 我们写了…

红日靶场3

靶场链接&#xff1a;漏洞详情 在虚拟机的网络编辑器中添加两个仅主机网卡 信息搜集 端口扫描 外网机处于网端192.168.1.0/24中&#xff0c;扫描外网IP端口&#xff0c;开放了80 22 3306端口 80端口http服务&#xff0c;可以尝试登录网页 3306端口mysql服务&#xff0c;可…

跟着野火学FreeRTOS:第二段(事件组)

在小节里面介绍了二进制信号量&#xff0c;计数信号量&#xff0c;互斥量和递归互斥量等功能&#xff0c;其中二进制信号量和计数信号量&#xff08;也包括队列&#xff09;常用于任务和任务之间以及任务和中断之间的同步&#xff0c;她们具有以下属性&#xff1a; 当等待的事…

备考2025年考研数学(三):2015-2024年考研数学真题练一练

今天&#xff0c;我们继续分享2015年-2024年的考研数学三选择题&#xff0c;随机做5道真题&#xff0c;并提供解析。看看正在备考2025年考研的你能做对几道。 考研数学和政治、英语一项&#xff0c;都是拉分大户&#xff0c;但是数学如果掌握了技巧&#xff0c;吃透了知识点的话…

马丽离开沈腾,独自闪耀,实力证明一切。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 马丽的事业突飞猛进&#xff0c;演艺之路从与沈腾的默默搭档到…

windows Server下Let‘s Encrypt的SSL证书续期

一、手动续期方法&#xff1a; 暂停IIS服务器 --> 暂时关闭防火墙 --> 执行certbot renew --> 打开防火墙 --> 用OpenSSL将证书转换为PFX格式-->pfx文件导入到IIS --> IIS对应网站中绑定新证书 --> 重新启动IIS -->完成 1、暂停IIS服务器 2、暂时关闭…

如何将QQ音乐的歌单导出到excel

一、提前准备 1.选择你需要导出的音乐歌单 2.得到你的歌单ID 1、首先打开QQ音乐&#xff0c;找到想要查看的歌单&#xff0c;点击歌单右上角的更多按钮。 2、其次在弹出的菜单中选择分享&#xff0c;在分享页面中&#xff0c;选择歌单分享。 3、最后在分享页面中&#xff0c…

【Docker 的安装:centos】

文章目录 1 :peach:各版本平台支持情况:peach:2 :peach:CentOS 安装:peach:2.1 :apple:安装依赖:apple:2.2 :apple:安装 Docker:apple:2.3 :apple:实战经验:apple:2.3.1 :lemon:Docker 镜像源修改:lemon:2.3.2 :lemon:Docker 目录修改:lemon: 1 &#x1f351;各版本平台支持情况…

【数据结构和算法初阶(C语言)】——数据结构前言,初识数据结构(给你一个选择学习数据结构和算法的理由)

1.何为数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的 数据元素的集合。本质来讲就是在内存中去管理数据方式比如我们的增删查改。在内存中管理数据的方式有很多种&#xff08;比如数组结构、链式结构、树型结…

【蓝桥杯省赛真题26】python整数逆序输出 青少年组蓝桥杯比赛python编程省赛真题解析

目录 python整数逆序输出 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python整数逆序输出 第十二届蓝桥杯python比赛省赛真题 一、题目要求…

目标检测卷王YOLO卷出新高度:YOLOv9问世

论文摘要:如今的深度学习方法重点关注如何设计最合适的目标函数,使得模型的预测结果能够最接近真实情况。 同时,必须设计一个适当的架构,可以帮助获取足够的信息进行预测。 现有方法忽略了一个事实,即当输入数据经过逐层特征提取和空间变换时,大量信息将会丢失。 本文将深…

2024全国水科技大会暨流域水环境治理与水生态修复论坛(六)

论坛召集人 冯慧娟 中国环境科学研究院流域中心研究员 刘 春 河北科技大学环境与工程学院院长、教授 一、会议背景 为深入贯彻“山水林田湖是一个生命共同体”的重要指示精神&#xff0c;大力实施生态优先绿色发展战略&#xff0c;积极践行人、水、自然和谐共生理念&…

【大数据】Flink 内存管理(二):JobManager 内存分配(含实际计算案例)

Flink 内存管理&#xff08;二&#xff09;&#xff1a;JobManager 内存分配 1.分配 Total Process Size2.分配 Total Flink Size3.单独分配 Heap Size4.分配 Total Process Size 和 Heap Size5.分配 Total Flink Size 和 Heap Size JobManager 是 Flink 集群的控制元素。它由三…

【vscode】按F5无法执行调试python或go

原因&#xff1a; 找不到解析器&#xff0c;需要安装插件&#xff08;python&#xff0c;或go 等&#xff09; 安装插件后&#xff0c;还是无法执行&#xff0c;按 ctrlshiftp,看不到解析器 正常应该是&#xff1a; 解决方法&#xff1a; 1、判断python是否安装成功 pyth…

uni-app 黑魔法探秘 (一)—— 重写内置标签

一、背景 政采前端团队的移动端跨端解决方案选择的是 uni-app。跨端方案的好处就是一码多端&#xff0c;即书写一次就可以输出到 web、小程序、Anroid、iOS 等各端。既然是开发&#xff0c;那必然少不了配套的组件库和方法库&#xff0c;而我们公司因为历史原因存在一些的非 u…