osgearth,个人笔记

合集下载

osgEarth用户手册

osgEarth用户手册
</map>
这个文件建立了一个地图“MyMap”,geocentric 类型,GeoTIFF 图片源 名称是“bluemarble”(GeoTiff 是包含地理信息的一种 Tiff 格式的文件)。驱 动 driver 属性告诉 osgearth 哪个驱动去加载这些图片,所有子元素针对特定 的驱动。
2.1.2.多重图像层 osgEarth 支持有多个图像源的地图。这允许你创建的地图时,在基础层上
featuregeometryosg的几何渲染矢量数据featurestencil使用模板缓冲技术褶皱化地形矢量数据simple加载外部模型并放置在场景图421featuregeometrymodeldriver建立矢量特征数据的osg几何形状如今这个驱动程序可以简单的将矢量数据嵌合进几何图形中同时会有一个可选择的高度偏移这样你可以将几何图形放置于地形上将来它将支持足迹挤压纹理化和其他一些功能
mu lt ipas s
复合材料由多个渲染的图像,通过对场 景图。这种技术对图像层, 你可 以有数量没有限制,但可能会影响性能 ,因为每个额外的层意味着 另一 个渲染传递的场景图。
10
示例:
<map> <options> <terrain> <compositor>multitexture</compositor> </terrain> ... </options> ...
optional
<image>
图像图层。随着 osgearth 的合成器 compositor 使用,你的电
脑图像显示硬件将决定<image>层可以显示的最大数量 。
optional

osgearth_conv 用法

osgearth_conv 用法

osgearth_conv 用法关于osgearth_conv 的用法osgearth_conv 是一个开源的命令行工具,用于在OpenSceneGraph 环境中进行地理数据转换和处理。

它提供了丰富的功能和选项,使用户能够灵活地处理地理数据以支持各种地理可视化和分析应用。

本文将一步一步地回答关于osgearth_conv 的用法。

一、安装osgearth_conv要使用osgearth_conv,首先需要安装OpenSceneGraph 和OsgEarth。

OpenSceneGraph 是一个高性能的、跨平台的3D 编程工具包,而OsgEarth 是基于OpenSceneGraph 的地理可视化工具包。

安装这两个工具包后,就可以使用osgearth_conv 了。

二、osgearth_conv 的基本用法osgearth_conv 的基本用法如下:osgearth_conv input_file [options]其中,input_file 是输入的地理数据文件路径,而options 表示一些可选的参数和选项。

三、地理数据格式支持osgearth_conv 支持多种地理数据格式,包括常见的地理信息系统(Geographic Information System,简称GIS) 格式如Shapefile、GeoJSON、KML 等,以及常用的栅格数据格式如GeoTIFF、JPEG2000 等。

用户可以根据自己的需要选择相应的输入格式。

四、地理数据投影转换osgearth_conv 提供了投影转换的功能,用户可以将输入数据从一个坐标系转换到另一个坐标系。

例如,如果输入数据使用的是WGS84 坐标系(经纬度坐标),而用户希望将其转换为投影坐标系,可以使用如下命令:osgearth_conv input_file in-epsg 4326 out-epsg 3857其中,in-epsg 表示输入数据的坐标系编码,4326 表示WGS84 坐标系;out-epsg 表示输出数据的坐标系编码,3857 表示Web Mercator 投影坐标系。

OSG学习笔记-五(6)

OSG学习笔记-五(6)

OSG学习笔记-五(6)OSG学习笔记第一章OSGSample一、 OSG中的示例程序简介1.example_osganimate一)演示了路径动画的使用(AnimationPath、AnimationPathCallback),路径动画回调可以作用在Camera、CameraView、MatrixTransform、PositionAttitudeTransform等四种类型的节点上。

二)演示了osgSim::OverlayNode的使用2.example_osganimationeasemotion一)演示了osgAnimation::EaseMotion的使用,EaseMotion 可以用于表达位移、速度值随时间的变化情况,通过不同的模板参数(functor),实现了不同的变化曲线。

二)程序中用到了一个使用osgWidget构造的弹出式菜单。

3.example_osganimationhardware一)演示了在osgAnimation::RigGeometry中使用自定义RigTransformImplementation的方法。

二)可以参考程序中获取骨骼动画模型包含的动画列表的方法。

4.example_osganimationmakepath一)演示了osgAnimation::Sampler采样器的使用,更新物体颜色(vec4)、物体位置(vec3)。

Sampler派生模板类用于在一组已知离散数据样本的基础上,进行插值计算,得到连续数据。

通过模板参数支持多种插值方法。

二)在更新物体位置这方面,与路径动画AnimationPath类似,但它需要自己写回调来更新节点矩阵,好处是能够使用更灵活的方式来进行数据采样,而AnimationPath只能进行线性内插。

5.example_osganimationmorph一)演示了利用osgAnimation::MorphGeometry实现几何体变形动画的方法。

osgearth Release Notes- Version 2.2

osgearth Release Notes- Version 2.2

