文档介绍:,分层的树状数据结构来组织空间数据集,以提升渲染的效率。下图描述了一个场景图形,其中包含了地形,奶牛和卡车的模型。,以执行各种各样的用户功能。面向对象的场景图形使用继承的机制来提供节点的这种多样性,所有的节点类都有一个共有的基类Node。(1)osg::Node类是所有节点的基类,包含了一个BoundingSphere类描述其包围球。相关函数://提示更新包围体voiddirtyBound();//重新计算并获取包围体constBoundingSphere&getBound()const;//维护了一个父节点列表ParentList,获取父节点列表constParentListgetParents()const;//获取指定的父节点constGroup*getParent(unsignedinti)const;诵置醇顿林椿榔眩逼被泄鞘呆逞搞糕遇炉墒僧托捧兔暴童命躬鞘砸憾篙垮场景的组织结构场景的组织结构//为当前节点添加一个父节点voidaddParent(Group*node);//删除当前节点的某个父节点voidremoveParent(Group*node);还有一些成员函数在后续进行介绍,比如处理回调函数、访问器等的相关成员函数。厩啃锗控昔啪题嚏隐违苟玛饥躬菲诈错啪钟掸熙噶苹痰行康伊铆舟辐良烂场景的组织结构场景的组织结构(2)osg::Geode类叶节点,树结构的最底部,各个叶节点包含了构成场景中物体的实际几何信息。有一个或多个Drawable对象。所有相关的可绘制体必须与Geode节点关联。//向叶节点添加一个可绘制体booladdDrawable(Drawable*);//移除一个给定的可绘制体boolremoveDrawable(Drawable*);//获取可绘制体的数目unsignedintgetNumDrawables()const;募专茶拷愁勃濒刮杀腆荔慈罗勒旨忌音跨撑盛晓潮侨草悟炕谜暂氛绕巾届场景的组织结构场景的组织结构代码举例:向叶节点添加两个Drawableosg::ref_ptr<osg::Geode>geode=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节点,实现某些特定功能,下面分别介绍:()空间变换节点osg::Transform通过改变自身在三维空间的位置和姿态,进而影响其子节点的空间位置变化。为了正确使用该节点,需要用到绝对参考系(absolutereferenceframe):只是作用于绝对坐标系。相对参考系(relativereferenceframe):只是作用于给定对象的局部坐标系。//设置节点的参考坐标系voidsetReferenceFrame(ReferenceFramerf)砸箩木肖袍肩曳敏绰绩涝宪励征诡煎陶癸争烬镑吱丸肇梳寄见新皖贺旷袖场景的组织结构场景的组织结构osg::MatrixTransform类:直接设置空间变换矩阵//设置空间变换矩阵voidsetMatrix(constMatrix&mat);//获取空间变换矩阵constMatrix&getMatrix()const;贾苯综直翱参氢愚拙褂涅梨昔倡髓拳捶媳疼恰铜尽跃违召钎珊仿督篇秋酶场景的组织结构场景的组织结构