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://www.rhkb.cn/news/262806.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《TCP/IP详解 卷一》第4章 地址解析协议ARP

目录 4.1 引言 4.2 一个例子 4.3 ARP缓存 4.4 ARP帧格式 4.5 ARP例子 4.6 ARP缓存超时 4.7 代理ARP 4.8 免费ARP和地址冲突检测 4.9 ARP命令 4.10 使用ARP设置嵌入式设备IPv4地址 4.11 与ARP相关攻击 4.12 总结 4.1 引言 地址解析&#xff1a; IPv4&#xff1a;AR…

《TCP/IP详解 卷一》第6章 DHCP

目录 6.1 引言 6.2 DHCP 6.2.1 地址池和租用 6.2.2 DHCP和BOOTP消息格式 6.2.3 DHCP和BOOTP选项 6.2.4 DHCP协议操作 6.2.5 DHCPv6 6.2.6 DCHP中继 6.2.7 DHCP认证 6.2.8 重新配置扩展 6.2.9 快速确认 6.2.10 位置信息&#xff08;LCI和LoST&#xff09; 6.2.11 移…

外包干了3个月,技术退步明显

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

git使用记录

1.使用 "git reset --hard 版本号"的方式回退版本号会覆盖从当前版本到回退版本之间的版本号&#xff0c;为避免这种情况&#xff0c;可以用"git revert -n 版本号"指令&#xff0c;具体看&#xff1a;https://blog.csdn.net/L1147484597/article/details/…

MYSQL-入门

一.安装和连接 1.1 安装 mysql安装教程&#xff1a; 2021MySql-8.0.26安装详细教程&#xff08;保姆级&#xff09;_2021mysql-8.0.26安装详细教程(保姆级)_mysql8.0.26_ylb呀的博客-cs-CSDN博客 workbench安装&#xff1a; MySQL Workbench 安装及使用-CSDN博客 1.2 配…

古天乐演唱会内涵梅西,郑中基助阵,网友狂赞。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 梅西的香港之行虽已落幕&#xff0c;但他对中国球迷造成的伤害…

MybatisPlus--03--IService、ServiceImpl

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. IService接口1.1 IService、ServiceImpl 接口的使用第一步&#xff1a;实现basemapper接口第二步&#xff1a;编写service类第三步&#xff1a;编写serviceImpl第…

5个精美的wordpress中文企业主题模板

元宇宙WordPress主题模板 简洁大气的元宇宙 Metaverse WordPress主题模板&#xff0c;适合元宇宙行业的企业官网使用。 https://www.jianzhanpress.com/?p3292 职业技术培训WordPress主题模板 简洁大气的职业技术培训WordPress主题&#xff0c;适合用于搭建教育培训公司官方…

【动态规划】【前缀和】【推荐】2463. 最小移动总距离

作者推荐 【广度优先搜索】【网格】【割点】【 推荐】1263. 推箱子 本文涉及知识点 动态规划汇总 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 2463. 最小移动总距离 X 轴上有一些机器人和工厂。给你一个整数数组 robot &#xff0c…

Vue学习之计算属性

模板中的表达式虽然方便&#xff0c;但也只能用来做简单的操作。如果在模板中写太多逻辑&#xff0c;会让模板变得臃肿&#xff0c;难以维护。比如说&#xff0c;我们有这样一个包含嵌套数组的对象&#xff1a; const author reactive({name: John Doe,books: [Vue 2 - Advan…

mysql-MVCC

一、基础概念 1. MVCC的含义 MVCC (Multiversion Concurrency Control)&#xff0c;即多版本并发控制技术&#xff0c;它是通过读取某个时间点的快照数据&#xff0c; 来降低并发事务冲突而引起的锁等待&#xff0c; 从而提高并发性能的一种机制. MVCC 的实现,是通过保存数据…

危险!Wyze 摄像头安全漏洞致1.3万用户隐私遭窥探

最近&#xff0c;一则关于 Wyze 摄像头再次出现安全漏洞的新闻引起了人们的广泛关注。据报道&#xff0c;该安全漏洞导致约1.3万用户的摄像头受到了未经授权的访问&#xff0c;使得这些用户的隐私信息遭到了窥视。这一事件再次引发了人们对网络安全的关注和讨论。 网络安全不仅…

2024最强秋招八股文(精简、纯手打)

7/28日已更新&#xff0c;错误已修改~~~有错误的地方&#xff0c;欢迎大家留言&#xff01; 目录 一、Java基础篇 1.接口和抽象类的区别 2.重载和重写的区别 3.和equals的区别 4.异常处理机制 5.HashMap原理 6.想要线程安全的HashMap怎么办&#xff1f; 7.ConcurrentHa…

基于Java+SpringBoot+Vue前后端分离棋牌室管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作✌ 主要内容&#xff1a;SpringBoot、Vue、SSM、HLM…

【Docker】初学者 Docker 基础操作指南:从拉取镜像到运行、停止、删除容器

在现代软件开发和部署中&#xff0c;容器化技术已经成为一种常见的方式&#xff0c;它能够提供一种轻量级、可移植和可扩展的应用程序打包和部署解决方案。Docker 是目前最流行的容器化平台之一&#xff0c;它提供了一整套工具和技术&#xff0c;使得容器的创建、运行和管理变得…

每日一题(寻找奇数,寻找峰值)

寻找奇数_牛客题霸_牛客网 (nowcoder.com) #include <stdio.h> #include<stdlib.h> int main() {int n0;int num0;scanf("%d",&n);int* arr(int*)malloc(sizeof(int)*n);int i0;for(i0;i<n;i){scanf("%d",&arr[i]);//在循环内&…

2024生物发酵魅力展示会-光德流体

参展企业介绍 河北光德流体控制有限公司始建于1996年&#xff0c;是一家从事以不锈钢为母材的洁净应用材料研发与专业制造的实体企业。产品主要包括卫生级球阀&#xff0c;隔膜阀&#xff0c;蝶阀等&#xff0c;并广泛应用于生物发酵&#xff0c;医疗制药&#xff0c;食品饮料…

IDEA查询对应功能的快捷键

首先要知道快捷键的key叫什么&#xff0c;然后通过key来找到对应的快捷键 比如下面这个查找删除导入未使用的类 跳转 或者安装对应插件

C++之类作用域

目录 1、全局作用域 2、类作用域 2.1、设计模式之Pimpl 2.2、单例模式的自动释放 2.2.0、检测内存泄漏的工具valgrind 2.2.1、可以使用友元形式进行设计 2.2.2、内部类加静态数据成员形式 2.2.3、atexit方式进行 2.2.4、pthread_once形式 作用域可以分为类作用域、类名…

使用logicflow流程图实例

一.背景 需要使用流程引擎开发项目&#xff0c;没有使用flowable、activiti这类的国外流程引擎&#xff0c;想使用国内的引擎二次开发&#xff0c;缺少单例模式的流程画图程序&#xff0c;都是vue、react、angluer的不适合&#xff0c;从网上找了antx6、logicflow、bpmn.js。感…