osgearth Release Notes- Version 2.2Release Notes - Version 2.2?? NEW: osgEarthAnnotationo PlaceNode, LabelNode, CircleNode, EllipseNode, RectangleNode,FeatureNode, LocalGeometryNode, ModelNodeo Decluttering engine for Place/LabelNode? to mitigate screen-spaceoverlapo Progressive automatic terrain-clamping of annotations o DepthOffset technique for simulated line draping o Decorations: highlighting, scaling, event handling? NEW: osgEarthQto Qt library for building osgEarth-centric apps under Qto ViewerWidget? that wraps an osgViewer::ViewBase? in a QWidget o Full support for ON_DEMAND rendering o Map Model and Annotation widgets o Analysis widgets: LOS, Terrain Profile? Features subsystem upgrades:o Resource libraries for feature stylingo Optional JavaScript support for style scripts (using V8 engine) o Speed and rendering improvements for theOverlayDecorator/DrapeableNode?o Ability to read model URIs from a feature attributeo Improved scalability of the FeatureModelGraph (paged featuressubsystem)o TFS (Tiled Feature Service) driver for progressive streaming featuredatao New FeatureSourceIndexNode provides primset-level access tocompiled features? KML:o KMLOptions to control defaults o KML::load convenience functiono Added support for GroundOverlay, Annotation data, KMZ archives,gx:LatLonQuado Label/icon/decluttering control o Model support? Core:o New Terrain class facilitates clamping/terrain intersection o New GeoPoint class - combines a point with its SRS and itsAltitudeModeo Improved spherical mercator supporto Added full Vertical Datum support, including EGM96/84/2021 models o ON_DEMAND rendering support throughout (only render frameswhen necessary)? Utilitieso osgearth_package: Package imagery and elevation as local TMSarchiveso Graticules: lat/long, UTM, and MGRS with exception zone support o LineOfSight node for p2p and radial LOS calculations o TerrainProfile node for calculating elevation \ o MouseCoordsTool - output mouse coordso FeatureQueryTool - query and display feature attributes o FeatureManipTool - move and rotate buildings? New Caching subsystemo New \ o Faster caching using osgb formato Envvars: OSGEARTH_CACHE_PATH, OSGEARTH_CACHE_ONLY,OSGEARTH_NO_CACHEo Support for parametric URIs (for server round-robin)? Misc:o New \MapQuest)o Mercator \reprojectiono SkyNode speedup, better-looking (and more) stars o EarthManipulator : support for orthographic camera o New polytope-based picker utilityo Support for reading TMS repos, earth files, etc from ZIP files o Lots of fixes for Intel and ATI graphics hardware o Simple ocean surface plugino Improved TerrainOptions::maxLOD to force subdivision to an LOD o TinyXML is an optional hard-coded lib感谢您的阅读,祝您生活愉快。

osgearth学习文档

osgearth学习文档

osgEarth::Drivers::TMSOptions Class Reference通过程序加载数据赶紧进入正题,程序加载各种数据,首先介绍一下总体的方式/*这里XXXOptions 是根据不同的数据类型选择不同驱动,比如加载本地数据可以使用GDALOptions ,加载TMS数据可以使用TMSOptions(注意TMSOptions可以加载本地也可以加载网上数据),WMSOptions可以加载网上数据(注意这个options主要加载影像和图片数据),ArcGISOptions加载ArcGIS Server发布数据。

*/osgEarth::Drivers::XXXOptions XXXLayer;/*这里就是加载的数据路径,如果加载的本地数据就是本地数据的路径,如果加载是网上数据就是相应的网址*/XXXLayer.url()=osgEarth::URI(".................................");/*加载的数据是分层管理,每加载进来一个数据在earth上就是一个数据层,这里给数据层付个名字。

*/std::string LayerName="earth";/*osgearth里layer主要有三种类型ImageLayer、ElevationLayer和ModleLayer ,前两个大家从字面就可以知道第一个是加载影像和第二个是加载高程数据的,第三个是主要用来加载shp数据,至少我是这样用的,不知道还能否加载其他数据类型。

确定加载用的驱动、数据源位置(路径)、数据层名和初始化了数据层,接下来就是把数据层加到地球中如下所示。

*/osg::ref_ptr<osgEarth::XXXLayer> layer =new osgEarth::XXXLayer(osgEarth::XXXLayerOptions(LayerName,XXXLayer));m_pMap->addImageLayer(layer.get());(1)加载本地数据a 本地影像数据,数据类型为tifosgEarth::Drivers::GDALOptions imagelayerOpt;//选择GDALOptionsimagelayerOpt.url() = osgEarth::URI("E:\\vs2010Progam Files\\osgVR74\\osgVR74\\world.tif");//影像数据路径std::string imagelayerName = "worldimage"; //影像数据层名osg::ref_ptr<osgEarth::ImageLayer> imageLayer = new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(imagelayerName ,imagelayerOpt));//初始数据层m_pMap->addImageLayer(imageLayer .get());b 本地高程数据,数据类型为tifosgEarth::Drivers::GDALOptions demlayerOpt;//使用还是GDALOptionsdemlayerOpt.url() = osgEarth::URI("E:\\vs2010Progam Files\\osgVR74\\osgVR74\\worlddem.tif");//高程数据路径std::string demlayerName = "worlddem";//高程数据层名osg::ref_ptr<osgEarth::ImageLayer> demLayer = new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(demlayerName,demlayerOpt));//初始数据层m_pMap->addImageLayer(demLayer.get());加载本地经过package 切片的数据还可以用TMSOptions,osgEarth::Drivers::TMSOptions tmsOpt;////选择TMSOptions 驱动tmsOpt.url()=osgEarth::URI("//Edvis_-1/Layer_0/tms.xml");//package切片生成金字塔文件下的xmlstd::stringDemtmslayerName="TmsDem";//图层名osgEarth::ElevationLayerOptionstmslayerOpt(DemtmslayerName,tmsOpt);osg::ref_ptr<osgEarth::ElevationLayer> TmsDemLayer = new osgEarth::ElevationLayer(tmslayerOpt);m_pMap->addElevationLayer(TmsDemLayer.get());//初始化图层并加入到地球中(2)加载网上数据a 加载ArcGIS Server 发布的数据加载方式与上面提到的类似osgEarth::Drivers::ArcGISOptions MapImageLayer;MapImageLayer.url()=osgEarth::URI("");std::string CdlayerName="worldimage";osg::ref_ptr<osgEarth::ImageLayer> cdlayer =new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(CdlayerName,MapImageLayer));m_pMap->addImageLayer(cdlayer.get());//这里注意,当osgearth访问ArcGIS Server 发布数据的时候有些问题很奇怪,用上面的方式访问ArcGIS Server 国外发布的数据没问题,但是访问自己发布的数据就会有问题,经过试验投影要设成3857才能正常访问。

osgEarth编译总结

osgEarth编译总结

首先在osg的编译上有一点记录一下:1 我们下载的第三方依赖3rdParty_x86_x64 这个文件对于VS2008和VS2010来说可能VS2008的提供库要全一些。

2 对于3rdParty_x86_x64文件夹下的x86和x64来说我们的系统如果是32位的应该就只能选x86 对于x64来说我们两个包都是可以选择的,据说在64位的系统上的32位程序是模拟运行的。

如果我们编译时选择直接编译。

那最好是选x86那个包。

在这次的选择中选择x64包结果编译到osgDB库的时候出现了错误。

