智能指针使用:

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的更多相关文章

  1. OSG计时器与时间戳

    static osg::Timer* sendMsgTimer = new osg::Timer; if (sendMsgTimer->time_m()>100)//100ms {// d ...

  2. OSG消息机制之消息分析

    OSG消息接收在头文件有各种事件的相关参数

  3. OSG消息机制之事件处理概述

    OSG的消息机制包括好多个头文件预定义及多个类. 首先,消息接收相关的类当属osgGA::GUIEventHandler和osgGA::GUIEventAdapter这两个类了.前者处理OSG程序与用 ...

  4. OSG 3D场景渲染编程概述

    OSG是Open Scene Graphic的缩写,是基于C++平台的使用OpenGL技术的开源3D场景开发. vs环境安装或者是在Ubuntu中环境的安装网上教程很多,都是大同小异的,认真操作容易成 ...

  5. OSG透明代码

    //关闭灯光 state->setMode(GL_LIGHTING,osg::StateAttribute::OFF|osg::StateAttribute::PROTECTED); //打开混 ...

  6. osg中内嵌QtBrowser

    最近看到osg Examples的osgQtBrowser例子, 觉得效果还是挺好的, 想加入到自己的项目中来, 就这样的搬运工作也出问题了-__- 拷过来的是这一段: osg::ref_ptr< ...

  7. osg 示例程序解析之osgdelaunay

    osg 示例程序解析之osgdelaunay 转自:http://lzchenheng.blog.163.com/blog/static/838335362010821103038928/ 本示例程序 ...

  8. 细读cow.osg

    细读cow.osg 转自:http://www.cnblogs.com/mumuliang/archive/2010/06/03/1873543.html 对,就是那只著名的奶牛. //Group节点 ...

  9. OSG中找到特定节点的方法

    OSG中找到特定节点的方法 转自:http://38288890.blog.163.com/blog/static/19612845320072721549504/ 为了在OSG中找到需要的节点并对节 ...

  10. OSG的节点访问

    OSG的节点访问 转自:http://www.cnblogs.com/kanego/archive/2011/09/27/2193484.html SG中节点的访问使用的是一种访问器模式. 一个典型的 ...

随机推荐

  1. 获取服务器端ip

    System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]

  2. php+正则将字符串中的字母数字和中文分割

    原文出处 如果一段字符串中出现字母数字还有中文混排的情况,怎么才能将他们区分开呢,经过一番思索,得到了如下代码,分享给大家 如:$str="php如何将字 符串中322的字母数字sf f45 ...

  3. C++ 简单的入门语法

    入门的hello world using namespace std; 是使用命名空间,有点像java里面的引入包main 方法和java一样是主入口,有且只有一个,因为是int ,所以还必须返回一个 ...

  4. oracle 数据库关闭的的几种方式总结

    shutdown的几种方式,shutdown abort的一些弊端有哪些   1.shutdown normal        正常方式关闭数据库.    2.shutdown immediate   ...

  5. JavaScript Array(数组) 对象

    更多实例 合并两个数组 - concat() 合并三个数组 - concat() 用数组的元素组成字符串 - join() 删除数组的最后一个元素 - pop() 数组的末尾添加新的元素 - push ...

  6. asp.net 在线人数统计\页面访问量

    1.新建网站,添加几个窗体.webForm1.aspx ,ViewStateForm.aspx 2.在网站的根目录下添加全局应用程序类“Global.aspx” .(重要) 3.在“Global.as ...

  7. JavaScript学习笔记之原型对象

    本文是学习<JavaScript高级程序设计>第六章的笔记. JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返 ...

  8. 借助Q.js学习javascript异步编程。

    金字塔式 //add1 function step1(n, callback) { setTimeout(function(){ callback.call(null, n + 1); }, 100) ...

  9. 前端,移动开发者,UI须懂: 不同设备的之间的尺寸

    在开发前端,移动APP,以及设计UI的时候,我们经常会去搜索不同设备之间的尺寸,来开始自己的工作,以保证显示效果达到更好,这里收集了现在常用的设备. 设备更新速度快,有些没罗列的,大家可以谷歌或者百度 ...

  10. mysql 语句资料总结

    一.UNION命令 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SE ...