下载此文档

OSG学习过程中的笔记.pdf


文档分类:外语学习 | 页数:约21页 举报非法文档有奖
1/21
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/21 下载此文档
文档列表 文档介绍
该【OSG学习过程中的笔记 】是由【青山代下】上传分享,文档一共【21】页,该文档可以免费在线阅读,需要了解更多关于【OSG学习过程中的笔记 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..一旋转其中trans->setMatrix(osg::Matrix::translate(0,0,20));就是用来平移物体,这个表示象Z轴正方向平移也就是屏幕正上方。osg::Matrix::scale(,,)表示缩放的比例,也就是原来物体的一般大小osg::Matrix::rotate(osg::DegreesToRadians(),0,1,0)该方法参数分别表示角度,x,y,z当xyz其中有值是那么物体会绕着物体旋转。当角度为正值的时候,物体绕着x,y,z箭头指向向右旋转,否则物体绕着x,y,z箭头指向向左旋转osg笔记(一)2011-07-0519:37:29|分类:OSG|标签:|字号大中小订阅场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息。根节点和各个组节点都可以有零个(实际上是没有执行任何操作)或多个子成员。在场景图形的最底部,各个叶节点包含了构成场景中物体的实际几何信息。Osg程序使用组节点来组织和排列场景中的几何体。场景图形通常包含了多种类型的节点以执行各种各样的用户功能,例如开关节点可以设置其子节点可用或不可用,细节层次节点(LOD)可以根据观察者的距离调用不同的子节点,变换节点可以改变子节点几何体的坐标变换状态。场景图形特征::..,还兼备以下的附加特征和功能::,投影面剔除和隐藏面剔除。::全特征文字支持,渲染特效的支持,渲染优化,3d模型文件读写支持,::Ansi标准C++C++标准模板库设计模式Osg命名****惯:命名空间:小写字母开头,然后大写字母避免混淆。类:大写字母开头,每个单词首字母大写。类方法:小写字母开头,此后每个单词首字母大写。类成员:同上模板:小写字母,多个单词之间使用下划线分隔。静态量:静态量和函数的名称使用s_开头全局量:用g_开头组件::提供了基本的场景图形和渲染功能,以及3d图形程序所需的某些特定功能实现。包括::..:包含了用于创建场景图形的场景图形节点类,用作向量和矩阵运算的类,几何体类,以及用于描述和管理渲染状态的类,3d图形程序所需的典型功能类,例如命令行参数解析,动画路径管理,以及错误和警告信息类。:osg工具库包含的类和函数,可以用于场景图形及其内容的操作,场景图形数据统计和优化,以及渲染器的创建。它还包括了几何操作的类,例如delaunay三角面片化,三角面片条带化,纹理坐标生成等。:建立和渲染3d数据库的类和函数:允许用户程序加载,使用和写入3d数据库,它采用插件管理的架构。osgDB维护插件的信息注册表,并负责检查将要被载入的osg插件接口的合法性。OsgDB::DatabasePager实现应用程序从文件中读取各部分数据库信息时,在不干扰当前渲染的前提下以后台线程的方式进行。:包含了场景中视口及可视化内容的管理类。定义了一些视口类,可以将osg集成到许多视窗设计工具中,如MFC,win32等。:用于改写界面事件。:扩展了核心osg场景图形节点类的功能,以提高高级节点类型和渲染特效。包括如下库:扩展了Nodes,Drawables和StateAttributes。由两部分组成,NodeKit本身,。有以下的几种NodeKits::提供了额外的场景图形节点,以便于特效的渲染,例如异向光照,凹凸贴图,卡通着色等。:提供了基于例子的渲染特效。如爆炸,火焰,烟雾。:提供了仿真系统中以及渲染OpenFlight数据库所需的特殊渲染功能,例如地形高程图,光点节点,DOF变换节点等。:此类库提供了向场景中添加文字的得力工具,可以完全支持TrueType字体。:提供了渲染高度场数据的能力。:提供了支持阴影渲染的框架结构。:其中包含了2d图像和3d模型文件的读写功能库。:使得osg易于与其他的开发环境集成。为了确保osg可以在更多环境中运行,osg提供了一个与语言无关的,可供运行时访问的接口。OsgIntrospection库允许用户软件使用反射式和自省式的编程范式与osg进行交互。:提供了实用的功能函数和正确使用osg的例子。:。也可以用这个程序实现包的分解和列表。:..:这个程序用于转换文件格式。。:用于将高程图等高程数据及图像数据转化成分页的地形数据库。场景图形类:osg库osg::Node:所有场景图形类均继承自此类。Node:场景图形中所有节点的基类。包含了用于场景图形遍历,拣选,程序回调,以及状态管理的方法。Group:所有可分支节点的基类。Geode:相当于osg中的叶节点(geometrynode)。没有子节点,但是包含了osg::Drawable对象,此中存放了将要被渲染的几何体。LOD:此类根据观察点与图像子节点的距离选择显示子节点。通常使用它来创建场景中物体的多个显示层级。MatrixTransform:包含了用于实施子节点几何体的空间转换的矩阵,以实现场景对象的旋转,平移,缩放,倾斜和映射等操作。Switch:用布尔模板来允许或禁止子节点的运作。其他的如:Sequence,PositionAttitudeTransform等几何体类:osg库Geode:osg的叶节点,包含了渲染用的几何数据,使用以下类实现几何数据的存储:Drawable:用于存储几何数据信息的基类,Geode维护了一个Drawable的列表。纯虚类无法实例化,必须实现派生类,如:Geometry,或者ShapeDrawable(允许用户绘制预定义的几何形状,如球,圆锥,矩形体等)。Geometry:与PrimitiveSet类相关联,实现了对opengl顶点数组功能的高级封装。保存了顶点数组的数据,纹理坐标,颜色以及法线数组。PrimitiveSet:提供了opengl顶点数组绘图命令的高层次支持。用户可以从Geometry中获得保存的数据,再使用这个类制定要绘制的几何体数据的类型。Vector类:支持float和double类型。Array类:数组类型。状态管理类:osg库保存场景所需的opengl渲染状态,状态集合StateSet:osg在此类中保存一组定义状态数据(模式和属性)。场景图形中的任何一个Node都可与StateSet相关联。:..模式:与glEnable和glDisable相类似。用Osg::StateSet::setMode()可在StateSet中保存一个模式信息。属性:用于制定状态信息,osg::StateSet::setAttribute()在StateSet中保存属性信息。纹理模式和属性:StateSet类方法的setTextureMode和setTextureAttribute进行设置。继承标记:用于标志量的操作。用于控制场景图形遍历中的状态值。osgViewer库包含了以下三个可能用到的视口类:SimpleViewer:负责管理单一场景中的单一视口。使用SimpleViewer时,应用程序应当创建一个窗口并设置当前的图形上下文。Viewer:用于管理多个同步摄像机,他们将从多个方向渲染单一的视口。CompositeViewer:此类支持同一窗口的多个视口,也支持不同场景的多个摄像机。其他实用类:osg库涉及到osg的内存引用计数策略。Referenced:所有场景图形节点和osg的许多其他对象的基类。它实现了一个用于跟踪内存使用情况的引用计数。如果某个继承自Referenced类的对象引用计数数值到达0,那么系统将自动调用其析构函数并清理为此对象分配的内存。ref_ptr<>:模板类ref_ptr<>为其模板内容定义了一个智能指针。模板内容必须继承自Referenced。Object:纯虚类,一切需要I/O支持,拷贝和引用计数的对象的基类。Notify:osg库提供了一系列的控制调试,警告和错误输出的函数。用户可以通过指定一个来自NotifySeverity枚举量的数值,设定输出的信息量。交运算:osgUtil库通过提供大量用于场景图形交运算,使用如下类可以获得场景图形中被拾取部分的信息:Intersector:纯虚类,定义了相交测试的接口。执行相交测试时,应用程序将继承自Intersector的某个类实例化,传递给IntersectionVisitor的实例,并随后请求该实例返回数据以获取交运算的结果。IntersectionVisitor:IntersectionVisitor搜索场景图形中与指定几何体相交的节点,而最后的测试工作由Intersector继承类完成。LineSegmentIntersector:继承自Intersector,用于检测指定线段和场景图形之间的相交情况,并向程序提供查询相交测试结果的函数。Intersections:交叉点。:..Iterator:迭代程序。PolytopeIntersector:与LineSegmentIntersector类似,该类用于检测由一系列平面构成的多面体的相交情况。当用户点击鼠标,希望拾取到鼠标位置附近的封闭多面体区域时,PolytopeIntersector类尤其有效。PlaneIntersector:与LineSegmentIntersector类似,用于检测由一系列平面构成的平面的相交情况。优化:osgUtil库Optimizer:用于优化场景图形。Statistics和StatsVisitor:StatsVisitor返回一个场景图形中节点的总数和类型,Statistics返回渲染几何体的总数和类型。几何体操作:osgUtil库Simplifier:使用此类用来减少Geometry对象中几何体的数目,这有助于低细节层次的自动生成。Tessellator:根据一组顶点的列表,生成由前述列表描述的多边形,即一个osg::PrimitiveSetDelaunayTriangulator:实现了Delaunay三角网格化运算,根据一组顶点的集合生成一系列的三角形。TriStripVisitor:遍历场景图图形并将多边形图元转化成三角形和四边形条带。SmoothingVisitor:SmoothingVisitor可生成顶点法线,也就是所有共享此顶点的面的法线平均值。纹理贴图生成:包含了建立反射贴图,中途向量贴图,高光贴图。:..osg笔记二2011-07-0817:37:06|分类:OSG|标签:|“废弃物”收集系统有以下两个组件:通用的基类:osg::Referenced,所有的osg节点和场景图形均继承自这一基类,它包含了一个整形的引用计数器。Osg定义的智能指针模板类ref_ptr<>。当代码中一个Referenced对象指针赋予类型变量ref_ptr<>时,Referenced类的引用计数器会自动加一。当你创建任何继承自Referenced的场景图形节点或数据时,你的应用程序不可以直接释放其内存空间。Referenced类:实现了对内存区段的引用计数器功能。包括三个主要组成部分:保护成员整形变量:_refCount,用作引用计数。公有函数ref()和unref()用于实现_refCount的增加或减少。不需要直接调用。作为保护成员存在的虚析构函数。ref_ptr<>模板类:用于实现一个指向Referenced对象的智能指针,并对其引用计数器进行管理。包含以下三个主要的组成部分:一个私有指针_ptr:用于保存管理内存区域的地址。可以用get()方法返回_ptr的值。为了使ref_ptr<>可以像正常指针一样工作,重载或定义了一些方法,如operator->()和Operator->()等。Valid方法用于判断ref_ptr<>是否为空,不为NULL则返回true。总结:<>变量,将自动调用Referenced::ref()并使引用计数加一。<>变量指向其他的对象,或者将其释放,那么将调用Referenced::unref(),使引用计数减一,当引用计数的值为零时,unref()自动释放对象所占用的内存空间。,要尽量将其赋予ref_ptr<>,以保证osg的内存管理工作正确。:Osg::vec3可用来保存顶点和法线数据;osg::vec4可用来保存颜色数据;osg::vec2可用来保存2d纹理坐标,还提供了相关的向量计算函数。模板数组类:模板最常用法是保存向量数据,如osg::Vec2Array,osg::Vec3Array,osg::Vec4Array,所有的模板数组类都继承自std::vectorDrawables类用于保存将要渲染的数据。是一个无法直接实例化的虚基类。Osg核心库从Drawables派生了三个子类::..Osg::DrawPixels,封装了glDrawPixels()的相关功能;osg::ShapeDrawable,提供了一些已经定义好的几何体的接口,如圆柱体和球;osg::Geometry,使用的多,灵活。Geometry一些方法:setVertexArray(),setColorArray(),setNormalArray()setColorBinding(),setNormalBinding():设置颜色和法线绑定方式,参数是geometry的枚举变量BIND_OFF=0,BIND_OVERALL,BIND_PER_PRIMITIVE_SET,BIND_PER_PRIMITIVE,BIND_PER_VERTEXAddPrimitiveSet:用于设置Geometry类数据渲染的方法。参数为PrimitiveSet*primitiveset:PrimitiveSet无法实例化的虚基类。PrimitiveSet的子类:DrawArrays(GLenummode,GLintfirst,GLsizeicount,intnumInstances=0)。叶节点Osg::Geode是osg的叶节点,它用于保存几何信息用于渲染。三组节点Group允许用户程序为其添加任意数量的子节点,子节点本身也可以继续分发子节点。并且派生出了许多的子类:osg::Transform,osg::LOD,osg::Switch等。由Referenced派生,可以自动管理内存空间。Osg编程的核心部分,它使得用户应用程序可以有效组织场景图形中的数据,它的强大之处在于它管理子节点的接口,还从Node处继承了管理父节点的接口。:Group使用std::vector<ref_ptr<Node>>来保存所有节点的指针,数组指针,因此可以使用索引来访问某个子节点。:Group从Node那里继承了父节点管理的接口,允许节点有多个父节点。:Tranform对OpenGL的模型视图矩阵堆栈产生影响。虚基类,无法实例化。用户应当使用osg::MatrixTransform或osg::PositionAttitudeTransform来替代它,这两者均继承自Tranform。Matrix:osg中的矩阵类,采用左乘,列数组矩阵,与opengl相反。矩阵变换节点:MatrixTransformMatrixTransform的内部使用了osg::Matrix对象,要创建一个执行变换的MatrixTransform节点,首先要创建变换矩阵Matrix并将其关联到MatrixTransform。位置属性变换节点PositionAttitudeTransform使用PositionAttitudeTransform节点可以实现使用Vec3位置坐标和一个四元数完成的变换操作。Osg使用Quat来保存四元数方位数据。。该范围包括了最大及最小值,缺省情况下其意义表示为距离。缺省条件下,LOD计算视点到物体包络体中心点的距离。如果这样并不符合渲染要求,那么用户可以指定一个自定义的中心点。:..还可以设置判断视点到物体之间的距离单位是长度距离还是像素个数。::Switch节点可以渲染或者跳过指定的子节点。四渲染状态用户的应用程序需要在osg::StateSet中设置渲染状态。StateSet能够自动对状态进行优化,并可以关联到场景图形中的任意一个节点或Drawable类。用户需要尽量使关联到场景图形的StateSet最少化。Osg渲染状态的两部分:渲染属性和渲染模式。渲染模式是指渲染的某个功能,而渲染属性是这个功能的控制变量和参数。如果要设置渲染状态的值,用户程序需要执行以下几步操作:。。渲染属性(Attribute)和渲染模式(mode)Osg为每个状态属性定义了不同的类,以便应用程序采用,所有的属性类均继承自osg::StateAttribute,StateAttribute是一个无法直接实例化的虚基类。Osg将所有的属性和模式分成两大部分:纹理和非纹理。设置渲染属性如果要设置一项属性,首先将要修改的属性类实例化。设置该类的数值,然后用osg::StateSet::setAttribute()将其关联到StateSet。设置渲染模式可以使用Osg::StateSet::setMode()允许或禁止某种模式。设置渲染属性和模式如果要将某个属性关联到StateSet,同时打开其对应模式的许可,那么可以使用osg::StateSet::setAttributeAndModes()方法。状态继承当你设置节点的渲染状态时,这个状态将被赋予当前的节点及其子节点。如果子节点对同一个渲染状态设置了不同的属性参数,那么新的子节点状态参数将会覆盖原有的。换句话说,缺省情况下子节点可以改变自身的某个状态参数,或者继承父节点的同一个状态。Osg允许用户根据场景图形中任意位置的渲染属性和模式需求,而单独改变原有的状态继承特性。用户可以选择以下这几种枚举形式:Osg::setAttribute::OVERRIDE:所有的子节点都将继承这一属性或模式,子节点对他们更改将会无效。Osg::setAttribute::PROTECTED:视为OVERRIDE的一个例外,凡是设为这种形式的属性或模式都不会受到父节点的影响。Osg::setAttribute::INHERIT:这种模式强制子节点继承父节点的渲染状态。其效果是子节点的渲染状态被解除,而使用父节点的状态代替。纹理与映射为了在程序中实现基本的纹理映射功能,用户的代码需要支持以下的步骤:::..了纹理坐标之后,还要指定相应的纹理单元,osg使用纹理单元来实现多重纹理。(,.)Osg并不支持非多重纹理接口。因此,用户程序必须制定一个纹理单元,以对应纹理坐标数据和纹理状态。如果要使用单一纹理的话,只需要制定到纹理单元0即可。:osg::Texture2D和osg::Image,Texture2D属于setAttribute的派生类,用于管理OpenGL纹理对象,而Image用于管理图像像素数据。如果要使用2d图像文件作为纹理映射的图形,只要将文件名赋给Image对象并将Image关联到Texture2D即可。::StateSet::setTextureAttribute()将一个纹理属性关联到StateSet对象。setTextureAttribute()的第一个参数是纹理单元,第二个参数是继承自StateAttribute类的一种纹理属性。合法的属性纹理类有六种:五种纹理类型osg::Texture1D,osg::Texture2D,osg::Texture3D,osg::TextureCubeMap,osg::TextureRectangle,另一个是用于纹理坐标的生成osg::TexGen。五光照要在应用程序中使用光照,需要遵循下面的步骤::定义一个osg::Light对象以定义光源参数。然后将Light添加到osg::LightSource节点中,并将LightSource添加到场景图形。由Light定义的光源将对整个场景产生影响。材质属性:osg::Material封装了OpenGL中的glMatrial()和glColorMaterial()指令的函数功能。要允许颜色追踪材质的特性,需要调用Material::setColorMode()方法。六文件I/OosgDB库提供了用户程序读取和写入2D图形和3D模型文件的函数接口。osgDB库还负责管理osg的插件系统,以实现对不同文件格式的支持。,从而将插件系统完全影藏在用户程序之外。需要的两个头文件是:osgDB/ReadFileosgDB/WriteFile:..::readNodeFile(string&filename)(3d模型文件的读取)和osgDB::readImageFile(string&filename)(2d图像的读取)来读取3d模型和2d图像文件。readNodeFile()返回一个指向场景图形节点的指针。readImageFile()返回Image对象的指针。写入文件:利用函数osgDB::writeNodeFile()和osgDB::writeImageFile()将数据写入到3d模型或2d图像文件中。插件的检索和注册:osg插件也就是一组动态链接库,其中实现了osgDB头文件ReadFile定义的接口。Registry类维护了一个扩展名的化名映射表来对应不同的文件格式和支持此类格式的插件。七NodeKit与osgTextOsg库提供了丰富的设计功能,不过有时还是需要从osg的核心节点类中派生出自己的特定节点。而这些派生的功能往往不属于osg核心部分,而是适合作为辅助的库存在。所谓NodeKit就是指一种开发集成库,它扩展自osg核心功能的特定节点类(Node),渲染属性类(StateAttribute),绘图类(Drawable),并且使用osg包装类(wrapper)。osgText组件:在这个命名空间中有一些十分使用的加载字体和文字渲染类。核心类:Text:继承自Drawable类,可用于显示任意长度的字符串。Font:osgText的函数可以根据字体文件的名称来创建Font对象。要在程序中使用osgText,用户通常要遵守下面的三个步骤:,只需要创建一个Font对象,然后在Text对象之间共享即可。。指定对齐方式,文字方向,位置和大小参数,将步骤一中的Font对象关联到新的Text对象中。。用户可以向一个Geode节点添加多个Text对象,或者根据自己的需要创建多个Geode节点。将Geode节点作为场景图形的子节点加入。坐标位置:利用Text::setPosition()改变在原点的默认值。文字方向:可以使用Text::setAxisAlignment方法来设置文字的位置。输入参数为Text::AxisAlignment的枚举量。对齐方式:使用函数Text::setAlignment()参数是Text::AlignmentType枚举量。文字尺寸:分辨率:颜色:Text::setColor()::..分类:OSG|标签:|。因此用户程序完全可以使用最底层的osg功能来执行渲染操作。假设用户希望能够完全自主的控制场景图形的渲染,那么也可以按照下面的步骤编写应用程序的代码::以改变OpenGL的模型视图矩阵。,并将他们激活。如果有需要的话,用户也可以自行编写管理多窗口和多个设备上下文的代码。,那么可以使用osgDB::::UpdateVisitor,osgUtil::CullVisitor,osgUtil::RenderStage对象实例化,以实现场景的更新,挑选和绘制遍历。如果用户希望获得更多的控制权,则可以自己编写类来实现以上遍历的特性。。并且调用自己的视角观察代码来更新模型视图矩阵。()。渲染时要依次执行场景更新,挑选和绘制遍历,最后交换缓存数据。﹑硬件平台需要立体化渲染(stereorendering)或者多通道渲染(multipiperendering)功能的支持,则可以自行编写额外的代码。,这样你的代码才可以在所有的目标平台上运行通过。用户使用osg时,往往可以利用以下这些工具和库来简化开发的过程:::SceneView:这个类封装了更新,挑选,和绘制遍历,但是并不启用DatabasePager。有一部分应用程序会使用SceneView作为osg渲染的主接口。,可以支持多通道渲染。osgProducer是一个集成了Producer和osg的应用库。Producer有相当多的用户,目前有一部分的osg程序是基于osgProducer和Producer开发的。—osgViewer。osgViewer包含了一系列的用于控制视口显示的相关的类,并封装了大量用户常用的功能函数,例如显示管理,事件响应,场景渲染等。这个库使用osg::Camera类来管理OpenGL的模型视图矩阵。与SceneView类不同,osgViewer的视口类提供了对DatabasePager的全部支持。osgViewer还可以针对同一个场景图形,提供并通过多个独立的视口显示该场景。::..osg::Camera摄像机对象来管理osg的模型视图矩阵。用户可以通过以下的两个方法来控制Camera

OSG学习过程中的笔记 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数21
  • 收藏数0 收藏
  • 顶次数0
  • 上传人青山代下
  • 文件大小2.12 MB
  • 时间2024-04-02