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 += $$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<:node> OsgWidget::getEarthSphiere()
{
osg::ref_ptr<: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 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();
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 getName() getStatus().toString() setCameraManipulator(new EarthManipulator());
pGroup->addChild(mapNode);
return pGroup.get();
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
在Python中,列表是一种有序的可变容器,可以存储多个值。通常情况下,列表的长度是有限的,但是有时候我们可能需要创建一个具有无限多个值的列表。本文将介绍如何在Python3中建立一个无限列表,并探讨其应用场景。 1.使用生成器函数 在Python中,生成器函…