如果想编译出来的程序只是用于x64 那么可以尝试在x64包的基础上对VS进行相关的设置,应该是不会有很大问题的。

下面主要是对osgEarth进行编译由于osgEarth没有对第三方依赖进行打包,所以我们就不得不自己进行配置相关的依赖。

首先下载源码包,我们进入官网/wiki/Downloads下载源码简单明了。

接下来我们下载第三方依赖:1 GDAL下载:/gdal/wiki/DownloadSource在这里我们选择1.8.1版本,因为在1.9.0版本使用中出现了编译不能通过的情况。

当然我们也可以自己将编译过程中出现的问题解决。

在这里我们只是为了编译GDAL“不节外生枝”下面我们来对这个库进行编译:对于这个版本有两种方法可以编译1 它里面有两个.sln,使用其中之一编译就行2 下载完GDAL的源码后,还需要先运行makegdal_gen.bat这个文件,然后打开X:\Program Files\Microsoft Visual Studio\VC98\bin\VCVARS32.BAT,X代表你VS的安装盘.打开后用cd命令切换到你GDAL的目录下执行命令,nmake /f makefile.vc MSVC_VER=1500 BUILD_DEBUG=YES,其中1500代表VS版本2008,当然你也可以进入nmake配置文件修改.文件编译完成后我们有两种不同的处理方法方法一将生成的lib dll 包括: gdal_i.lib gdal.lib cpl.lib(port目录下) ogr.lib(ogr目录下), 以及gdal17.dll 拷贝到E:\OSG\GDAL\apps下,这一种在后面的使用中会直接将这个作为cmake的应用目录(在工程中添加包含目录时会很麻烦,不推荐采用)方法二GDAL编译完成后的文件存放于C0:\warmerda\bld,包含文件include,lib,data,bin,可将它们拷贝到GDAL文件夹下,置于OSG目录下。

osgearth 远近裁剪面 计算

osgearth 远近裁剪面 计算

osgearth 远近裁剪面计算
我猜你是想了解`osgEarth`的`远近裁剪面`计算,`osgEarth`是一个开源的三维地球可视化库,其`远近裁剪面`计算是指在进行三维场景渲染时,确定哪些物体应该被绘制,哪些物体应该被裁剪掉的过程。

这可以通过设置` osgEarth `的` near `和` far `裁剪平面来实现。

具体来说,`osgEarth `的` near `裁剪平面是指距离观察者最近的平面,任何在该平面后面的物体都不会被绘制。

` far `裁剪平面是指距离观察者最远的平面,任何在该平面前面的物体都不会被绘制。

通常情况下,` near `裁剪平面的值设置为距离观察者很近的距离,例如几个单位,而` far `裁剪平面的值设置为距离观察者很远的距离,例如几千个单位。

在` osgEarth `中,可以使用` osgViewer::Viewer `类的` getCamera `方法来获取观察者的相机对象,然后使用相机对象的` setNearFar `方法来设置` near `和` far `裁剪平面的值。

例如:
```cpp
osgViewer::Viewer viewer;
viewer.getCamera()->setNearFar(1.0f, 10000.0f);
```
上述代码中,将` near `裁剪平面的值设置为 1.0f,将` far `裁剪平面的值设置为10000.0f。

这样,在进行渲染时,只有距离观察者在1.0f到10000.0f之间的物体才会被绘制,其他物体将被裁剪掉。

需要注意的是,在实际应用中,需要根据具体情况来设置` near `和` far `裁剪平面的值,以达到最佳的渲染效果。

osgearth各个例子功能概述

osgearth各个例子功能概述

osgearth各个例⼦功能概述转⾃:/wl198302/article/details/21177309最近在学习osgearth,对其还不是很理解,有些例⼦不会运⾏,有些可以,把可以的做个统计,以备后⾯查⽤。

1、osgearth_graticule:⽣成经纬线。

2、osgearth_annotation:各类标注(点、线、⾯、模型、⽂本等)。

3、osgearth_city:加载⼀个城市三维模型,可以浏览。

4、osgearth_clamp:在⼀个区域加载⽣成5000个树⽊的三维模型展⽰。

5、osgearth_colorfilter:运⾏不起来……6、osgeatth_controls:有⼀个osg的图标,可以控制透明度与⽅向。

还有⼀些⽂本矩形框之类的。

7、osgearth_demo:qt的⼀个集成地球的例⼦8、osgearth_elevation:显⽰⿏标所指位置的经纬度、坐标系、⾼程(MSL\HAE)、分辨率。

不过运⾏⾮常缓慢。

9、osgearth_featureeditor:添加⼀条线,并可以修改线的节点与颜⾊(编辑时,线的形状变为虚线段)。

10、osgearth_featurfilter:出来⼀个地球,不知道需要什么数据才能运⾏出效果。

例⼦给出的⽤途为-简单的功能过滤,改变数据源特征属性的值。

11、osgearth_featureinfo:不是界⾯程序,不知道⼲嘛的……12、osgearth_featuremanip:出现⼀个地球,没明⽩⼲嘛的……13、osgearth_featurequery:同上……14、osgearth_imageoverlay:在地图上叠加⼀张gif图⽚,并可以控制图⽚的透明度。

15、osgearth_features:代码建⽴地图,并加载各国分界线的shp数据。

16、osgearth_los:以稍稍⽔平的视⾓,显⽰飞机模型绕⼀点旋转,还有⼀些运动对象。

17、osgearth_manip:地球上⽣成⼀个⽴体的helloworld⽂字,并且可以控制⽂字⾏⾛,快速定位不同级别的视点,让⽂字始终在屏幕中央,地球滚动,很好的功能 O(∩_∩)O~18、osgearth_map:代码⽣成地球tms地图图层。

学习笔记

学习笔记

google地图学习Google地球的使用方法:1、根据经纬度定位地标的方法在Search面板的Fly To输入框中,输入一个经纬度,按回车,就可以直接“飞”到那个位置。

其间采用的那种动画效果,让我们产生一种遨游地球的奇妙感觉。

2、如何在软件中截图这里介绍一个简单的截图方法,找到一个画面后,按下“Ctrl+Shift+E”,会出现一个通过电子邮件发送截图的界面,如下图所示,双击附件里那个图片,另存到硬盘上即可。

