OSG的节点访问

OSG的节点访问

转自:http://www.cnblogs.com/kanego/archive/2011/09/27/2193484.html

SG中节点的访问使用的是一种访问器模式。

  一个典型的访问器涉及抽象访问者角色(Visitor), 具体访问者(Concrete Visitor), 节点角色(Node)。

  OSG中访问者角色为NodeVisitor类,其基本结构如下:

  NodeVisitor(TraversalMode tm)    //构造函数,TraversalMode为节点树的遍历方式

  //TRAVERSE_NONE, 仅当前节点

  //TRAVERSE_PARENTS, 向当前节点的父节点遍历

  //TRAVERSE_ALL_CHILDREN, 向子节点遍历

  void traverse(Node& node)  //向下一个需要访问的节点推进

  void apply(Node& node)   //虚函数,访问各种节点类型,并执行访问器中的自定义操作

  void apply(Group& node)

  void apply(Geode& node)

  …………

  NodeVisitor 只是访问器角色的抽象接口,要使用访问器访问节点并执行自定义操作时,需要继承并重写

  apply(……)函数实现自定义功能。osg::Node类中的访问接口为 void accept(NodeVisitor& nv)。对节点

  的访问从节点接受一个访问器开始,将一个具体的访问器对象传递给节点,节点反过来执行访问器的apply(...)

  函数,并将自己传入访问器。可如下简单表示:

  void Node::accept(NodeVisitor& nv)

  {

      nv.apply(*ths) ;

  }

  遍历节点树:

  osg::Node类中有两个辅助函数:

  void ascend(NodeVisitor& nv)     //虚函数,向上一级节点推进访问器

  void traverse(NodeVisitor& nv)   //虚函数,向下一级节点推进访问器

  NodeVisitor的traverse()函数实现如下:

  inline void traverse(Node& node)

  {

      if (_traversalMode == TRAVERSE_PARENTS)

      node.ascend(*this);

      else if (_traversalMode != TRAVERSE_NONE)

      node.traverse(*this);

  }

时间: 2024-07-30 11:34:56

OSG的节点访问的相关文章

OSG:先导篇 访问器机制

一.简介 osg::NodeVisitor 类是设计模式 Visitor (观察者模式)的实现,osg::NodeVisitor 类继承自 osg::Reference 类 osg::NodeVisitor是一个虚基类,在程序中无法实例化 osg::NodeVisitor中主要有 apply():决定了遍历的方式,可以获得各个节点的属性,也可以修改节点属性 accept():关联需要访问的节点,并启动访问器进行遍历 在用户应用程序中,可以编写继承自osg::NodeVisitor的新类,再通过重

osg矩阵变换节点-----平移旋转缩放

osg矩阵变换节点-----平移旋转缩放 转自:http://www.cnblogs.com/ylwn817/articles/1973396.html 平移旋转缩放这个三个是osg矩阵操作中,最常见的操作,下面给出示例以及说明 首先先了解下osg空间方向: osg方向如左图所示,x轴表示屏幕水平方向,y轴表示和屏幕垂直方向即屏幕里面方向,z轴表示屏幕垂直方向,每个箭头指向表示正方向 下面来学习矩阵变换操作 首先平移: #include<osgDB/ReadFile> #include<

js的DOM节点访问与操作

1.访问DOM节点 1.1 按id取元素:getElememtByld("标签的id") 1.2 按标签名取元素集:getElementsByTagName()返回一个对象数组 2.操作元素内的文本 2.1 简单的方法是innerText(),但是FireFox浏览器不兼容. function text(e){ var t=""; //如果传入的是元素,则继续遍历其元素 //否则假定它是一个数组 e=e.childNodes || e; //遍历所有字节点 for(

OSG 实现跟随节点的相机(转)

本章教程将继续使用回调和节点路径(NodePath)来检索节点的世界坐标. 本章目标: 在一个典型的仿真过程中,用户可能需要从场景中的各种车辆和人物里选择一个进行跟随.本章将介绍一种将摄像机“依附”到场景图形节点的方法.此时视口的摄像机将跟随节点的世界坐标进行放置. ---------------------------------------------------------------------- 概述: 视口类包括了一系列的矩阵控制器(osgGA::MatrixManipulator)

[osg]节点遍历nodevisitor浅析

参考:https://www.cnblogs.com/hzhg/archive/2010/12/17/1908764.html OSG中节点的访问使用的是一种访问器模式.一个典型的访问器涉及抽象访问者角色(Visitor), 具体访问者(Concrete Visitor), 节点角色(Node). OSG中访问者角色为NodeVisitor类,其基本结构如下: NodeVisitor(TraversalMode tm) //构造函数,TraversalMode为节点树的遍历方式 //TRAVER

OSG开源教程(转)

整理:荣明.王伟 北 京 2008年4月 序 第一次接触OSG是在2001年,当时开源社区刚刚兴起,还没有现在这么火.下载了OSG源码,但是在看了几个Demo之后,感觉没有什么特别之处.时隔七年之后,我再次将目光投向OSG,发现OSG确实有其独到之处,很多3D效果已经不弱于甚至超过商业软件,有感于开源力量的巨大.但是,与当前主流3D商业软件如Vega.VegaPrime.VTree.Performer等相比,开源软件的缺点也很明显,其中文档缺乏可谓其致命弱点之一.开发者只能从浩瀚的源码中,进行编

OSG(OpenSceneGraphic) 渲染引擎架构--整体认识

本文参考<<osg最长一帧>>, <<OpenSceneGraph三维渲染引擎编程指南>>, <<OpenSceneGraph三维渲染引擎设计与实践>> 整理而来,  感谢大牛们的精彩著作. 相比Ogre来说, Ogre代码很规范, 只是入门资料较少,如果能在学习之前能总体上对架构有个印象就好了, 免得盲人摸象啊, 不过,还好有OSG. 场景相关: Node, Geode, Group, Transform, LOD, Camera,

OSG(OpenSceneGraphic) 渲染引擎架构--整体认识 [转]

原文:http://blog.csdn.net/zangle260/article/details/41123067?utm_source=tuicool 本文参考<<osg最长一帧>>, <<OpenSceneGraph三维渲染引擎编程指南>>, <<OpenSceneGraph三维渲染引擎设计与实践>> 整理而来,  感谢大牛们的精彩著作. 相比Ogre来说, Ogre代码很规范, 只是入门资料较少,如果能在学习之前能总体上对架构

osg实例介绍

转自:http://blog.csdn.net/yungis/article/list/1 [原]osgmotionblur例子 该例子演示了运动模糊的效果.一下内容是转自网上的:原理:引用内容对于运动画面,将当前帧画面与上一帧画面进行alpha融合,以产生出残影——运动模糊效果.通过使用累积缓存来完成这项工作.OpenGL提供一个累积缓存,可以用来存储当前指定的颜色缓存里面的内容,并进行一定的运算操作.通过函数glAccum可以对累积缓存进行操作. glAccum介绍如下:引用内容void g