OSGEarth的编译环境配置随着版本的不同、运行平台的不同,也有很大的差异。本章主要以Windows XP SP3(x86)为平台,Visual Studio 2010 为编译环境来介绍OSGEarth2.0的变异环境配置。
OSGEarth的相关资源可以通过其官方网站(http://www.osgearth.org/wiki/Downloads)获取(所有资源文件均在关盘的source文件夹中)主要资源说明和网址如下表:
资源名称 |
版本要求 |
推荐下载 |
OpenSceneGraph |
V2.8.0以上 |
http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.0/source/OpenSceneGraph-3.0.0.zip |
GDAL |
V1.6以上 |
http://download.osgeo.org/gdal/gdal181.zip http://download.osgeo.org/gdal/gdal-1.8.1.tar.gz |
CURL |
V7.21以上 |
http://curl.haxx.se/download/curl-7.22.0.zip |
GEOS |
V3.2以上 |
http://download.osgeo.org/geos/geos-3.3.1.tar.bz2 |
SQLite |
V3.2以上 |
源文件:http://www.sqlite.org/sqlite-amalgamation-3070900.zip Dll:http://www.sqlite.org/sqlite-dll-win32-x86-3070900.zip |
MiniZip |
V1.0以上 |
头文件:http://www.winimage.com/zLibDll/unzip101h.zip 源代码:http://www.winimage.com/zLibDll/zlib125.zip Dll文件:http://www.winimage.com/zLibDll/zlib125dll.zip |
Expat |
V2.0.1以上 |
code:http://sourceforge.net/projects/expat/ exe:http://files.cnblogs.com/eaglezhao/expat-win32bin-2.0.1.rar |
OSGEarth |
V2.0 |
git://github.com/gwaldron/osgearth.git OSGEarth源代码使用tortoisegit软件存放,因此需要下载并安装:1.安装 Git-1.7.0.2-preview20100309.exe (http://msysgit.googlecode.com/files/Git-1.7.0.2-preview20100309.exe) 2.安装ortoiseGit-1.7.4.0-32bit.msi (http://tortoisegit.googlecode.com/files/TortoiseGit-1.7.4.0-32bit.msi) |
安装过程中可能还需要其他的资源或者程序支持,具体在安装过程进行说明。
为了提高OSGEarth在编译过程中执行速度,降低计算机硬件要求,因此选用windows XP SP3作为测试系统平台,vs2010作为windows平台下最新的编译软件,具有windows平台的兼容性考虑,编译出来的EXE文件可以顺利的部署在vista,win7上。
CMake 是个跨平台的自动化建构系统,它用组态档控制建构过程(build process)的方式和 Unix 的 Make 相似,只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支援 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支援静态与动态程式库的建构。
支持VS2010的CMake版本为v2.8以上,本书选择V2.8.4。下载地址:
http://ishare.iask.sina.com.cn/f/14399926.html或者http://www.cmake.org/
关于的cmake的具体用法请参看
http://techbase.kde.org/Development/Tutorials/CMake_(zh_CN)
或者
http://www.cmake.org/Wiki/CMake。
下载完成后安装,在安装选项的位置选择:
其他可选择默认安装。
Open Scene Graph(简称OSG)使用OpenGL技术开发,是一套基于C++平台的应用程序接口(API),它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。它作为中间件(middleware)为应用软件提供了各种高级渲染特性,IO,以及空间结构组织函数;而更低层次的OpenGL硬件抽象层(HAL)实现了底层硬件显示的驱动。
OpenGL技术为图形元素(多边形、线、点……)和状态(光照、材质、阴影……)的编程提供了标准化的接口。而OSG开发的主要意义在于,将3D场景定义为空间中一系列连续的对象,以进行三维世界的管理。正是由于场景及其参数定义的特点,通过状态转化、绘图管道和自定制等操作,OSG还可以用于优化渲染性能。
从系统开发人员的角度看,相比工业标准OpenGL 或其它的图形库,OSG的优点显而易见。除了开源和平台无关性以外,它封装并提供了数量众多的提升程序运行时性能的算法、针对包括分页数据库在内的几乎所有主流数据格式的直接数据接口、以及对脚本语言系统Python 和Tcl 的支持,特别的,支持脚本语言系统的意义不仅限于用户可以使用除C++语言以外的工具进行图形系统的开发,事实上,对弱类型计算机语言的支持将突破现有交互式图形系统在人-机交互性能方面的最终限制。 OSG采用以下思想和工具进行构建:
1. ANSI标准C++;
2. C++标准模板库(STL);
3. 设计模式(Designpatterns)。
这些工具使得OSG的开发者可以在自己喜好的平台上进行开发,并且依据用户所要求的平台进行配置。
如今的OSG 已经可以在多种硬件平台和操作系统上运行,并且能够在大部分计算机系统上正常使用。 处理器:OSG 可以在大部分的CPU 上编译通过。OSG 具备线程安全性,并且可以有效利用多处理器和双核结构的特性。OSG 可以在32 位或者64 位处理器上运行通过。
图形:你的计算机系统需要配置一块AGP 或者PCI 总线的图形显示卡。OSG可以在大部分用于建模,仿真和游戏的专业级或大众级图形设备上运行。可以运行OSG 的图形设备必须高效地支持OpenGL,因此你应当从设备商处获得最新的OpenGL 设备驱动程序。OSG 对显卡RAM 的需求因用户的使用而异,但是256MB 应当足够了。OSG 可以在多管(multi-pipe)显示系统上运行,并且可以利用多显卡来提升渲染速度。
RAM:最小的系统RAM 内存需求是由显示数据的数量和类型决定的。推荐配置为1GB,大型数据集的开发可能需要更多的内存支持。
磁盘:和RAM 一样,磁盘空间的需求大小由数据量决定。对于任何程序来说,更高速和更大容量的磁盘无疑可以减少数据读取的时间。
可以运行OSG的平台需要具备OpenGL的支持能力,以及C++的编译环境,支持OSG的系统包括Solaris,IRIX,Windows,Mac OSX,HP-UX,Sony Platystation等等,不过XBox除外。 和OpenGL类似,OSG的核心并没有提供窗口系统的功能。因此用户可以自由选择所需的图形开发接口,如GLUT,X11/Motif,Win32,MacOS X,Qt,wxWindows,Fox等。
Open Scene Graph安装与编译还需要下载两个资源:
1. Osg第三方库(3rdParty_VC10_x86_x64.zip),网址:
http://members.iinet.net.au/~bchrist/3rdParty_VC10_x86_x64.zip
2. 数据包(OpenSceneGraph-Data-3.0.0.zip),网址:
http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.0/data/OpenSceneGraph-Data-3.0.0.zip
第一步:选择一个磁盘(X),保证磁盘具有30G左右的可用空间,并创建文件夹,X:/OSG/;(作者使用了E盘,后续如果出现E盘表示选择磁盘)。
第二步:将OpenSceneGraph-3.0.0.zip到X:/OSG/OpenSceneGraph文件夹中;3rdParty_VC10_x86_x64.zip解压到X:/OSG/3rdParty文件夹中;OpenSceneGraph-Data-3.0.0.zip解压到X:/OSG/OpenSceneGraph-Data文件夹中。
X:/OSG/OpenSceneGraph文件夹截图:
X:/OSG/3rdParty文件夹截图:
X:/OSG/OpenSceneGraph-Data文件夹截图:
第一步:启动CMake -gui.exe并设置文件地址,将编译地址设置为E:/osg/OpenSceneGraph/vs2010。
第二步:点击“configure”:
以此出现以下过程:
点击“YES”:
选择“visual studio 2010”,点击“Finish”:
第一步:配置环境变量
第一步:设置基本参数
ACTUAL_3RDPARTY_DIR值:E:/OSG/3rdParty;
BUILD_OSG_EXAMPLES值:ON
CMAKE_INSTALL_PREFIX值:E:/osg/OpenSceneGraph/vs2010
第二部:点击Configure;
(红色标记为需要修改或设置不清楚的地方)。
第三步:将Advanced打勾,将BUILD_MFC_ EXAMPLE设置为on,然后进行最后一次的Configure配置。
第四步:点击Generate,自此建构完成。
(只有出现了“Generating done”才表示生成完成,否则需要根据提示修改CMAKE的相关设置)
打开文件夹E:\osg\OpenSceneGraph\vs2010,可以看见:
第一步:用VS2010打开OpenSceneGraph.sln(此文件在E:\OSG\OpenSceneGraph\VS2010下),过程可能需要较长时间,请耐心等待。
第二步:配置VS2010的相关设置。
点击“生成”,估计需要3-6个小时。
第三步:验证生成的文件
在E盘新建E:\osgearth\OpenSceneGraph文件夹。(说明:E:\osgearth文件夹是用来编译osgearth的文件夹)将E:\osg\OpenSceneGraph\vs2010下的bin,include,lib文件夹拷贝到E:\osgearth\OpenSceneGraph下(可以删除vs2010生成的临时文件,即bin中保留dll和exe文件,include不用处理,lib中保留lib文件),将E:\osg\OpenSceneGraph-Data下的数据拷贝到E:\ osgearth\OpenSceneGraph\data下;这几个文件是OSG需要的。
测试文件:
1. 打开E:\ osgearth\OpenSceneGraph\bin\osgviewerMFC.exe
2. 打开E:\ osgearth\OpenSceneGraph\data文件中的.osg或者.osgt文件,使用鼠标拖动观察程序运行情况。
如果运行正常,表明编译已经成功,否则需要查看编译过程中是否错误。在退出程序是出现下面对话框是正常现象。
curl是利用URL语法在命令行方式下工作的文件传输工具。它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传, 上载文件断点续传, http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器, 通过http代理服务器上传文件到FTP服务器等等,功能十分强大。Windows操作系统下的网络蚂蚁,网际快车(FlashGet)的功能它都可以做到。准确的说,curl支持文件的上传和下载,所以是一个综合传输工具,但是按照传统,用户习惯称curl为下载工具。
curl是瑞典curl组织开发的,您可以访问 http://curl.haxx.se/获取它的源代码和相关说明。curl的最新版本是7.22.0。在http://curl.haxx.se/docs/您可以下载到UNIX格式的man帮助,里面有详细的curl工具的使用说明。
首先解压curl-7.22.0.zip到当前文件夹。
第二步:使用vs2010打开vc6curl.dsw,出现的提示全部选择“是”。
第三步:设置生成
编译完成的界面显示:
第四步:文件转移。在E盘新建E:\osgearth\curl文件夹。(本书编译文件夹:D:\数字地球\curl-7.22.0)将D:\数字地球\curl-7.22.0\include\curl文件夹中.h文件复制到E:\osgearth\curl\include和E:\osgearth\3rdparty\include\curl文件夹中;将D:\数字地球\curl-7.22.0\lib文件夹中(包含子文件夹)的dll和lib文件复制到E:\osgearth\curl\lib和E:\osgearth\3rdparty\lib文件夹中。
GDAL(GeospatialData Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。 OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。有很多著名的GIS类产品都使用了GDAL/OGR库,包括ESRI的ArgGIS 9.2,Google Earth和跨平台的GRASS GIS系统。利用GDAL/OGR库,可以使基于Linux的地理空间数据管理系统提供对矢量和栅格文件数据的支持。
GDAL提供对多种栅格数据的支持,包括Arc/Info ASCII Grid(asc),GeoTiff (tiff),Erdas ImagineImages(img),ASCII DEM(dem) 等格式。
1) GDAL抽象数据模型
GDAL使用抽象数据模型(abstract datamodel)来解析它所支持的数据格式,抽象数据模型包括数据集(dataset),坐标系统,仿射地理坐标转换(AffineGeoTransform), 大地控制点(GCPs),元数据(Metadata),栅格波段(Raster Band),颜色表(ColorTable),子数据集域(Subdatasets Domain),图像结构域(Image_StructureDomain),XML域(XML:Domains)。
2) GDAL基础类
GDALMajorObject类:带有元数据的对象。GDALDdataset类:通常是从一个栅格文件中提取的相关联的栅格波段集合和这些波段的元数据;GDALDdataset也负责所有栅格波段的地理坐标转换(georeferencingtransform)和坐标系定义。
GDALDriver类:文件格式驱动类,GDAL会为每一个所支持的文件格式创建一个该类的实体,来管理该文件格式。GDALDriverManager类:文件格式驱动管理类,用来管理GDALDriver类。
OGR提供对矢量数据格式的读写支持,它所支持的文件格式包括:ESRI Shapefiles, S-57, SDTS, PostGIS,Oracle Spatial, Mapinfomid/mif , Mapinfo TAB。OGR包括如下几部分:
Geometry:类Geometry(包括OGRGeometry等类)封装了OpenGIS的矢量数据模型,并提供了一些几何操作,WKB(Well KnowsBinary)和WKT(Well KnownText)格式之间的相互转换,以及空间参考系统(投影)。
SpatialReference:类OGRSpatialReference封装了投影和基准面的定义。
Feature:类OGRFeature封装了一个完整feature的定义,一个完整的feature包括一个geometry和geometry的一系列属性。
FeatureDefinition:类OGRFeatureDefn里面封装了feature的属性,类型、名称及其默认的空间参考系统等。一个OGRFeatureDefn对象通常与一个层(layer)对应。
Layer:类OGRLayer是一个抽象基类,表示数据源类OGRDataSource里面的一层要素(feature)。
Data Source:类OGRDataSource是一个抽象基类,表示含有OGRLayer对象的一个文件或一个数据库。
Drivers:类OGRSFDriver对应于每一个所支持的矢量文件格式。类OGRSFDriver由类OGRSFDriverRegistrar来注册和管理。
第一步:将文件解压并打开makegdal10.sln。(本书解压文件夹为D:\数字地球\gdal-1.8.1\gdal-1.8.1)
第二步:文件转移。
GDAL编译完成后的文件存放于C:\warmerda\bld,包含文件bin,data,html三个子文件夹。
新建文件夹:E:\osgearth\gdal;将C:\warmerda\bld\bin和C:\warmerda\bld\data拷贝到E:\osgearth\gdal文件夹下;将D:\数字地球\gdal-1.8.1\gdal-1.8.1下得子文件夹alg,gcore,ogr和port中所有的.h文件拷贝到E:\osgearth\gdal\include下; 将D:\数字地球\gdal-1.8.1\gdal-1.8.1中所有的lib和dll文件复制到E:\osgearth\gdal\lib文件夹下。
GEOS(几何引擎——开源)是一个Java拓扑套件(JTS)的C++移植。因此,它的目的是在C++中包含完整的JTS移植。这包括了所有的OpenGIS“简单SQL特征”:空间预测函数和空间操作员,以及具体的JTS拓扑功能
第一步:将文件解压到D:\geos-3.3.1文件夹;
第二步:启动CMake -gui.exe并设置文件地址,将编译地址设置为D:/geos-3.3.1/vs2010。
第三步:点击“configure”:
第三步:修改参数。Cmake_install_PREFIX值为D:/geos-3.3.1/vs2010.并在此点击“configure”。
第四步:点击“Generate”
D:/geos-3.3.1/vs2010文件夹截图:
第五步:打开D:/geos-3.3.1/vs2010/geos.sln
设置相关参数(主要为了debug和release生成的文件名不一致)
工程名称 |
Debug目标文件名 |
Release目标文件名 |
Geos |
Geosd |
Geos |
geos-static |
libgeosd |
libgeos |
geos_c |
geosd_c |
geos_c |
点击“生成”->“批生成”
开始编译,编译结果截图:
第六步:文件转移。
在D:/geos-3.3.1/vs2010文件夹中搜索lib和dll文件,并将搜索到的文件复制到E:\osgearth\geos\lib文件夹中;
将D:\geos-3.3.1\include中文件复制到E:\osgearth\geos\include文件夹中。
Expat 是一个用C语言开发的、用来解析XML文档的开发库,它最初是开源的、Mozilla 项目下的一个XML解析器。Expat是一个面向流的解析器。您注册的解析器回调(或handler)功能,然后开始搜索它的文档。当解析器识别该文件的指定的位置,它会调用该部分相应的处理程序(如果您已经注册的一个)。该文件被输送到解析器,会被分割成多个片断,并分段装到内存中。因此expat可以解析那些巨大的文件。
第一步:直接下载expat-win32bin-2.0.1.rar文件,解压后安装。
第二步:文件转移
将C:\Program Files\Expat2.0.1\Source\lib文件夹中的h文件复制到E:\osgearth\expat\INCLUDE文件夹中;
将C:\Program Files\Expat2.0.1\Bin文件复制到E:\osgearth\expat\lib文件夹中。
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
第一步:解压文件。
1.将sqlite-amalgamation-3070900.zip文件中的文件复制到E:\osgearth\sqlite\include中;
2.将sqlite-dll-win32-x86-3070900.zip中文件复制到E:\osgearth\sqlite\lib中;
3.从VS2010的安装文件夹中的Visual Studio10/VC/bin中找到LIB.exe和Link.exe复制到E:\osgearth\sqlite\lib;
4.将 C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\mspdb100.dll复制到E:\osgearth\sqlite\lib;
第二步:编译lib文件。
1. 打开cmd窗口,进入E:\osgearth\sqlite\lib;
2. 输入命令:LIB/DEF:sqlite3.def。生成lib文件
编译后E:\osgearth\sqlite\lib文件夹截图:
ZIP,是一个计算机文件的压缩的算法,原名Deflate(真空),发明者为菲尔·卡茨(PhilKatz)),他于1989年1月公布了该格式的资料。ZIP通常使用后缀名“.zip”,它的MIME格式为 application/zip 。目前,ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7-Zip格式。从性能上比较,RAR格式较ZIP格式压缩率较高,而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用。 WinMount可以把ZIP挂载到虚拟盘,无需解压,随机读取,这又是另一大创新。
ZIP是一种相当简单的分别压缩每个文件的存档格式。分别压缩文件允许不必读取另外的数据而检索独立的文件;理论上,这种格式允许对不同的文件使用不同的算法。不管用何种方法,对这种格式的一个告诫是对于包含很多小文件的时候,存档会明显的比压缩成一个独立的文件(在类Unix系统中一个经典的例子是普通的tar.gz存档是由一个使用gzip压缩的TAR存档组成)要大。 ZIP的规约指出文件可以不经压缩或者使用不同的压缩算法来存储。然而,在实际上,ZIP几乎差不多总是在使用卡茨(Katz)的DEFLATE算法。
ZIP支持基于对称加密系统的一个简单的密码,现在已知有严重的缺陷,已知明文攻击,字典攻击和暴力攻击。ZIP也支持分卷压缩。在近来一段时间,ZIP加入了包括新的压缩和加密方法的新特征,不过这些新特征并没有被许多工具所支持并且没有得到广泛应用。
将unzip101h.zip中的文件复制到E:\osgearth\minizip\include;将zlib125dll.zip中文件夹dll32和static32中的lib文件和dll文件复制到E:\osgearth\minizip\lib中。Osgearth编译需要的minizip文件已经处理完成。
如果想对源代码进行编译的话,可以按照以下步骤进行:
第一步:启动CMake -gui.exe并设置文件地址,将编译地址设置为D:\zlib125\zlib-1.2.5\vs2010,然后“configure”
第二步:删除文件D:\zlib125\zlib-1.2.5\zcongf.h;
设置Cmake_install_PREFIX值为D:\zlib125\zlib-1.2.5\vs2010;然后再次“configure”
“Generate”
D:\zlib125\zlib-1.2.5\vs2010截图
第三步:打开并编译zlib.Sln。
VirtualPlanetBuilder是一种地形数据库创作工具,是能够阅读各种地理图象和高程数据并建立小面积地形数据库,乃至大规模如整个地球的庞大数据库。这些数据库可以上传到互联网,并能够提供象在线googleearth一样的风格漫游整个地球的数据库,或保持对本地磁盘高速接入等所需的专业飞行模拟器。前面所讲的VirtualPlanetBuilder建立的数据库,如果要运行该数据库产生一个可视化的场景,那么你将需要一个基于openscenegraph的应用程序。其实,VirtualPlanetBuilder本身是一个基于openscenegraph实时图形工具箱,它可以创建基于openscenegraph的二进制的最高效率的数据库。如果你的应用程序不是基于openscenegraph,而你要使用OSG中的数据库的话,那么你需要写一个后处理的工具来把该数据库从openscenegraph的格式转换为你自己的格式。VirtualPlanetBuilder已经从原来的传最初的数据叶生成工具逐渐的完善了,现在它只是其中的一个部分而已!现在官方计划进一步的对它进行扩展和完善,以便有可能创建几十千兆的数据页,并通过网上电脑间的传输来创建他们,让每台参与的工作的电脑一起来创造完整的数据库。我们也将提供对数据库的支持,以便优化低带宽限制,实现基于web数据库的三维可视化。对未来的发展详情请看:
http://www.openscenegraph.org/projects/VirtualPlanetBuilder/wiki/DevelopmentPlans
相关信息配置:
http://www.openscenegraph.org/projects/osg/wiki/Support/UserGuides/osgdem
第一步:需要编译完成OSG和GDAL,见osg和gdal编译安装部分。
第二步:下载相关的地图文件
http://www.cc.gatech.edu/projects/large_models/ps.html
第三步:Vpb安装需要插件下载
http://www.openscenegraph.org/projects/VirtualPlanetBuilder/wiki/Dependencies
squish-1.11.zip,80k
第四步:设置环境变量
第一步:下载并检查相关的版本
http://www.openscenegraph.org/svn/VirtualPlanetBuilder/trunk
下载(或者更新)完成后,打开文件夹中的news.Txt:
这里的就是版本号,文件夹的标注可能有误。
下载相关的版本:http://www.openscenegraph.org/projects/osg/wiki/Downloads/PreviousReleases
这里需要注意,osg的相关版本可能是临时版本,需要使用release版本。如果是使用http://www.openscenegraph.org/svn/VirtualPlanetBuilder/trunk进行下载的,可以使用最新的版本。
下载已经编译好了的osg生成文件,注意编译器版本和操作系统
http://openscenegraph.alphapixel.com/osg/downloads/free-openscenegraph-binary-downloads
下载debug和release两个版本。
OpenSceneGraph-3.0.1-VS10.0.30319-x86-release-12741.7z
OpenSceneGraph-3.0.1-VS10.0.30319-x86-debug-12741.7z
重命名debug\bin文件夹中gdalxx.dll为gdalxxd.dll,libexpat.dll为libexpatd.dll。将release和debug中的bin,lib,include,share,data文件夹合并,如果出现重名,将debug中的文件名在扩展名之前加d,(123.dll=123d.dll)
查看gdal的版本,查看OpenSceneGraph-3.0.1\bin\gdalxx.dll,XX就是gdal的版本。
下载编译好的文件:
http://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries
下载源文件:
http://trac.osgeo.org/gdal/wiki/DownloadSource
处理的方法参看gdal编译。
OSG_DIR值:E:\osg\OpenSceneGraph-x.x.x;(E:\osg\OpenSceneGraph\vs2010,在2010编辑中获取)
GDAL_DIR值:E:\osg\gdal-1.x.x;
PATH值中添加:%GDAL_DIR%\LIB;%GDAL_DIR%\BIN;%OSG_DIR%\INCLUDE;
%OSG_DIR%\LIB;%OSG_DIR%\BIN; %OSG_DIR%\include;%OSG_DIR%\share;%OSG_DIR%\data;
注意:有些编译环境可能需要:squish-1.11.zip,下载地址如下:
http://www.openscenegraph.org/projects/VirtualPlanetBuilder/wiki/Dependencies
编辑configure和generate,生成文件*.sln
打开:VIRTUALPLANETBUILDER.sln,修改下面文件:vpb项目下SpatialProperties.cpp文件
使用release编译,debug模式编译有错误。
Release编译结果:
将VirtualPlanetBuilder-0.9.12\vs2010\lib\Relase中的vpb.dll,vpb.lib
复制到VirtualPlanetBuilder-0.9.12\vs2010\bin\Relase中。
测试编译结果:
Cmd;
Cd x:\osg\VirtualPlanetBuilder-0.9.12\vs2010\bin\Release
Osgdem –help
出现下面的界面表明编译成功
下载相关的地图文件:
http://www.cc.gatech.edu/projects/large_models/ps.html
ps_height_16k.png,ps_texture_16k.png
使用的命令行是:
gdal_translate ps_height_16k.pngps_height_16k.tif
gdaladdo -r average ps_height_16k.tif 2 4 816 32
gdal_translate ps_texture_16k.pngps_texture_16k.tif
gdaladdo -r average ps_texture_16k.tif 2 48 16 32
osgdem --xx 10 --yy 10 -tps_texture_16k.tif --xx 10 --yy 10 -d ps_height_16k.tif -l 6 -v 0.1 -o test.ive-a test.osga
osgviewer test.ive
从http://openscenegraph.alphapixel.com/osg/downloads/openscenegraph-third-party-library-downloads
下载windows-VS10.0.30319-x86-release.7z和windows-VS10.0.30319-x86-debug.7z两个针对VS2010的压缩包。将两个压缩包的内容复制到E:\osgearth\3rdparty。
也可以下载http://members.iinet.net.au/~bchrist/3rdParty_VC10_x86_x64.zip,将x86文件中的文件复制到E:\osgearth\3rdparty。(这个压缩包的资源相对较全)
Libzip 的功能与minizip相同,但由于使用的位置不同,为了后续配置osgearth,在此进行说明:
从http://files.cnblogs.com/eaglezhao/libzip(vs10).rar下载libzip(vs10).rar,将libzip(vs10).rar中的文件复制到E:\osgearth\libzip文件夹。
第一步:安装Git-1.7.6-preview20110708.exe,默认安装。
第二步:安装TortoiseGit-1.7.4.0-32bit.msi,默认安装。
第三步:创建一个文件夹E:\osgearth\data。
第四步:下载资源
在url中输入:git://github.com/gwaldron/osgearth.git
点击“ok”,下载过程可能需要较长时间。
下载完成后,将D:\osgearth文件中所有文件复制到E:\osgearth\osgearth文件夹中。同时将D:\osgearth进行压缩备份。D:\osgearth文件将可以接收osgearth文件的更新。
从此为止,我们的osgearth环境就算搭建完成。
上一章我们做的所有工作都是为了配置OSGEarth,
VS2010的sln文件生成是OSGEarth的关键。作者在配置出现很多错误,从而导致了使用VS2010编译出现很多问题。
第一步:启动CMake -gui.exe并设置文件地址,将编译地址设置为E:\OSGEARTH\OSGEARTH\vs2010,然后“configure”
第二步:添加参数
参数名称 |
类型 |
值 |
DYNAMIC_OSGEARTH |
Bool |
On |
OSG_DIR |
Path |
E:/OSGearth/OpenSceneGraph |
添加方法:点击“Add Entry”,弹出 Add CacheEntry对话框(如下图所示)
完成后cmake参数列表顶端出现添加的两个参数:
第二步:设置相关参数
主要针对“*-NOTFOUND”参数值的参数。
参数名称 |
值 |
CMAKE_INSTALL_PREFIX |
E:/osgearth/osgearth/vs2010 |
CMAKE_LINKER |
(清空) |
CURL_INCLUDE_DIR |
E:/osgearth/3rdparty/include |
CURL_LIBRARY |
E:/osgearth/3rdparty/lib/libcurl.lib |
CURL_LIBRARY_DEBUG |
E:/osgearth/3rdparty/lib/libcurld.lib |
GDAL_INCLUDE_DIR |
E:/osgearth/gdal/include |
GDAL _LIBRARY |
E:/osgearth/gdal/lib/gdal_i.lib |
GEOS_INCLUDE_DIR |
E:/osgearth/geos/include |
GEOS _LIBRARY |
E:/osgearth/geos/lib/geos.lib |
GEOS _LIBRARY_DEBUG |
E:/osgearth/geos/lib/geosd.lib |
LIBZIP_INCLUDE_DIR |
E:/osgearth/libzip/include |
LIBZIP _LIBRARY |
E:/osgearth/libzip/lib/zip.lib |
OPENTHREADS_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/OpenThreads.lib |
OPENTHREADS _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/OpenThreadsD.lib |
OSGDB_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgDB.lib |
OSGDB_LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgDBD.lib |
OSGFX_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgFX.lib |
OSGFX _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgFXD.lib |
OSGGA_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgGA.lib |
OSGGA _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgGAD.lib |
OSGMANIPULATOR_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgManipulator.lib |
OSGMANIPULATOR _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgManipulatorD.lib |
OSGSHADOW_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgShadow.lib |
OSGSHADOW _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgShadowD.lib |
OSGSIM_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgSim.lib |
OSGSIM _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgSimD.lib |
OSGTERRAIN_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgTerrain.lib |
OSGTERRAIN _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgTerrainD.lib |
OSGTEXT_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgText.lib |
OSGTEXT _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgTextD.lib |
OSGUTIL_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgUtil.lib |
OSGUTIL _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgUtilD.lib |
OSGVIEWER_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgViewer.lib |
OSGVIEWER _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgViewerD.lib |
OSGWIDGET_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osgWidget.lib |
OSGWIDGET _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgWidgetD.lib |
OSG_GEN_INCLUDE_DIR |
E:/osgearth/OpenSceneGraph/include |
OSG_INCLUDE_DIR |
E:/osgearth/OpenSceneGraph/include |
OSG_LIBRARY |
E:/osgearth/OpenSceneGraph/lib/osg.lib |
OSG _LIBRARY_DEBUG |
E:/osgearth/OpenSceneGraph/lib/osgd.lib |
OSG_VERSION_EXE |
(清空) |
SQLITE3_INCLUDE_DIR |
E:/osgearth/sqlite/include |
SQLITE3_LIBRARY |
E:/osgearth/sqlite/lib/sqlite3.lib |
ZLIB_INCLUDE_DIR |
E:/osgearth/minizip/include |
ZLIB_LIBRARY |
E:/osgearth/minizip/LIB/zlibstat.lib |
MINIZIP_INCLUDE_DIR |
E:/osgearth/minizip/include |
MINIZIP _LIBRARY |
E:/osgearth/minizip/LIB/zlibstat.lib |
如下图:
设置完成后再次“configure”
第三步:生成vs2010文件。
点击“Generate”,结果如下:
E:\osgearth\osgearth\vs2010文件夹截图:
第一步:使用vs2010打开E:\osgearth\osgearth\vs2010\OSGEARTH.sln文件。
第二步:打开all_build工程属性,设置库目录和包含目录。
包含目录:
库目录:
保存所有文件,这样SLN文件就可以使用了。
第一步:配置系统环境变量。
新设置OSG_FILE_PATH变量,值为E:\OSGearth\OSGEARTH\data;E:\OSGearth\GDAL\data;
向PATH添加值:
E:\OSGearth\3rdParty\bin;
E:\OSGearth\OSGEARTH\bin\Debug;
E:\OSGearth\OSGEARTH\bin\Release;
第二步:使用“生成”->“批生产”,选择all_build(debug|win32和release|win32)进行生成。
在生成的过程中会提示出现以下错误:
错误提示 |
处理方法 |
无法打开包括文件:“geos/platform.h” |
将D:\geos-3.3.1\vs2010\include\geos文件夹中的文件复制到E:\osgearth\geos\include\geos中 |
无法打开包括文件:“zlib.h” |
将D:\zlib125\zlib-1.2.5\中zlib.H文件复制到E:\osgearth\libzip\include文件夹中 |
在编译过程中存在4个文件无法编译成功,但是不影响正常的测试。
第三步:修改这些错误。
上述错误的问题主要出现在E:\osgearth\osgearth\src\applications\osgearth_imageoverlay\osgearth_imageoverlay.cpp文件的36-39行。
原因是OSG_MIN_VERSION_REQUIRED(2,9,6)限制了osg的版本。本文使用了v3.0.1版,因此需要添加需要添加ImageOverlayEditor文件。
(目前还没有解决)
测试release版本:
1.打开cmd窗口,进入E:\osgearth\osgearth\vs2010\bin\Release;
2.输入命令: osgearth_viewer.exe E:\osgearth\osgearth\tests\gdal_tiff.earth;会出现一个提示
3.复制所需的dll到E:\osgearth\osgearth\vs2010\bin\Release文件夹中。可能需要重复好多次。
4.测试成功会出现下面界面:
这是个人在学习osgEarth时根据体会或从别的地方看到的做的一个简单整理,有些东东就是官方文档翻译过来的,都是根据自己的需要感觉需要记录下来什么东西就随便记录下来了,也没有个条理,都是用到哪记到哪,别见怪。对个人在初期使用osgEarth时有很多帮助,所以特发上来,希望对大家也有帮助
osgEarth学习笔记
1. 通过earth文件创建图层时,可以指定多个影像数据源和多个高程数据源,数据源的顺序决定渲染顺序,在earth文件中处于最前的在渲染时处于最底层渲染;所以如果有高低精度不同的影响数据或者高程数据,在创建earth文件时要将粗精度的数据放在上方xml节点,高精度的放在其下面的节点;
2. osgEarth自带多种驱动器,不同的驱动器驱动不同的数据源,自己也可以扩展驱动器读取相应的数据;
3. 可以通过profile属性指定数据的投影方式或者数据分页方式以及地理空间延展;osgEarth通过profile创建数据四叉树,每个四叉树节点数据瓦片通过TileKey类来标示;一个地形数据能否正常工作要看创建它的驱动器是否能够创建和对应profile兼容的数据瓦片;比如,如果要生成地球数据,就需要指定global-geodetic 或者global-mercatorprofile,相应的数据源要能够在这种profile下生成相应的地形数据;
4. 通过earth文件,最基本的也是最主要的功能是我们可以指定生成地形的坐标属性(地理坐标或投影坐标)影像数据、高程数据、矢量数据、模型数据、以及缓冲位置,通过这些基本要素就可以轻易生成我们想要的地形;
5. osgEarth只能使用16或32位的高程数据源;
6. 如果直接使用原始的影像、高程以及矢量数据,可以用GDAL驱动器,在这种情况下需要注意几个性能的问题。第一,将数据源预先进行坐标变换,变换为目标地形坐标,否则osgEarth会对源数据进行坐标投影变换,这将降低数据的加载及处理速度。如果预先已经将数据源进行正确的坐标变换,osgEarth就可以省略这个步骤,从而提高其实时处理速度;第二,预先对影像数据进行瓦片处理,比如tiff格式的影像数据,它是逐行扫描存储的,而osgEarth是每次读取一个瓦片数据,如果预先对影像数据进行瓦片处理,在动态过程中osgEarth就不需要每次读取整个大块影像数据然后提取其需要的瓦片数据,而可以直接读取相应的瓦片数据即可,这样就大大提高了瓦片数据的读取速度。可以通过gdal_translate工具对影像数据进行瓦片处理;第三,创建金字塔数据集可以使osgEarth读取数据更加高效,可以用gdaladdo工具创建金字塔数据集;总之,要想提高osgEarth的处理效率,就要预先创建高效的数据瓦片结构,除了用gdal、vpb等工具外,也可以通过osgEarth的数据缓冲机制创建预处理的瓦片数据集。比如我们可以创建一个如下的earth文件将数据缓冲到指定的目录:
这种缓冲方式只能缓冲在执行该文件时浏览过的地形数据,而不能自动缓冲所有的数据,要想自动缓冲所有的数据,就需要用到osgEarth自带的一个工具,osgearth_seed,通过osgearth_seed --max-level 7 bluemarble.earth将数据全部缓冲到指定位置,通过这种方式缓冲后,我们就拥有了一个完整的TMS数据源,我们可以直接通过文件目录的方式访问该数据源,也可以将该数据源拷贝到我们自己的本地web服务目录下。详情见http://osgearth.org/wiki/DataPreparation。除此之外还可以用MapTiler以及TileCache工具创建瓦片数据源,用它创建的瓦片数据源也可以直接在osgEarth下使用;
7. 可以通过两种方式将osgEarth集成到我们自己的osg应用程序中,第一种就是直接通过earth文件的方式,直接将earth文件读入作为一个osg节点加入场景即可,另外一种方式就是通过osgEarth的API。通过API的方式大体需要以下几个步骤:创建map对象——创建影像数据层——创建高程数据层——将影像数据层以及高程数据层加入到map对象——根据前面创建的map对象创建mapNode节点——将mapNode节点加入到场景;示例见http://osgearth.org/wiki/DevelopersGuide。无论是通过earth文件创建的地形还是通过API创建的地形,我们都可以在运行时对其进行修改,如果是用earth文件创建的地形,需要先找到该earth文件对应的mapNode,通过以上两种方式创建的mapNode,我们可以对地形进行修改操作,如添加新的影像、高程数据,移除特定的影像、高程数据,重新制定影像、高程数据的顺序等;
8. 如果我们的地形用的是地心坐标系,可以会碰到当相机距离地面非常近的时候地形被裁减掉的问题,要解决这个问题我们可以通过设置相机的远近裁剪比率或者创建AutoClipPlaneHandler来解决。AutoClipPlaneHandler可以动态监视相机,当相机距离地面很近时动态调整相机的近裁减面;
9. 在地形上放置模型对象时可以使用ObjectPlacer类,通过该类可以直接通过经纬度坐标进行模型的放置操作;
10. osgEarth的目标是能够在osg中开发基于地理信息的应用,能够方便地浏览地理模型数据,能够与开放标准的地理数据兼容;osgEarth渲染地形的模式分为两种:实时在线模式(直接使用原始数据渲染生成)以及离线模式(数据预处理成瓦片数据或地形数据库);
11. osgEarth使用于以下几种情况的应用:快速方便地运行地形地图数据;使用开放标准的地形地图数据,如WMS、TMS、WCS等;通过Web服务的方式集成本地存储的地形地图数据;系统要求以瘦客户端的方式运行;经常处理随着时间改变的数据;集成商业数据;
12. 在使用osgEarth自带的漫游器EarthManipulator时,如果给漫游器设置一个矩阵或者给漫游器设置一个TetherNode然后再解除,然后再移动相机位置,这时计算出的Center会有一个跳跃,然后才正常,造成这个问题的原因是给漫游器设置了参考节点(通过SetNode函数)造成的,设置了参考节点后漫游器要根据参考节点重新计算Center和相机姿态等参数,在以上两种情况发生时,在重新计算Center时出现了偏差,要想避免以上两种情况下造成的移动异常,可以不让相机结合参考节点重新计算Center,即将Pan函数中的recalculateCenter注释掉即可;
13. Map的类型分为geocentric和projected两种类型,即地心方式和投影方式,要建立圆形地球就用geocentric类型,用这种类型如果要制定profile,只有geodetic(WGS84投影)和mercator(墨卡托投影)两种模式;
14. Earth文件详解:
//特定驱动器属性设置,驱动器分为影像/高程驱动器、模型驱动器、特征驱动器、缓冲驱动器以及地形引擎驱动器5大类;
//影像/高程驱动器
element {
stroke: #FF0000;
stroke-width: 2.0;
stroke-opacity: 0.5;
}
element {
fill: #FF0000;
fill-opacity: 0.5;
}
world {
fill: #FFFF00;
fill-opacity: 0.5;
}
world {
fill: #FF0000;
fill-opacity: 0.5;
}
//ArcGIS驱动器,是从ESRI的服务器读取影像数据
//复合驱动器,可以将多个影像数据源(可以使用各自不同的驱动器)复合成一个逻辑图层,其实是一个伪装的驱动器,不是真实的驱动器
...
...
...
//GDAL驱动器,使用该驱动器,指定源数据url时可以指定文件也可以指定某个目录(不必将所有的文件都打包成一个文件),如果指定了目录,还可以指定要加载该目录下某些类型的文件(通过指定扩展名),此外,如果指定的是目录,系统递归遍历该目录下的所有文件将要加载的文件生成一个逻辑图层,需要注意的是,该目录下所有的数据必须是统一的坐标系统以及同样的波段和波段插值;基于性能的考虑,最好对源数据预先进行分块分级处理以及坐标重投影预处理,这样可以大大提高系统在运行时的性能。如果系统读取到的源数据与运行时要求的投影方式不匹配,系统就会在运行时对数据进行重投影,这样就会降低系统性能,如果想在这种情况下提高系统性能,可以让系统缓存重投影后的数据:
//通过指定目录的方式加载高程数据示例:
//osg驱动器,直接通过osg的文件读写插件读取相应类型的影响数据或高程数据
//tilecache驱动器,读取tilecache磁盘缓存数据,通过tilecache工具可以从WMS服务器创建或缓存地图数据到磁盘,然后通过该驱动器进行离线读取。
//tileservice驱动器,从NASA服务器读取数据
//tms驱动器,通过tms服务的方式读取数据
//wms驱动器,通过wms服务的方式读取数据
//VPB驱动器,从vpb生成的地形数据库读取相应的影像和高程数据,注意,osgEarth只能读取适用VPB使用—terrain选项创建的地形数据库。这样一来我们就可以同时使用vpb的地形数据库以及原始的影像、高程数据,可以在不改变现有vpb地形数据的基础上在已有的vpb地形上叠加另外的影像数据。
//模型驱动器
//feature_geom驱动器,该驱动器就是将矢量数据创建成几何对象进行渲染
//feature_overlay驱动器,该驱动器采用osgSim::OverlayNode将矢量数据作为投影纹理覆盖到地形上。这种覆盖节点的方式对于平面投影坐标模式是很适合的,但对于球体地心坐标来说有一定限制,通过覆盖节点的方式将矢量数据投影成纹理只能覆盖不到一半地球大小,而且在背面会显示穿透效果。
//feature_stencil驱动器,该驱动器采用模板缓冲技术将矢量数据覆盖到地形上
roads {
stroke: #ffff00;
stroke-width: 10;
}
Earth文件的完整示例见earthFile-template.earth文件
15. 注意,earth文件名不能有”-”横线
OSGearth,贴近球面时鼠标无法准确的控制视点位置 (2010-11-09 21:58:15)转载 分类: OSG
http://bbs.osgchina.org/viewthread.php?tid=2793&highlight=�ӵ�+��
osg::ArgumentParserarguments(&argc,argv);
osgViewer::Viewerviewer(arguments);
viewer.setUpViewOnSingleScreen(0);
viewer.setCameraManipulator(newosgGA::TrackballManipulator());
std::stringmodelPath =
"F:\\google.earth";
{
osg::ref_ptr
viewer.setSceneData(node.get());
}
//render a frame
viewer.realize();
while(!viewer.done())
{
viewer.frame();
}
使用的googleearth的图层信息,拉近了发现鼠标操作的高度似乎要低于实际图层所高度,低视角转动地球时无法准确控制找到自己所需的位置。
哪位大侠帮忙告诉一下,在哪里设置鼠标控制点跟球面视角高度保持一致啊?
Trackball不太适合用来浏览地球,可以考虑用TerrainManipulator或者osgEarth自带的EarthManipulator
用EarthManipulator解决了鼠标和滚轮的问题!
是这样解决的:
std::string modelPath =
"F:\\word_wind.earth";
{
// create an osgEarth node. Add it tothe scene graph and let the ref pointer go out of scope.
osg::ref_ptr
viewer.setSceneData(node.get());
}
manip->getSettings()->bindMouseDoubleClick(
osgEarthUtil::EarthManipulator::ACTION_GOTO,
osgGA::GUIEventAdapter:EFT_MOUSE_BUTTON);
// add our fly-to handler
viewer.addEventHandler(newFlyToViewpointHandler( manip ));
// add some stock OSG handlers:
viewer.addEventHandler(newosgViewer::StatsHandler());
viewer.addEventHandler(newosgViewer::WindowSizeHandler());
viewer.addEventHandler(newosgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));