这个图片就是当前的截图。

3、如何导出地标文件在需要引出的地标文件夹上,用鼠标右键点一下,在菜单中选择“Save As”然后输入引出文件名就行了,可以导出KMZ和KML两种地标文件格式。

4、KML和KMZ地标文件有什么不同Google Earth有两种类型的地标文件,一种是KML文件,一种是KMZ文件。

KML是原先的Keyhole客户端进行读写的文件格式,是一种XML描述语言,并且是文本格式,这种格式的文件对于Google Earth程序设计来说有极大的好处,程序员可以通过简单的几行代码读取出地标文件的内部信息,并且还可以通过程序自动生成KML文件,因此,使用KML格式的地标文件非常利于Google Earth 应用程序的开发。

KMZ是Google Earth默认的输出文件格式,是一个经过ZIP格式压缩过的KML文件,当我们从网站上下载KMZ文件的时候,Windows会把KMZ文件认成ZIP 文件,所以另存的时候文件后缀会被改成.ZIP,因此需要手动将文件后缀改成.KMZ。

KMZ文件用ZIP工具软件打开,然后解压缩即可得到原始KML文件。

当然,KMZ文件也有自己的好处,就是KMZ文件的自身可以包含图片,这样就可以不依赖引用网络上的图片。

一般情况下,双击KMZ/KML文件即可从Google Earth中打开地标文件,但是需要注意的是,KMZ/KML地标文件名不能包含中文字符,文件存放的路径也不能有中文字符,否则将无法在Google Earth中打开。

osgearth 参数

osgearth 参数

osgearth 参数
osgEarth是一个用于地理信息系统(GIS)的开源软件库,它使用OpenSceneGraph(OSG)作为其3D引擎。

osgEarth提供了许多参数来配置和定制其功能和行为。

以下是一些常见的osgEarth参数:
1. 模型位置:使用`url`字段表示模型的位置路径。

2. 视点图层:使用`viewpoints`关键字来表示,包含了`name`、`heading`、`lat`、`long`、`height`、`pitch`和`range`七个参数,分别表示图层名称、
方位角、位置纬度、经度、高度、俯仰角、范围。

3. 挤压符号:用于创建3D形状的挤压几何,例如从源矢量数据中挤压2D
向量。

4. 图标符号:描述二维图标的外观,常用于点替换,用图标代替几何模型。

5. 模型符号:描述外部的3D模型。

请注意,上述参数只是一部分osgEarth提供的参数,并不详尽无遗。

您应
该参考osgEarth的官方文档或源代码以获取完整的参数列表和详细说明。

谷歌地球使用笔记

谷歌地球使用笔记

谷歌地球使用笔记
怎样使用谷歌地球得到地球剖面图
谷歌地球使用笔记
1、首先在谷歌地球桌面左上方“搜索栏”输入要查找的地址,回车得到标记;或在“添加”菜单点击“添加标记”,然后输入标记名称、经纬度参数点击确认或在地图上拖动标记到需要的位置即可完成地标添加。

2、在谷歌地球桌面左边“位置栏”选择在临时位置下已添加的地标,用鼠标键右击,选择“保存到我的位置”将地标由临时位置转存为“我的地点”。

此时用鼠标键右击“我的位置”可修改“我的位置”属性。

3、在“工具”菜内选择“标尺”命令后,用鼠标在两个地标间按住左键进行拖动,最后点击“保存”得到3维的两个地标间直线路径线,在输入两个地标间直线路径的名称后点击确定即完成地标间直线路径的添加。

如需保存,可在谷歌地球桌面左边“位置栏”选择在临时位置下已添加的路径,用鼠标键右击,选择“保存到我的位置”将路径由临时位置转存入“我的地点”。

此时用鼠标键右击“我的路径”可修改“我的路径”属性。

4、在谷歌地球桌面用鼠标键右击“两个地标间直线路径线”,选择“显示高度配置文件”子菜单,系统将在谷歌地球桌面下方自动打开“两个地标间直线路径线”地形剖面图的窗口,并在窗口上方显示“两个地标间直线路径线”上个点的距离、经纬度、海拔等参数。

5、同时按住“Ctrl+Alt+S”键,系统可将谷歌地球桌面图像导出到指定位置,并生成Jpg图片文件。

osgearth笔记

osgearth笔记

这是个人在学习osgEarth时根据体会或从别的地方看到的做的一个简单整理,有些东东就是官方文档翻译过来的,都是根据自己的需要感觉需要记录下来什么东西就随便记录下来了,也没有个条理,都是用到哪记到哪,别见怪。

对个人在初期使用osgEarth时有很多帮助,所以特发上来,希望对大家也有帮助osgEarth学习笔记1. 通过earth文件创建图层时,可以指定多个影像数据源和多个高程数据源,数据源的顺序决定渲染顺序,在earth文件中处于最前的在渲染时处于最底层渲染;所以如果有高低精度不同的影响数据或者高程数据,在创建earth文件时要将粗精度的数据放在上方xml节点,高精度的放在其下面的节点;2. osgEarth自带多种驱动器,不同的驱动器驱动不同的数据源,自己也可以扩展驱动器读取相应的数据;3. 可以通过profile属性指定数据的投影方式或者数据分页方式以及地理空间延展;osgEarth通过profile创建数据四叉树,每个四叉树节点数据瓦片通过TileKey类来标示;一个地形数据能否正常工作要看创建它的驱动器是否能够创建和对应profile兼容的数据瓦片;比如,如果要生成地球数据,就需要指定global-geodetic 或者global-mercator profile,相应的数据源要能够在这种profile下生成相应的地形数据;4.通过earth文件,最基本的也是最主要的功能是我们可以指定生成地形的坐标属性(地理坐标或投影坐标)影像数据、高程数据、矢量数据、模型数据、以及缓冲位置,通过这些基本要素就可以轻易生成我们想要的地形;5. osgEarth只能使用16或32位的高程数据源;6. 如果直接使用原始的影像、高程以及矢量数据,可以用GDAL驱动器,在这种情况下需要注意几个性能的问题。

