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
OsgEarth开发笔记(四):Qt5.15.2在QtCreator集成Osg3.6.3+OsgEarth3.1+OsgQt的vs2019x64版本开发环境搭建的更多相关文章
- Django开发笔记四
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.邮箱激活 users app下,models.py: ...
- Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试
前言 mysql驱动版本msvc2015x32版本调好, mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO
1.前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑. ...
- Qt开发Activex笔记(一):环境搭建、基础开发流程和演示Demo
前言 使用C#开发动画,绘图性能跟不上,更换方案使用Qt开发Qt的控件制作成OCX以供C#调用,而activex则是ocx的更高级形式. QtCreator是没有Active控件项目的,所有需要 ...
- Java开发笔记(序)章节目录
现将本博客的Java学习文章整理成以下笔记目录,方便查阅. 第一章 初识JavaJava开发笔记(一)第一个Java程序Java开发笔记(二)Java工程的帝国区划Java开发笔记(三)Java帝国的 ...
- 【转】Android开发笔记(序)写在前面的目录
原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...
- Django开发笔记六
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.登录功能完善 登录成功应该是重定向到首页,而不是转发 ...
- Django开发笔记五
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...
- Django开发笔记三
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.基于类的方式重写登录:views.py: from ...
- Django开发笔记二
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...
随机推荐
- [转帖]Shell 脚本实现应用服务日志入库 Mysql
今天给大家分享一个 shell 脚本工具,通过 shell 脚本与 mysql 的结合,将某个具体服务的错误输出日志入库到指定的 mysql 表中,以便于进行错误问题的定位与分析. 日常工作中,经常需 ...
- [转帖]Day63_Kafka(一)
第一讲 Kafka基础操作 课程大纲 课程内容 学习效果 掌握目标 Kafka简介 消息队列 掌握 Kafka简介 Kafka分布式环境 Kafka操作 Kafka shell 掌握 Kafka ap ...
- 【转帖】AMD EPYC——CPU命名规则
AMD的三代服务器CPU都属于7000系列大锅,那么您如何知道要购买的产品呢? 只要看一下右边的最后一个数字,数字1代表第一代那不勒斯EPYC,数字2代表罗马型号,数字3代表新米兰产品. 始终从右到左 ...
- [转帖]Oracle 通过 Exadata 云基础设施 X9M 提供卓越的数据库性能和规模
https://www.modb.pro/db/397202 32个节点的RAC 服务器 每个服务器 两个 64核心的AMD CPU 四个线程干管理 252个线程进行数据库处理 252*32=8064 ...
- css动画京东小布hover放大
<style> .box { width: 183px; height: 130px; overflow: hidden; border: 1px solid pink; } div im ...
- js计算两个时间相差多少分钟
<script> var str = "2020-02-04" console.log(str) console.log(str.replace(/-/g, " ...
- 源码阅读:VictoriaMetrics中的golang代码优化方法
全文请移步:https://zhuanlan.zhihu.com/p/469239020 或关注我的公众号: 公众号:一本正经的瞎扯
- CLion搭建Qt开发环境,并解决目录重构问题(最新版)
序言 Qt版本不断更新,QtCreator也不断更新.在Qt4和Qt5时代,我一直认为开发Qt最好的IDE就是自带的QtCreator,可是时至今日,到了Qt6时代,QtCreator已经都12.0. ...
- layui之静态表格的分页及搜索功能以及前端使用XLSX导出Excel功能
LayUI官方文档:https://layui.dev/docs/2/#introduce XLSX NPM地址:https://www.npmjs.com/package/xlsx XLSX 使用参 ...
- 解锁数据潜力:信息抽取、数据增强与UIE的完美融合
解锁数据潜力:信息抽取.数据增强与UIE的完美融合 1.信息抽取(Information Extraction) 1.1 IE简介 信息抽取是 NLP 任务中非常常见的一种任务,其目的在于从一段自然文 ...