前言

  本篇非常麻烦,博主用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版本开发环境搭建的更多相关文章

  1. Django开发笔记四

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.邮箱激活 users app下,models.py: ...

  2. Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试

    前言   mysql驱动版本msvc2015x32版本调好, mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5 ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO

    1.前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑. ...

  4. Qt开发Activex笔记(一):环境搭建、基础开发流程和演示Demo

    前言   使用C#开发动画,绘图性能跟不上,更换方案使用Qt开发Qt的控件制作成OCX以供C#调用,而activex则是ocx的更高级形式.  QtCreator是没有Active控件项目的,所有需要 ...

  5. Java开发笔记(序)章节目录

    现将本博客的Java学习文章整理成以下笔记目录,方便查阅. 第一章 初识JavaJava开发笔记(一)第一个Java程序Java开发笔记(二)Java工程的帝国区划Java开发笔记(三)Java帝国的 ...

  6. 【转】Android开发笔记(序)写在前面的目录

    原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...

  7. Django开发笔记六

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.登录功能完善 登录成功应该是重定向到首页,而不是转发 ...

  8. Django开发笔记五

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...

  9. Django开发笔记三

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.基于类的方式重写登录:views.py: from ...

  10. Django开发笔记二

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...

随机推荐

  1. [转帖]Linux下使用 ipset 封大量IP及ipset参数说明

    https://www.cnblogs.com/xiaofeng666/p/10952627.html Linux使用iptables封IP,是常用的应对网络攻击的方法,但要封禁成千上万个IP,如果添 ...

  2. [转帖]浅谈Armv8-A处理器

    https://www.elecfans.com/emb/dsp/202208291886182.html 众所周知,ARM是一家设计并授权处理器和相应IP(比如互连总线,中断处理器,图像处理器等等) ...

  3. [转帖]一个故事看懂CPU的SIMD技术

    https://www.cnblogs.com/xuanyuan/p/16048303.html 好久不见,我叫阿Q,是CPU一号车间的员工.我所在的CPU有8个车间,也就是8个核心,咱们每个核心都可 ...

  4. ARM平台安装Docker的方法

    1. 找了一下有一个网站能够下载docker的arm的deb包可以使用 网址为: https://download.docker.com/linux/ubuntu/dists/xenial/pool/ ...

  5. CentOS上面阿里源的设置过程

    1. 移除已经有的yum仓库 #原因: 公司内部部分境外网站不能访问,会提示异常. rm -rf /etc/yum.repos.d/* 2. 使用阿里源进行处理. #主要有两个, 一个是base的一个 ...

  6. 国产飞腾2000+服务器 存储单盘性能简单验证 SSD 与 HDD

    有kylinV10的源 可以直接安装fio yum install fio -y 第一步, 将sdd 进行初始化,并且设置文件系统 fdisk /dev/sdbmkdir /ssd2 mkfs.ext ...

  7. 软件缺陷(bug)

    生活中我们肯定听过身边的朋友说过:'这tm就是个bug','你就是bug一样的存在' 等话语.当你听到这句话的时候或许有些懵逼或许认为这货说的什么玩意.其实当你想成为一名测试工程师的时候你就要天天和b ...

  8. 解决input标签自动填充内容的问题

    autocomplete="new-password" 巧妙解决input标签自动填充问题 如果是同域名网站,并且曾经在该网站下登录过账号密码,并且选择了记住账号密码. chrom ...

  9. void的讲解 、any的讲解 、联合类型的讲解

    1. void的使用 空值一般采用 void 来表示,同时void也可以表示变量 也可以表示函数没有返回值哈 使用了 void 就不能够使用 return 哈 let sum = function() ...

  10. SignalR系列文章01---MVC项目中创建demo

    1.  新建mvc项目,引入指定的nuget包 2.  新增加一个集成器类添加如下的代码 /// <summary> /// 供客户端调用的服务器端代码 /// </summary& ...