第一,将数据源预先进行坐标变换,变换为目标地形坐标,否则osgEarth 会对源数据进行坐标投影变换,这将降低数据的加载及处理速度。

OSG学习 笔记

OSG学习 笔记

Switch(转换)节点用于标记来控制其子节点的显示或隐藏,使用Switch节点可以对其下层子节点进行有选择性的控制。

将若干节点放置在Switch 节点下可以使用任意的组合方式来显示指定的节点。

Lod(细节层次)是一组具有不同精细程度的模型。

实时系统可以根据视点距离模型的远近自动调用相应的模型。

如果视点距离物体较远,则显示比较粗糙的模型(由较少多边形表示)。

当视点移向物体时,实时系统将用比较精细的模型(有较多多边形组成)取代它。

缺省条件下。

LOD计算视点到物体包络体中心点的距离。

如果这样并不符合渲染要求,那么可以指定一个自定义的中心点。

Osg::ref_ptr<osg::LOD> lod=new osg::LOD;Lod->setCenterMode(osg::LOd::USER_DEFINED_CENTER);Lod->setCenter(osg::vec3(100.0f,100.0f,0.0f));帧动画:在时间轴的每一帧上逐帧绘制不同的内容,使其连续播放。

帧动画具有非常大的灵活性。

三维物体的标准变换主要包括:移动、缩放、旋转和投影等!在场景中的三维物体是由许多三角形网格构成的,物体越精细,三角形网格就越多,将这些三角形网格的顶点坐标列出来,就构成了顶点矩阵。

虚拟场景中的物体在三维环境中要实现标准变换,需要借助物体本身的顶点矩阵变换来完成。

运动物体物理建模:几何建模只是建立了对象的外观,不能表现对象的行为,而对象的行为能力由是虚拟现实系统的重要特性。

因此在几何建模的基础上还需要进行物理建模,物理建模就是在建模时考虑对象的物理属性,通过使用面向对象的方法,把模型视为对象,用对象的成员变量来记录模型的物理特征。

我们以运动汽车受外力作用为例,建立相应的物理模型,我们可以增加物体的质量这一物理属性的描述。

物体的速度、位置等物理属性在物理仿真中同样具有重要地位。

而速度、位置都是矢量,既有大小又有方向,因此不可避免要引入向量运算,基于以上讨论,建立的车辆类不仅可以表示大小、方向还封装了向量的有关运算。

osgearthsetelevation范围 -回复

osgearthsetelevation范围 -回复

osgearthsetelevation范围-回复关于osgearth.setElevation范围的一步一步解析在使用osgEarth进行地理信息系统(GIS)开发时,一个常见的需求是设置地形的高程范围。

osgEarth是一个强大的地理可视化引擎,它结合了OpenSceneGraph和地理空间数据,可以为用户提供高效、灵活的地球可视化、地图生成和地理空间分析工具。

在osgEarth中,通过osgearth.setElevation方法可以设置地形(或海底)的高程范围。

本文将一步一步地解析关于osgearth.setElevation范围的相关知识。

第一步:理解osgearth.setElevation方法的作用osgearth.setElevation方法用于设置地形的高程范围。

地形高程通常表示地球表面的海拔高度,可以用来模拟山脉、山谷、平原等地貌特征。

通过设置地形的高程范围,可以控制地形的细节和表现效果,从而实现更加真实和精细的地球模拟。

第二步:了解osgearth.setElevation方法的参数osgearth.setElevation方法接受两个参数:minElevation和maxElevation。

minElevation表示地形的最低高程,maxElevation表示地形的最高高程。

这两个参数可以指定为绝对高程值,也可以指定为离散的离地高度。

第三步:理解最低和最高高程的含义最低高程和最高高程决定了地形的高程范围。

设置最低高程可以控制地形的最低部分,比如海平面或低洼地区。

设置最高高程可以控制地形的最高部分,比如山峰或高原。

通过调整最低和最高高程的数值,可以实现对地形的局部或整体高程范围的控制。

第四步:确定合适的高程范围数值确定合适的高程范围数值需要考虑具体的需求和数据情况。

一般来说,可以通过查看地理数据源的高程信息来获取合适的数值范围。

比如,可以查看DEM(数字高程模型)数据,了解地形的高程分布情况。

osgEarth使用笔记4—加载矢量数据

osgEarth使用笔记4—加载矢量数据

osgEarth使用笔记4—加载矢量数据目录1. 概述2. 详论2.1. 基本绘制2.2. 矢量符号化2.2.1. 可见性2.2.2. 高度设置2.2.3. 符号化2.2.4. 显示标注2.3. 其他3. 结果4. 问题1. 概述前面文章加载的底图数据是一种栅格数据,还有一种很重要的地理信息表现形式是矢量数据。

在osgEarth中,这部分包含的内容还是很丰富的,这里就总结一二。

