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中节点的访问使用的是一种访问器模式. 一个典型的 ...
随机推荐
- ST3破解命令
open terminal and input it! printf '\x39' | dd seek=$((0x6f35)) conv=notrunc bs=1 of=/Applicatio ...
- oracle还原数据库及遇到的问题
1. 第一:用安装数据库时的管理员用户登录:创建一个新的用户,如: //创建用户123密码456 create user 123 identified by 456;第二:授权,赋予dba的权限 gr ...
- 增强iOS应用程序性能的提示和技巧(25个)
转自 http://www.cocoachina.com/newbie/basic/2013/0522/6259.html 在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的 ...
- xml有哪些解析技术?区别是什么?
xml有哪些解析技术?区别是什么? Answer: 有DOM,SAX,STAX等 (1):DOM:处理大型文件时其性能下降的非常厉害.这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且D ...
- java_设计模式_装饰者模式_Decorator Pattern(2016-07-28)
装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户 ...
- Linux抓包工具tcpdump详解
tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具. tcpd ...
- VC++读取资源中文件
//查找目标资源 HRSRC hResource = FindResource(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MAINPROG), TEXT(& ...
- html中的空格可以用什么代替
半角空格用 代替,全角的空格可以直接在网页里生效. 打全角空格的两种方法:1.智能ABC按v1,选择第一个2.按shift+空格切换输入法的“半.全角”状态为全角再按空格
- web版扫雷小游戏(二)
接上篇~~第一次写这种技术博客,发现把自己做的东西介绍出来还是一件脑力活,不是那么轻松啊,好吧,想到哪写到哪,流水记录之,待完成之后再根据大家的意见进行修改吧. 游戏实现 根据对扫雷游戏的体验和分析, ...
- 定义文字用em、rem,效果和px一样
1em=16px font-size: 2.4rem;/*2.4 × 10px = 24px*/