《场景的组织结构》PPT课件_第1页
《场景的组织结构》PPT课件_第2页
《场景的组织结构》PPT课件_第3页
《场景的组织结构》PPT课件_第4页
《场景的组织结构》PPT课件_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.1节点的定义与种类,场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提升渲染的效率。下图描述了一个场景图形,其中包含了地形,奶牛和卡车的模型。,1.场景图的空间数据组织形式,2.节点类型,OSG包括了多种类型的节点,以执行各种各样的用户功能。面向对象的场景图形使用继承的机制来提供节点的这种多样性,所有的节点类都有一个共有的基类Node。,2.节点类型,(1)osg:Node类是所有节点的基类,包含了一个BoundingSphere类描述其包围球。相关函数:/提示更新包围体voiddirtyBound();/重新计算并获取包围体constBoundingSphere,/为当前节点添加一个父节点voidaddParent(Group*node);/删除当前节点的某个父节点voidremoveParent(Group*node);还有一些成员函数在后续进行介绍,比如处理回调函数、访问器等的相关成员函数。,(2)osg:Geode类叶节点,树结构的最底部,各个叶节点包含了构成场景中物体的实际几何信息。有一个或多个Drawable对象。所有相关的可绘制体必须与Geode节点关联。/向叶节点添加一个可绘制体booladdDrawable(Drawable*);/移除一个给定的可绘制体boolremoveDrawable(Drawable*);/获取可绘制体的数目unsignedintgetNumDrawables()const;,代码举例:向叶节点添加两个Drawableosg:ref_ptrgeode=newosg:Geode;geode-addDrawable(drawable1);geode-addDrawable(drawable2);*Billboard节点是一种特殊的叶节点,有三种形式的广告板:面向视点(POINT_ROT_EYE):相对眼睛旋转相对世界一点旋转(POINT_ROT_WORLD)轴向布告板(AXIAL_ROT),(3)osg:Group类组节点(groupnode):场景树的枝节节点或中间节点,包含了几何信息和控制其外观的渲染状态信息。/添加一个子节点booladdChild(Node*node);/移除一个子节点boolremoveChild(Node*node);/获取子节点的数目unsignedintgetNumChildren()const,osg提供了非常丰富的Group节点,实现某些特定功能,下面分别介绍:(3.1)空间变换节点osg:Transform通过改变自身在三维空间的位置和姿态,进而影响其子节点的空间位置变化。为了正确使用该节点,需要用到绝对参考系(absolutereferenceframe):只是作用于绝对坐标系。相对参考系(relativereferenceframe):只是作用于给定对象的局部坐标系。/设置节点的参考坐标系voidsetReferenceFrame(ReferenceFramerf),osg:MatrixTransform类:直接设置空间变换矩阵/设置空间变换矩阵voidsetMatrix(constMatrix,osg:Matrix,Model-viewtransformationscanbedonewithosg:Matrix,soosg:Matrixisaverykindofimportantdatatype.osg:Matrixis4*4.makeTranslate(),makeRotate(),makeScale()resetthecurrentmatrixandcreatea4*4translation,rotation,andscalematrix.Staticmethodcancreateanewmatrix:translate(),rotate(),scale().,osg:Matrix,osg:Matrixmat1=osg:Matrix:scale(sx,sy,sz);osg:Matrixmat2=osg:Matrix:translate(tx,ty,tz);osg:MatrixresultMat=mat1*mat2;,osg:MatrixTransform,osg:MatrixTransformisalsoanodeinscene.Itcanmanipulatethepositionandattitudeofamodelbyinternallyapplied4*4matrix.twomemberfunctions:voidsetMatrix();osg:MatrixgetMatrix();,osg:PositionAttitudeTransform类:直接设置平移、旋转和缩放值,比较直观。/设置和获取平移的距离voidsetPosition(constVec3,osg:PositoinAttitude,inthedevelopmentpractice,osg:MatrixTransformisnoteasytouse.Sowehaveosg:PositionAttitude.thisclassprovidesseveralpublicmemberfuncitons:voidsetPosition();voidsetScale();voidsetAttitude();thefirsttworequireosg:Vec3asinputvalue.,osg:PositoinAttitude,setAttitude()usesosg:Quatvariableastheparameter.osg:Quatisaquaternion,whichisusedtorepresentanorientation.wecandefineaquaternioninstanceasfollow:osg:Quatquat(xAngle,osg:X_AXIS,yAngle,osg:Y_AXIS,zAngle,osg:z_AXIS);/创建一个四元数,实现围绕axis旋转theta弧度。Floattheta(M_PI*.5f);osg:Vec3axis(.707f,.707f,0.f);osg:Quatq0(theta,axis);,/获取节点的参考坐标系ReferenceFramegetReferenceFrame()const;/计算从局部坐标系到世界坐标系的级联矩阵,boolcomputeLocalToWorldMatrix(Matrix/计算从世界坐标系到局部坐标系的级联矩阵boolcomputeWorldToLocalMatrix(Matrix/设置给定子节点的开关值voidsetValue(unsignedintpos,bool);/获取给定位置的子节点的开关值boolgetValue(unsignedintpos)const;,(3.3)细节层次节点osg:LOD类(3.4)相机节点osg:CameraNode类(3.5)渲染属性节点,代码举例,osg:ref_ptrgeode;osg:ref_ptrlod=newosg:LOD;/当距离在0.f与1000.f之间时,显示geode。lod-addChild(geode.get(),0.f,1000.f);如果子节点的范围有交叠,LOD将同时显示多个子节点。osg:ref_ptrgeode0,geode1;osg:ref_ptrlod=newosg:LOD;/当距离在0.f与1050.f之间时,显示geode0。lod-addChild(geode0.get(),0.f,1050.f);/当距离在950.f与2000.f之间时,显示geode1。lod-addChild(geode1.get(),950.f,2000.f);/因此,当距离在950.f到1050.f之间时,将同时显示/geode0和geode1。,LOD的自定义中心点,缺省条件下,LOD计算视点到物体包络体中心点的距离。如果这样并不符合渲染要求,那么用户可以指定一个自定义的中心点。代码举例:osg:ref_ptrlod=newosg:LOD;/使用用户定义的中心点来计算距离。lod-setCenterMode

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论