2. 详论在《osgEarth使用笔记1——显示一个数字地球》这篇文章中代码的基础之上,添加加载显示矢量的代码:1.#include<Windows.h>2.#include<iostream>3.#include<string>4.5.#include<osgViewer/Viewer>6.#include<osgDB/ReadFile>7.8.#include<osgEarth/MapNode>9.#include<osgEarth/ImageLayer>10.11.#include<osgEarthDrivers/gdal/GDALOptions>12.#include<osgEarthDrivers/cache_filesystem/FileSystemCache>13.#include<osgEarthDrivers/feature_ogr/OGRFeatureOptions>14.15.#include<osgEarthFeatures/FeatureSourceLayer>16.#include<osgEarthFeatures/FeatureModelLayer>17.18.#include<osgEarthUtil/EarthManipulator>19.ing namespace std;21.22.void AddVector(osg::ref_ptr<osgEarth::Map> map)23.{24.//25.std::string filePath ="D:/Work/OSGNewBuild/osgearth-2.10.1/data/world.shp";26.osgEarth::Drivers::OGRFeatureOptions featureData;27.featureData.url()= filePath;28.29.// 如果缺少空间参考,可以手动指定30.// ifstreaminfile("C:/Data/vector/hs/23.prj");31.// string line;32.// getline(infile, line);33.// featureData.profile()->srsString() = line;34.35.// Make a feature source layer and add itto the Map:36.osgEarth::Features::FeatureSourceLayerOptio ns ogrLayer;()= filePath +"_source";38.ogrLayer.featureSource()= featureData;39.osgEarth::Features::FeatureSourceLayer* featureSourceLayer =newosgEarth::Features::FeatureSourceLayer(ogrLayer);40.map->addLayer(featureSourceLayer);41.osgEarth::Features::FeatureSource*features = featureSourceLayer->getFeatureSource();42.if(!features)43.{44.printf(("无法打开该矢量文件!"));45.return;46.}47.48.//49.osgEarth::Features::FeatureModelLayerOption s fmlOpt;()= filePath;51.fmlOpt.featureSourceLayer()= filePath +"_source";52.fmlOpt.enableLighting()=false;53.54.osg::ref_ptr<osgEarth::Features::FeatureMod elLayer> fml =newosgEarth::Features::FeatureModelLayer(fmlOpt);55.map->addLayer(fml);56.}57.58.int main()59.{60.osgEarth::ProfileOptions profileOpts;61.62.//地图配置:设置缓存目录63.osgEarth::Drivers::FileSystemCacheOptions cacheOpts;64.string cacheDir ="D:/Work/OSGNewBuild/tmp";65.cacheOpts.rootPath()= cacheDir;66.67.//68.osgEarth::MapOptions mapOpts;69.mapOpts.cache()= cacheOpts;70.mapOpts.profile()= profileOpts;71.72.//创建地图节点73.osg::ref_ptr<osgEarth::Map> map =new osgEarth::Map(mapOpts);74.osg::ref_ptr<osgEarth::MapNode> mapNode = new osgEarth::MapNode(map);75.76.osgEarth::Drivers::GDALOptions gdal;77.gdal.url()="D:/Work/OSGNewBuild/osgearth-2.10.1/data/world.tif";78.osg::ref_ptr<osgEarth::ImageLayer> layer = new osgEarth::ImageLayer("BlueMarble", gdal);79.map->addLayer(layer);80.81.AddVector(map);82.83.osgViewer::Viewer viewer;84.viewer.setSceneData(mapNode);85.86.osg::ref_ptr<osgEarth::Util::EarthManipulator> mainManipulator = new osgEarth::Util::EarthManipulator;87.viewer.setCameraManipulator(mainManipulator);88.89.viewer.setUpViewInWindow(100,100,800,600);90.91.return viewer.run();92.}osgEarth表达矢量的基本思路是,先将其读取到矢量源图层FeatureSourceLayer中,这个图层加载到osgEarth的图层列表中是不显示的,必须得再加载一个专门的符号化图层,将其符号号,才能正常显示。

osgearth学习文档

osgearth学习文档

osgearth学习⽂档osgEarth::Drivers::TMSOptions Class Reference通过程序加载数据赶紧进⼊正题,程序加载各种数据,⾸先介绍⼀下总体的⽅式/*这⾥XXXOptions 是根据不同的数据类型选择不同驱动,⽐如加载本地数据可以使⽤GDALOptions ,加载TMS数据可以使⽤TMSOptions(注意TMSOptions可以加载本地也可以加载⽹上数据),WMSOptions可以加载⽹上数据(注意这个options主要加载影像和图⽚数据),ArcGISOptions加载ArcGIS Server发布数据。

*/osgEarth::Drivers::XXXOptions XXXLayer;/*这⾥就是加载的数据路径,如果加载的本地数据就是本地数据的路径,如果加载是⽹上数据就是相应的⽹址*/ XXXLayer.url()=osgEarth::URI(".................................");/*加载的数据是分层管理,每加载进来⼀个数据在earth上就是⼀个数据层,这⾥给数据层付个名字。

*/std::string LayerName="earth";/*osgearth⾥layer主要有三种类型ImageLayer、ElevationLayer和ModleLayer ,前两个⼤家从字⾯就可以知道第⼀个是加载影像和第⼆个是加载⾼程数据的,第三个是主要⽤来加载shp数据,⾄少我是这样⽤的,不知道还能否加载其他数据类型。

确定加载⽤的驱动、数据源位置(路径)、数据层名和初始化了数据层,接下来就是把数据层加到地球中如下所⽰。

*/osg::ref_ptr layer =new osgEarth::XXXLayer(osgEarth::XXXLayerOptions(LayerName,XXXLayer));m_pMap->addImageLayer(layer.get());(1)加载本地数据a 本地影像数据,数据类型为tifosgEarth::Drivers::GDALOptions imagelayerOpt;//选择GDALOptionsimagelayerOpt.url() = osgEarth::URI("E:\\vs2010Progam Files\\osgVR74\\osgVR74\\world.tif");//影像数据路径std::string imagelayerName = "worldimage"; //影像数据层名osg::ref_ptr imageLayer = new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(imagelayerName ,imagelayerOpt));//初始数据层m_pMap->addImageLayer(imageLayer .get());b 本地⾼程数据,数据类型为tifosgEarth::Drivers::GDALOptions demlayerOpt;//使⽤还是GDALOptionsdemlayerOpt.url() = osgEarth::URI("E:\\vs2010Progam Files\\osgVR74\\osgVR74\\worlddem.tif");//⾼程数据路径std::string demlayerName = "worlddem";//⾼程数据层名osg::ref_ptr demLayer = new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(demlayerName,demlayerOpt));//初始数据层m_pMap->addImageLayer(demLayer.get());加载本地经过package 切⽚的数据还可以⽤TMSOptions,osgEarth::Drivers::TMSOptions tmsOpt;////选择TMSOptions 驱动tmsOpt.url()=osgEarth::URI("//Edvis_-1/Layer_0/tms.xml");//package切⽚⽣成⾦字塔⽂件下的xmlstd::stringDemtmslayerName="TmsDem";//图层名osgEarth::ElevationLayerOptionstmslayerOpt(DemtmslayerName,tmsOpt);osg::ref_ptr TmsDemLayer = new osgEarth::ElevationLayer(tmslayerOpt);m_pMap->addElevationLayer(TmsDemLayer.get());//初始化图层并加⼊到地球中(2)加载⽹上数据a 加载ArcGIS Server 发布的数据加载⽅式与上⾯提到的类似osgEarth::Drivers::ArcGISOptions MapImageLayer;MapImageLayer.url()=osgEarth::URI("http://xxx.xxx.xxx.xxx.:xxxx/arcgis/rest/services/world/ma p003/MapServer");std::string CdlayerName="worldimage";osg::ref_ptr cdlayer =new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(CdlayerName,MapImageLayer));m_pMap->addImageLayer(cdlayer.get());//这⾥注意,当osgearth访问ArcGIS Server 发布数据的时候有些问题很奇怪,⽤上⾯的⽅式访问ArcGIS Server 国外发布的数据没问题,但是访问⾃⼰发布的数据就会有问题,经过试验投影要设成3857才能正常访问。

