osgEarth例子
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/StateSetManipulator>
#include <osgGA/TrackballManipulator>
#include <osgEarth/Map>
#include <osgEarth/MapNode>
#include <osgEarthDrivers/tms/TMSOptions>
#include <osgEarthDrivers/model_feature_geom/FeatureGeomModelOptions>
#include <osgEarthDrivers/feature_ogr/OGRFeatureOptions>
#include <osgEarthDrivers/cache_filesystem/FileSystemCache>
#include <osgEarthUtil/EarthManipulator>
#include <osgEarthUtil/GeodeticGraticule>
#include <osgEarthUtil/LatLongFormatter>
#include <osgEarthUtil/Controls>
#include <osgEarthUtil/MouseCoordsTool>
#include <osgEarthUtil/AutoClipPlaneHandler>
#include <osg/PositionAttitudeTransform>
#include <osg/Group>
#include <osg/Node>
#include <osgDB/ReadFile>
//初始化影像、地形
void initImageAndElevation(osgEarth::Map* map)
{
//影像
osgEarth::Drivers::TMSOptions imgOption;
imgOption.url()="D:/CacheData/OUTDATA/JiLinImage/tms.xml";
//imgOption.url()="http://readymap.org/readymap/tiles/1.0.0/7/";
map->addImageLayer( new osgEarth::ImageLayer( "image", imgOption ) );
//高程
osgEarth::Drivers::TMSOptions elvOption;
elvOption.url()="D:/CacheData/OUTDATA/JiLinElevation/tms.xml";
//elvOption.url()="http://readymap.org/readymap/tiles/1.0.0/9/";
map->addElevationLayer( new osgEarth::ElevationLayer( "elevation", elvOption ) );
}
//初始化省界国界
void initBoundaries(osgEarth::Map* map)
{
osgEarth::Drivers::FeatureGeomModelOptions worldBoundaries;
osgEarth::Drivers::OGRFeatureOptions ogrOptions;
ogrOptions.url()="world.shp";
worldBoundaries.compilerOptions()=ogrOptions;
//worldBoundaries.styles().
map->addModelLayer(new osgEarth::ModelLayer("world", worldBoundaries));
}
//初始化事件处理器
void initEventHandler(osgViewer::Viewer* viewer,osgEarth::MapNode* mapNode)
{
//鼠标位置信息显示
osgEarth::Util::Formatter* formatter = new osgEarth::Util::LatLongFormatter();
osgEarth::Util::LabelControl* readout = new osgEarth::Util::LabelControl();
osgEarth::Util::ControlCanvas::get( viewer, true )->addControl( readout );
osgEarth::Util::MouseCoordsTool* tool = new osgEarth::Util::MouseCoordsTool( mapNode );
tool->addCallback( new osgEarth::Util::MouseCoordsLabelCallback(readout, formatter) );
viewer->addEventHandler( tool );
// add the state manipulator
viewer->addEventHandler( new osgGA::StateSetManipulator(viewer->getCamera()->getOrCreateStateSet()) );
// add the thread model handler
viewer->addEventHandler(new osgViewer::ThreadingHandler);
// add the window size toggle handler
viewer->addEventHandler(new osgViewer::WindowSizeHandler);
// add the stats handler
viewer->addEventHandler(new osgViewer::StatsHandler);
// add the record camera path handler
viewer->addEventHandler(new osgViewer::RecordCameraPathHandler);
// add the LOD Scale handler
viewer->addEventHandler(new osgViewer::LODScaleHandler);
// add the screen capture handler
viewer->addEventHandler(new osgViewer::ScreenCaptureHandler);
}
//初始化操纵器
void initManipulator(osgViewer::Viewer* viewer,osgEarth::Map* map)
{
//操纵器
osgEarth::Util::EarthManipulator* em=new osgEarth::Util::EarthManipulator();
//赤道半径
double equatorRadius=map->getSRS()->getEllipsoid()->getRadiusEquator();//6378137.0
//初始视点正对中国北京
em->setHomeViewpoint(osgEarth::Util::Viewpoint(116.3,39.9,0,0,-90,equatorRadius*4));
viewer->setCameraManipulator(em);
//定位吉林
em->setViewpoint(osgEarth::Util::Viewpoint(126,43,0,0,-90,5e4), 5);//5s
}
//初始化其他杂项
void initOther(osgViewer::Viewer* viewer,osgEarth::MapNode* mapNode)
{
//反锯齿
osg::DisplaySettings::instance()->setNumMultiSamples( 4 );
//设置最大PagedLOD节点数目
//viewer->getDatabasePager()->setTargetMaximumNumberOfPageLOD(10);
//近地面自动裁剪AutoClipPlaneCullCallback
viewer->getCamera()->addCullCallback( new osgEarth::Util::AutoClipPlaneCullCallback(mapNode) );
//绘制经纬度网格
//osgEarth::Util::GeodeticGraticule* gr = new osgEarth::Util::GeodeticGraticule( mapNode );
//root->addChild(gr);
}
void main(){
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
//osgViewer::Viewer* viewer = new osgViewer::Viewer;
osg::Group* root = new osg::Group();
osg::Node* tankNode = NULL;
osg::Vec3 tankPosit;
osg::PositionAttitudeTransform* tankXform;
//缓存
osgEarth::Drivers::FileSystemCacheOptions cacheOptions;
cacheOptions.rootPath() = "./cache";
osgEarth::MapOptions mapOptions;
mapOptions.cache() = cacheOptions;
//osgEarth::Map* map = new osgEarth::Map(mapOptions);
//osgEarth::MapNode* mapNode = new osgEarth::MapNode( map );
osg::Node* configEarth = osgDB::readNodeFile("config.earth");
osgEarth::MapNode* mapNode = osgEarth::MapNode::findMapNode( configEarth );
osgEarth::Map* map = mapNode->getMap();
//关闭光照
mapNode->getOrCreateStateSet()->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
viewer->setSceneData( root );
root->addChild(mapNode);
//读取模型
tankNode = osgDB::readNodeFile("Models/t72-tank/t72-tank_des.flt");
tankXform = new osg::PositionAttitudeTransform();
root->addChild(tankXform);
tankXform->addChild(tankNode);
tankPosit.set(5,0,0);
tankXform->setPosition( tankPosit );
viewer->setCameraManipulator(new osgGA::TrackballManipulator());
//地形影像
//initImageAndElevation(map);
//矢量
//initBoundaries(map);
//操纵器
initManipulator(viewer, map);
//事件处理(键盘鼠标)
initEventHandler(viewer, mapNode);
//其他
initOther(viewer, mapNode);
viewer->realize();
while( !viewer->done() )
{
viewer->frame();
}
}
osgEarth例子的更多相关文章
- [OSG][osgEarth]osgEarth例子程序简介
1.osgearth_graticule:生成经纬线. 2.osgearth_annotation:各类标注(点.线.面.模型.文本等). 3.osgearth_city:加载一个城市三维模型,可以浏 ...
- [原][OSG][osgEarth]osgEarth例子程序简介
1.osgearth_graticule:生成经纬线. 2.osgearth_annotation:各类标注(点.线.面.模型.文本等). 3.osgearth_city:加载一个城市三维模型,可以浏 ...
- osgearth各个例子功能概述
osgearth各个例子功能概述 转自:http://blog.csdn.net/wl198302/article/details/21177309 最近在学习osgearth,对其还不是很理解,有些 ...
- osgEarth的agglite插件使用例子feature_rasterize.earth
<!-- osgEarth Sample Demonstrates use of the "agglite" feature rasterization driver. -- ...
- osgearth_city例子总结
osgearth_city例子总结 转自:http://blog.csdn.net/taor1/article/details/8242480 int main(int argc, char** ar ...
- osgEarth基础入门
osgEarth基础入门 2015年3月21日 16:19 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件 ...
- OSGEARTH三维地形开源项目
第一章 OSGEarth介绍 第二章 OSGEarth编译环境配置 OSGEarth的编译环境配置随着版本的不同.运行平台的不同,也有很大的差异.本章主要以Windows XP SP3(x86 ...
- osgEarth基础入门(转载)
osgEarth基础入门 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件(包括GDAL,ogr,WMS,T ...
- OSG和osgearth显示中文(转载)
osgEarth支持中文过程详解 OSG和osgearth显示中文 一.知识储备 要想很好的理解和解决这个问题,首先要了解什么是多字节和宽字节.说实话我之前也知道这两个字节到底有什么区别,只是简单 ...
随机推荐
- BZOJ-1196 公路修建问题 最小生成树Kruskal+(二分??)
题目中一句话,最大费用最小,这么明显的二分的提示(by 以前morestep学长的经验传授)...但完全没二分,1A后感觉很虚.. 1196: [HNOI2006]公路修建问题 Time Limit: ...
- NOIP 2012 T5 借教室 [洛谷P1083]
题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...
- linux java cpu 100%
1.用top找到最耗资源的进程id [ bin]# toptop - 16:56:14 up 119 days, 6:17, 7 users, load average: 2.04, 2.07, 2. ...
- eclipse下载
http://www.eclipse.org/downloads/eclipse-packages
- easyUI框架之学习记录汇总
在添加完之后,可以使用 $.parser.parse();这个方法进行处理:(1) 对整个页面重新渲染: $.parser.parse(); (2) 渲染某个特定的objectvar targetOb ...
- c# 闭包 小例
class Program { static void fnnn() { string[] k = new string[] { "x", "y", " ...
- App接口中json方式封装通信接口
封装json通信接口的类 <?php class Response{ /** * 按json方式输出通信数据 * @param integer $code状态码 * @param string ...
- yii框架常用url地址
调用YII框架中 jquery:Yii::app()->clientScript->registerCoreScript('jquery'); framework/web/j ...
- spring mvc静态资源文件的引用
在页面的<title>下 <link rel="stylesheet" href="<%=request.getContextPath()%> ...
- Ubuntu 为网卡配置静态IP地址
为网卡配置静态IP地址编辑文件/etc/network/interfaces:sudo vi /etc/network/interfaces并用下面的行来替换有关eth0的行:# The primar ...