osg
智能指针使用:
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>
--dem <filename> 功能 读取纹理文件,比如:osgViewer --image Images/skymap.jpg 以高程图的形式渲染一个镜像/DEM 比如osgViewer --dem a.img -h或--help 命令行参数功能帮助
--help-env 所有可用的环境变量帮助
--help-keys 所有可用键帮助
--help-all 展示所有帮助信息
--SingleThreaded 为viewer选择单线程模式
--CullDrawThreadPerContext 为viewer选择CullDrawThreadPerContext线程模式 --DrawThreadPerContext 为viewer选择DrawThreadPerContext线程模式
--CullThreadPerCameraDrawThreadPerContext 为viewer选择—CullThreadPerCameraDrawThreadPerContext线程模式
百度文库用户有奖调查
1/3
想用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将矢量数据作为投影纹理覆盖到地形上。这种覆盖节点的方式对于平面投影坐标模式是很适合的,但对于球体地心。
2/3
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() = "http://tile.openstreetmap.org/";
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 );
osg的更多相关文章
- OSG计时器与时间戳
static osg::Timer* sendMsgTimer = new osg::Timer; if (sendMsgTimer->time_m()>100)//100ms {// d ...
- OSG消息机制之消息分析
OSG消息接收在头文件有各种事件的相关参数
- OSG消息机制之事件处理概述
OSG的消息机制包括好多个头文件预定义及多个类. 首先,消息接收相关的类当属osgGA::GUIEventHandler和osgGA::GUIEventAdapter这两个类了.前者处理OSG程序与用 ...
- OSG 3D场景渲染编程概述
OSG是Open Scene Graphic的缩写,是基于C++平台的使用OpenGL技术的开源3D场景开发. vs环境安装或者是在Ubuntu中环境的安装网上教程很多,都是大同小异的,认真操作容易成 ...
- OSG透明代码
//关闭灯光 state->setMode(GL_LIGHTING,osg::StateAttribute::OFF|osg::StateAttribute::PROTECTED); //打开混 ...
- osg中内嵌QtBrowser
最近看到osg Examples的osgQtBrowser例子, 觉得效果还是挺好的, 想加入到自己的项目中来, 就这样的搬运工作也出问题了-__- 拷过来的是这一段: osg::ref_ptr< ...
- osg 示例程序解析之osgdelaunay
osg 示例程序解析之osgdelaunay 转自:http://lzchenheng.blog.163.com/blog/static/838335362010821103038928/ 本示例程序 ...
- 细读cow.osg
细读cow.osg 转自:http://www.cnblogs.com/mumuliang/archive/2010/06/03/1873543.html 对,就是那只著名的奶牛. //Group节点 ...
- OSG中找到特定节点的方法
OSG中找到特定节点的方法 转自:http://38288890.blog.163.com/blog/static/19612845320072721549504/ 为了在OSG中找到需要的节点并对节 ...
- OSG的节点访问
OSG的节点访问 转自:http://www.cnblogs.com/kanego/archive/2011/09/27/2193484.html SG中节点的访问使用的是一种访问器模式. 一个典型的 ...
随机推荐
- js request
比如你要获取aaa.aspx?id=2 使用方法为:var id= request('id');
- sqlserver 时间 格式化
0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM) 1 101 美国 mm/dd/yyyy ...
- node 搭建开发框架express
参考地址: http://www.itnose.net/detail/6095003.html 开发环境 E:\project> node -v v0.10.30 E:\project> ...
- [转帖]音响及DarBee
红外与蓝牙的差别 1.距离 红外:对准.直接.1—2米,单对单 红外线可以用你的手机摄像头看到 蓝牙:10米左右,可加强信号,可以绕弯,可以不对准,可以不在同一间房间,链接最大数目可达7个,同时区分 ...
- 菜鸟学开店—自带U盘的打印机
本文旨在提供最简单.便宜.有效的解决方案,解决普通用户最困扰的问题.今天提供普通用户一个低价的小票打印机驱动安装解决方案 相信很多用户都碰到过这种情况,电脑的重装了系统,打印机的驱动没有备份,要用打印 ...
- Eclipse vs IDEA快捷键对比大全(win系统)
花了几天时间熟悉IDEA的各种操作,将各种快捷键都试了一下,感觉很是不错! 以下为我整理了一下开发过程中经常用的一些Eclipse快捷键与IDEA的对比,方便像我一样使用Eclipse多年但想尝试些改 ...
- 段落排版--中文字间距、字母间距(letter-spacing, word-spacing)
中文字间隔.字母间隔设置: 如果想在网页排版中设置文字间隔或者字母间隔就可以使用 letter-spacing 来实现,如下面代码: h1{ letter-spacing:50px; } ... ...
- asp.net发布和更新网站
我们一般使用ftp软件来更新网站,而更新之前的一个步骤就是发布项目.以下将讲解asp.net mvc如何发布网站. 打开项目 右键点击项目,选择“发布” 第一次发布前,需要配置一下发布配置文件:点击” ...
- 给表格设置border还可以这样玩
<table width="100%" border="0" cellpadding="0" cellspacing="1& ...
- 【POJ1195】【二维树状数组】Mobile phones
Description Suppose that the fourth generation mobile phone base stations in the Tampere area operat ...