osgearth 简单的例子

osgearth 简单的例子

1. 介绍osgEarthosgEarth是一个开源的地理空间3D渲染引擎,它建立在OpenSceneGraph(OSG)之上,提供了一套方便易用的工具和库,用于构建高性能的3D地球可视化应用程序。

osgEarth支持多种数据格式和地理空间数据源,包括地形数据、卫星影像、矢量数据等,用户可以利用osgEarth快速、灵活地构建出各种类型的地球可视化应用。

2. osgEarth的基本概念在了解osgEarth之前,需要了解一些基本概念。

osgEarth使用用于地球可视化的场景图,其中包含了地形、卫星影像、矢量数据和其他图层信息。

osgEarth使用图层树来管理这些数据,每个图层都有自己的样式和渲染规则。

osgEarth还提供了一套简单的、高效的符号渲染系统,可以用于在地图中显示各种地理要素。

3. osgEarth的简单例子下面通过一个简单的例子来介绍osgEarth的基本用法。

假设我们有一些地形数据和卫星影像数据,我们希望将它们加载到osgEarth中进行可视化展示。

(1)我们需要创建一个OSG Viewer实例,作为osgEarth可视化的窗口。

(2)我们需要创建一个Map实例,用于管理地理空间数据。

我们可以向Map实例中添加地形图层和卫星影像图层。

(3)接下来,我们需要创建一个MapNode实例,它是地球可视化的根节点。

我们可以将Map实例和OSG Viewer实例传递给MapNode实例。

(4)我们将MapNode实例添加到OSG Viewer中,这样就完成了地球可视化的搭建工作。

通过以上简单的步骤,我们就可以将地形数据和卫星影像数据加载到osgEarth中进行可视化展示了。

当然,osgEarth还提供了丰富的样式和渲染规则设置,可以根据实际需求进行定制化操作。

4. 总结osgEarth作为一个开源的地理空间3D渲染引擎,提供了丰富的功能和灵活的工具,可以帮助用户快速、高效地构建各种类型的地球可视化应用。

OSG学习个人笔记

OSG学习个人笔记

【初学提示】正确运行OSG的例子OSG为我们提供了很多有用的例子,那么如何正确运行这些例子呢?我将我的一些经验写出来,希望对大家有所帮助。

1、命令行参数如何找?main函数作为一个程序的入口很多命令行的参数的在这里处理。

OSG的例子里很多都是需要提供参数的,否则就需要调用默认的文件。

注意如果你直接运行OSG的例子有可能只是一闪而过,正常的,不要惊慌,只需要分析一下到底需要什么命令行参数就可以正确的运行起来。

以osgviewer这个程序来讲,我们看看相关的处理函数:arguments.getApplicationUsage()->setApplicationName(arguments.getApplicat ionName()); //设置程序的名称arguments.getApplicationUsage()->setDescription(arguments.getApplicationNa me()+" is the standard OpenSceneGraph example which loads and visualises 3d models."); //简单的描述arguments.getApplicationUsage()->setCommandLineUsage(arguments.getAppl icationName()+" [options] filename ..."); //例子的使用方法arguments.getApplicationUsage()->addCommandLineOption("--image <filename>","Load an image and render it on a quad"); //参数....(省略一些)这里就可以看书这个程序是干什么的,具体的使用方法是什么,以及一些参数的用法。

OSG学习过程中的笔记

OSG学习过程中的笔记

一旋转其中trans->setMatrix(osg::Matrix::translate(0,0,20));就是用来平移物体,这个表示象Z轴正方向平移也就是屏幕正上方。

o sg::Matrix::scale(0.5,0.5,0.5)表示缩放的比例,也就是原来物体的一般大小osg::Matrix::rotate(osg::DegreesToRadians(90.0),0,1,0)该方法参数分别表示角度,x,y,z当xyz其中有值是那么物体会绕着物体旋转。

当角度为正值的时候,物体绕着x,y,z箭头指向向右旋转,否则物体绕着x,y,z箭头指向向左旋转osg笔记(一)2011-07-05 19:37:29| 分类:OSG | 标签:|字号大中小订阅场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息。

根节点和各个组节点都可以有零个(实际上是没有执行任何操作)或多个子成员。

在场景图形的最底部,各个叶节点包含了构成场景中物体的实际几何信息。

Osg程序使用组节点来组织和排列场景中的几何体。

场景图形通常包含了多种类型的节点以执行各种各样的用户功能,例如开关节点可以设置其子节点可用或不可用,细节层次节点(LOD)可以根据观察者的距离调用不同的子节点,变换节点可以改变子节点几何体的坐标变换状态。

场景图形特征:1. 提供底层渲染API中具备的几何信息和状态管理功能之外,还兼备以下的附加特征和功能:2. 空间结构:3. 场景拣选,投影面剔除和隐藏面剔除。

4. 细节层次:5. 透明6. 状态改动最少化7. 文件I/O8. 更多高性能函数:全特征文字支持,渲染特效的支持,渲染优化,3d模型文件读写支持,跨平台输入渲染及显示设备的访问.场景图形渲染方式:三种遍历操作1. 更新2. 拣选3. 绘制Osg设计所采用的设计理念和工具:Ansi标准C++C++标准模板库设计模式Osg命名习惯:命名空间:小写字母开头,然后大写字母避免混淆。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

智能指针使用:
osg::Geode* geode=new osg::Geode;//新建Geode指针
osg::ref_ptr<osg::Geode>geodePtr=geode;//构造一个新的ref_ptr对象,并将Geode指针分配给它。

