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运行程序下载
?即时通信软件群:1047134658(点击"文件"搜索“osgEarth v1.0.0”,群内与博文同步更新)
OsgQt下载
?OsgQt地址:https://github。com/openscenegraph/osgQt
?即时通信软件群:1047134658(点击"文件"搜索“osgQt”,群内与博文同步更新)
osgQt编译
步骤一:下载解压
?
步骤二:CMake配置
?
步骤三:CMake配置添加osg环境
?
步骤四:CMake配置添加Qt环境??
?
步骤五:CMake修改CMakeLists文件内容:
?
?还是出现错误:
?
?检查,并未发现错误
?
?继续深入?有一个路径填错了:
?过了,继续配置:
?
?
?填入其他夸脱路径:
?
?
步骤六:配置通过
?
步骤七:生成成功
?
步骤八:打开工程,进行编译
?
?编译各种问,尝试过多次后放弃,看其他博客是可以的。
?
?(后面的复杂,博主直接修改源码开始移植过去,直接加入工程方式,过程比较艰难,如果能编译好osgQt是最好的,改源码问题较多,需要的可联系博主获取,但是不免费,尊重劳动成果,禁止白嫖)
模块化
?
配置文件
OsgEarthWidget.pri
INCLUDEPATH=$$PWD
DEPENDPATH=$$PWD
QT=opengl
FORMS=\
$$PWD/OsgWidget.ui
HEADERS=\
$$PWD/OsgViewerWidget.h \
$$PWD/OsgWidget.h \
$$PWD/define.h \
$ $ PWD/开放源码软件/包括/开放源码软件/出口
SOURCES=\
$$PWD/OsgViewerWidget.cpp \
$$PWD/OsgWidget.cpp \
$ $ PWD/定义。卡片打印处理机(Card Print Processor的缩写)
# osg
包含路径=$ $ PWD/操作系统g 3。6 .3-vs 2019/包括
DEPENDPATH=$ $ PWD/OS g 3。6 .3-vs 2019/包括
LIBS=-L $ $ PWD/OSG 3。6 .3-vs 2019/lib
LIBS=-洛佩兹
losg
-组织信息\
-losgDB \
-losgFX \
-losgGA \
-losgmanipolator \
-losgParticle \
-losgppresentation \
-丢失全歼\
-losgText \
-losgUI \
-losgUtil \
-日志查看器\
-LogVolume \
-losgWidget \
# -losgQt \
-losgSim \
-losgTerrain
# osgQt
包含路径=$ $ PWD/osgQt/include
DEPENDPATH=$$PWD/osgQt/include
HEADERS=\
$ $ PWD/osgQt/include/osgqobngl/culvisitorex \
$ $ PWD/osgQt/include/osgqobingl/Gr
aphicsWindowEx \
$$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_ptrosg::Node OsgWidget::getEarthSphiere()
{
osg::ref_ptrosg::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_ptrMap 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.getOrCreateSymbolLineSymbol();
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
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/157187.html