新建Geode对象geode的引用计数值变为1
Osg::ref_ptr<osg::Geode> geode1=new osg::Geode;//实现上述两句功能,不会产生内存泄露,当ref_ptr的生命周期结束时会自动释放引用对象
结论:①osg中新创建的场景对象建议使用ref_ptr进行内存的分配和管理
②对于不使用ref_ptr的对象,引用计数值将变的没有意义,并且它无法自动从场景中卸载
③新建对象作为函数结果返回时,建议使用realease()传递,并尽快引入到别的场景对象中
叶节点Geode
1、OSG 定义了osg::Drawable 类,用于保存要渲染的数据。

Drawable 是一个无法直接实例化的虚基类。

OSG 核心库从Drawable 派生出三个子类:①osg::DrawPixels,封装了glDrawPixels()的相关功能;②osg::ShapeDrawable,提供了一些已经定义好的几何体的使用接口,如圆柱体和球;③osg::Geometry。

setVertexArray() ,setColorArray() ,setNormalArray()用户程序可以使用它们来指定顶点数组,颜色,以及法线数据。

setVertexArray()和setNormalArray()均使用一个Vec3Array 指针作为输入参数,而setColorArray()使用一个Vec4Array 指针。

官方OSG四个程序:
1 osgViewer模型查看工具
osgViewer是这四个程序当中用的最多的OSG程序,代码也非常入门与浅显易懂,在开始->运行->CMD中就可以直接启动osgViewer,因为path中添加了它的路径。

下面来看一下osgViewer的功能,如表2.1
表2.1 osgViewer的功能表
命令:注意有的双杠功能
--image <filename> 读取纹理文件,比如:osgViewer --image Images/skymap.jpg
--dem <filename> 以高程图的形式渲染一个镜像/DEM 比如osgViewer --dem a.img
-h或--help 命令行参数功能帮助
--help-env 所有可用的环境变量帮助
--help-keys 所有可用键帮助
--help-all 展示所有帮助信息
--SingleThreaded 为viewer选择单线程模式
--CullDrawThreadPerContext 为viewer选择CullDrawThreadPerContext线程模式
--DrawThreadPerContext 为viewer选择DrawThreadPerContext线程模式
--CullThreadPerCameraDrawThreadPerContext 为viewer选择—CullThreadPerCameraDrawThreadPerContext线程模式
想用osgEarth做三维地球浏览器,可是一直都不知道osgEarth具体是做什么的,有关的资料也都是英文的,于是就把osgEarth网站上的内容翻译了一下
osgEarth--所需地形
osgEarth是一个为OSG提供的可升级的地形工具包。

创建一个简单的XML文件,用形象化的描述、立体图、矢量数据来指明内容,并将其加载到你所喜爱的OSG应用中。

osgEarth支持所有类型的数据、并附带很多例子来帮助你研究和运行。

osgEarth可以很容易部署可升级的地形模型:
∙创建地形模型——无论是在本地电脑,或者动态载入
∙不用书写任何代码便可加载整个地球地形
∙分层描述所形成的高分辨率插入物
∙结合多种描述、立体图和飞行模式下的矢量数据源
∙建立地图块缓存来最大限度的利用性能
∙为多重纹理效果调整图形的不透明度
但是osgEarth不仅仅可以提供地形:
∙在不同的参考坐标系中重新投影数据
∙用长坐标来放置额外的模型
∙可以做快速的交叉测试
∙把新数据合并到现有的VPB数据库中(不用重新生成)
∙可直接访问地形块儿
特定驱动器属性设置,驱动器分为影像/高程驱动器、模型驱动器、特征驱动器、缓冲驱动器以及地形引擎驱动器5大类;
影像/高程驱动器
agglite驱动器,该驱动器将矢量数据栅格化为位图然后然后将其转换为地形瓦片纹理层
ArcGis驱动器
复合驱动器
GDAL驱动器
osg驱动器,直接通过osg的文件读写插件读取相应类型的影响数据或高程
/tilecache驱动器,读取tilecache磁盘缓存数据,通过tilecache工具可以从WMS服务器创建或缓存地图数据到磁盘,然后通过该驱动器进行离线读取。

tileservice驱动器,从NASA服务器读取数据
tms驱动器,通过tms服务的方式读取数据
wms驱动器,通过wms服务的方式读取数据
VPB驱动器,从vpb生成的地形数据库读取相应的影像和高程数据,注意,osgEarth只能读取适用VPB 使用—terrain选项创建的地形数据库。

模型驱动器:
feature_geom驱动器,该驱动器就是将矢量数据创建成几何对象进行渲染
feature_overlay驱动器,该驱动器采用osgSim::OverlayNode将矢量数据作为投影纹理覆盖到地形上。

这种覆盖节点的方式对于平面投影坐标模式是很适合的,但对于球体地心。

feature_stencil驱动器,该驱动器采用模板缓冲技术将矢量数据覆盖到地形上
矢量特征数据也要指定自己的驱动器,它不直接创建矢量数据几何体,只是用来读取矢量数据,目前矢量数据驱动器主要是ogr及GDAL,
Working with a MapNode at runtime
Whether the Map was loaded from an Earth File or created at run time, the Map can modified at runtime. If a Map was loaded from an Earth File, you will first need to get a reference to the MapNode to work with. Use the !Map::findMapNode utility function:
//Load the map
osg::Node* loadedModel = osgDB::readNodeFile("mymap.earth");
//Find the MapNode
osgEarth::MapNode* mapNode = MapNode::findMapNode( loadedModel );
Once you have a reference to the MapNode, you can add image or elevation layers:
// Add an OpenStreetMap image source
TMSOptions driverOpt;
driverOpt.url() = "/";
driverOpt.tmsType() = "google";
ImageLayerOptions layerOpt( "OSM", driverOpt );
layerOpt.profile() = ProfileOptions( "global-mercator" );
ImageLayer* osmLayer = new ImageLayer( layerOpt );
mapNode->getMap()->addImageLayer( osmLayer );
You can also remove or re-order layers:
// Remove a layer from the map. All other layers are repositioned accordingly
mapNode->getMap()->removeImageLayer( layer );
// Move a layer to position 1 in the image stack
mapNode->getMap()->moveImageLayer( layer, 1 );。

相关文档
最新文档