1 virtual Object * cloneType () const

说明:只是返回一个和调用对象类型相同的同类型对象,仅此而已,调用对象的其它属性等不拷贝。如下代码:

int main(int argc, char** argv)
{
osg::ref_ptr<osgViewer::Viewer> spViewer = new osgViewer::Viewer();
osg::ref_ptr<osg::Group> spRoot = new osg::Group();osg::ref_ptr<osg::Node>spNode = osgDB::readNodeFile("cow.osg");
spRoot->addChild(spNode);osg::ref_ptr<osg::Node>spNodeCopy = (osg::Node*)spNode->cloneType();
osg::ref_ptr <osg::PositionAttitudeTransform>spPositionAttitudeTransform = new osg::PositionAttitudeTransform();
spPositionAttitudeTransform->addChild(spNodeCopy);
spPositionAttitudeTransform->setPosition(osg::Vec3d(10, 0, 0));
spRoot->addChild(spPositionAttitudeTransform);spViewer->setSceneData(spRoot);return spViewer->run();
}

spNode读入了cow.osg,利用spNode的cloneType()函数拷贝了一个新节点spNodeCopy,再把spNodeCopy加入到场景,这个时候场景中是不会显示奶牛的,因为查看cloneType()

的定义:

virtual Object* cloneType() const { return new Node(); }

发现它仅仅是返回了一个和 spNode类型相同的对象,spNode的其它属性,比如奶牛模型等并没有拷贝。

2  virtual Object * clone (const CopyOp &copyop) const

说明:拷贝,参数代表拷贝类型。返回该Node的一个拷贝,拷贝类型。对于Node有枚举值:osg::CopyOp::SHALLOW_COPY,osg::CopyOp::SHALLOW_COPY等

int main(int argc, char** argv)
{osg::ref_ptr<osgViewer::Viewer> spViewer = new osgViewer::Viewer();osg::ref_ptr<osg::Group> spRoot = new osg::Group();osg::ref_ptr<osg::Node>spNode = osgDB::readNodeFile("cow.osg");spRoot->addChild(spNode);osg::ref_ptr<osg::Node>spNodeCopy = (osg::Node*)spNode->clone(osg::CopyOp::DEEP_COPY_ALL );osg::ref_ptr <osg::PositionAttitudeTransform>spPositionAttitudeTransform = new osg::PositionAttitudeTransform();spPositionAttitudeTransform->addChild(spNodeCopy);spPositionAttitudeTransform->setPosition(osg::Vec3d(10, 0, 0));spRoot->addChild(spPositionAttitudeTransform);spViewer->setSceneData(spRoot);return spViewer->run();}

如上的代码,深度拷贝了一个spNode相同的节点spNodeCopy ,此时spNodeCopy 和spNode各自有一份独立且各种属性完全相同的数据,此时视图会显示两头奶牛,注意和cloneType()函数的区别。

3 virtual bool isSameKindAs (const Object *obj) const

说明:判断两类是否为一个类型,父类与子类应该算做同一类型。若为同一类型则返回真,否则返回假,obj需要判断与Node是否为同一类型的类。如下代码:

int main(int argc, char** argv)
{osg::ref_ptr<osgViewer::Viewer> spViewer = new osgViewer::Viewer();osg::ref_ptr<osg::Group> spRoot = new osg::Group();osg::ref_ptr<osg::Node>spNode = osgDB::readNodeFile("cow.osg");spRoot->addChild(spNode);bool b = spRoot->isSameKindAs(spNode.get());bool a = spRoot->isSameKindAs(spViewer.get());spViewer->setSceneData(spRoot);return spViewer->run();}

此时b为true;a为false;

4、virtual const char * libraryName () const

说明:返回Node的库文件名。

5、virtual const char * className () const

说明:返回Node的类类型名。

6、virtual Group * asGroup ()

virtual const Group * asGroup () const

说明:把该Node当作一个Group来用,返回指向Group指针,从而具有Group的方法,也可以强制转换。

7、virtual Transform * asTransform ()

virtual const Transform * asTransform () const

说明:把该Node当作一个Transform来用,返回指向Transform的指针,从而具有Transform的方法。

8、virtual void accept (NodeVisitor &nv)

virtual void ascend (NodeVisitor &nv)

virtual void traverse (NodeVisitor &)

说明:表示接受NodeVisitor的遍历。第一个表示接受遍历,一般表示全遍历。第二个表示向上遍历。第三个表示向下遍历,参数nv表示访问器。是个很重要的工具。

9、const ParentList & getParents () const

ParentList getParents ()

说明:返回Node的父母结点列表,因为可能有多个父母结点。ParentList 是一个std::vector<Group*>.

10、Group * getParent (unsigned int i)

const Group * getParent (unsigned int i) const

说明:根据索引值,找到第i个父结点。

12、unsigned int getNumParents () const

说明:得到父结点的个数。

13、NodePathList getParentalNodePaths (osg::Node *haltTraversalAtNode=0) const

说明:允许得到该结点在某个结点之上的父结点路径。返回一个结点列表,设置一个结点,遍历该结点之上的父结点路径。默认值为0,表示从当前结点自己开始遍历。该参数一般肯定为当前结点的某个父结点才有意义。具体详解参见《getParentalNodePaths、osg::NodePathList、osg::NodePath详解》

14、MatrixList getWorldMatrices (osg::Node *haltTraversalAtNode=0) const

说明:得到让该结点在某个结点之上的父结点发生Matrix操作的矩阵结点列表。设置一个结点,遍历使该结点之上的父结点发生Matrix操作的路径。默认值为0,表示从当前结点自己开始遍历。该参数一般肯定为当前结点的某个父结点才有意义。

15、void setUpdateCallback (NodeCallback *nc)

说明:设置一个更新回调,nc为回调函数名。

16、NodeCallback * getUpdateCallback ()

const NodeCallback * getUpdateCallback () const

说明:返回更新回调指针。

17、unsigned int getNumChildrenRequiringUpdateTraversal () const

说明:得到设置了更新回调的子结点数目。

18、void setEventCallback (NodeCallback *nc)

说明:设置事件回调,nc为事件回调参数指针。

19、NodeCallback * getEventCallback ()

const NodeCallback * getEventCallback () const

说明:得到事件回调指针。返回该指针。

20、unsigned int getNumChildrenRequiringEventTraversal () const

说明:得到设置了事件回调的子结点数目。

21、void setCullCallback (NodeCallback *nc)

说明:设置拣选回调。

22、NodeCallback * getCullCallback ()

const NodeCallback * getCullCallback () const

说明:得到拣选回调指针。返回拣选回调指针。

23、void setCullingActive (bool active)

说明:是否开启拣选。

24、bool getCullingActive () const

说明:得到拣选开启的状态。如果开启,则返回真,否则返回假。

25、unsigned int getNumChildrenWithCullingDisabled () const

说明:得到没有开启拣选的子结点数目。返回该数目。

26、bool containsOccluderNodes () const

说明:看是否包含遮档结点。遮档结点往往是一个几何形状,用于档后面的结点。

27、void setNodeMask (NodeMask nm)

说明:设置结点是否隐藏。如果nm为0则代表隐藏,否则代表显示,nm为0时表示隐藏,为非零时表示显示。

28、NodeMask getNodeMask () const

说明:得到结点状态,是显示,还是隐藏。如为0则表示隐藏,否则表示显示中。

29、void setDescriptions (const DescriptionList &descriptions)

说明:设置结点描述。往往为一个字符串来表述结点,结点描述,为一个字符串。序列。std::vector<std::string>

30、DescriptionList & getDescriptions ()

const DescriptionList & getDescriptions () const

const std::string & getDescription (unsigned int i) const

std::string & getDescription (unsigned int i)

说明:得到结点描述,返回为一个字符串序列std::vector<std::string>。有参数i的表示得到第i个描述,因为描述是一个序列,表示得到第i个描述。返回字符串string。

31、unsigned int getNumDescriptions () const

说明:得到结点描述个数。

32、void addDescription (const std::string &desc)

说明:添加一个描述。

33、void setStateSet (osg::StateSet *stateset)

说明:设置状态设置。状态设置关系到OpenGL当中所有的状态。

34、osg::StateSet * getOrCreateStateSet ()

说明:得到或者创建状态指针。一旦返回该指针,该指针便可与该结点关联,改变该指针就会改变该结点的状态值。

35、osg::StateSet * getStateSet ()

const osg::StateSet * getStateSet () const

说明:得到状态指针,如果没有绑定过,则返回空。

36、void setInitialBound (const osg::BoundingSphere &bsphere)

说明:设置初始包围球。参数表示一个包围球。如果dirty了,将会改变该球的值。等于关联了一个球球。

37、const BoundingSphere & getInitialBound () const

说明:得到初始球。返回该球球的引用。

38、void dirtyBound ()

说明:要求计算包围球球。

39、const BoundingSphere & getBound () const

说明:得到包围球球。

40、virtual BoundingSphere computeBound () const

说明:计算包围球球。

41、void setComputeBoundingSphereCallback (ComputeBoundingSphereCallback *callback)

说明:设置包围球回调,当计算包围球时会调用该函数,该参数为回调指针。

42、ComputeBoundingSphereCallback * getComputeBoundingSphereCallback () const

说明:得到计算包围球回调。得到一个回调指针。

43、virtual void setThreadSafeRefUnref (bool threadSafe)

说明:设置是否查看ref以及unref的线程安全性,为真表示查看,为假表示不查看。

44、virtual void resizeGLObjectBuffers (unsigned int)

说明:重新设置GL对象Buffer的大小为指定大小,Buffer的大小值,会修改到每个Buffer.

45、virtual void releaseGLObjects (osg::State *=0) const

说明:释放GL对象。如果State不为0则只释放与之有关联的对象,从而释放与之有关联的上下文。否则会为释放一切图像上下文释放一切对象。

二、osg::Group类

类描述:对结点起到组织作用,一般做为父结点或者根结点出现。它允许有一系列的孩子,相同的孩子或者孩子之间有引用重得加入的会共享内存,是通过父类osg::Referenced实现自动管理内存句柄的。它继承与osg::Node

1、Group ()

Group (const Group &, const CopyOp &copyop=CopyOp::SHALLOW_COPY)

说明:构造函数。第二个构造函数意思为从一个已知的Group构造新的Group。参数表示拷贝类型,默认是浅拷贝,拷贝类型,默认为浅拷贝,可以是深拷贝:DEEP_COPY_OBJECTS

2、virtual Group * asGroup ()

virtual const Group * asGroup () const

说明:返回一个Group指针,这是为了提供给子类所使用的。当对象为非指针时也可以使用。

3、virtual void traverse (NodeVisitor &nv)

说明:接受一个NodeVisitor向上遍历访问,nv为访问器参数,注意传入为引用类型。

4、virtual bool addChild (Node *child)

说明:添加一个孩子到组结点。如果添加成功则返回真。

5、virtual bool insertChild (unsigned int index, Node *child)

说明:插入一个结点到第index个结点后面。如果插入成功,则返回真,否则返回假。

6、bool removeChild (Node *child)

bool removeChild (unsigned int pos, unsigned int numChildrenToRemove=1)

说明:移除某个孩子,移除成功则返回真,否则返回假。第一函数为以某个孩子的指针为参数移除它。第二个是以第pos个孩子为参数移除pos之后的numChildrenToRemove个,要删除的孩子指针值。

7、virtual bool removeChildren (unsigned int pos, unsigned int numChildrenToRemove)

说明:删除一些孩子,从第pos个孩子后删除一些孩子。numChildrenToRemove要删除的孩子数量。

8、virtual bool replaceChild (Node *origChild, Node *newChild)

说明:使用某个结点,代替某个孩子,origChild表示旧孩子,就是被替掉的那个孩子。newChild表示新孩子,要顶上去的孩子。

9、unsigned int getNumChildren () const

说明:得到该组的孩子数量。返回孩子数量值。

10、virtual bool setChild (unsigned int i, Node *node)

说明:设置第i个孩子为node值,要设置的group的第i个孩子。node表示要设置的值。

11、Node * getChild (unsigned int i)

const Node * getChild (unsigned int i) const

说明:得到第i个孩子。返回第i个孩子的指针。

12、bool containsNode (const Node *node) const

说明:判断该组是否包含参数所指node.如果包含则返回真,否则返回假。

13、unsigned int getChildIndex (const Node *node) const

说明:得到参数所指node的索引值。返回该索引值。

14、virtual void setThreadSafeRefUnref (bool threadSafe)

说明:设置是否查看ref以及unref的线程安全性,threadSafe为真表示查看,为假表示不查看。

15、virtual void resizeGLObjectBuffers (unsigned int)

说明:重新设置GL对象Buffer的大小为指定大小。

16、virtual void releaseGLObjects (osg::State *=0) const

说明:释放GL对象。如果State不为0则只释放与之有关联的对象,从而释放与之有关联的上下文。否则会为释放一切图像上下文释放一切对象,

三、osg::Switch类

类说明:Switch是一个管理类,它下面可以有很多子类,它就像是一个开关可以控制子类的显示与隐藏,而这种隐藏是不耗费内存的,与SetNodeMask对比有明显的优势,SetNodeMask事实上只是隐藏了结点,但结点仍被绘制。该类是从Node和Group派生而来,故可以被加入组结点以及asGroup等等种种方法。是一个非常常用的类。

1、Switch ()

Switch (const Switch &, const CopyOp &copyop=CopyOp::SHALLOW_COPY)

说明:构造函数。第二个构造函数为从已知的Switch构造出新的Switch。拷贝类型为参数二控制。默认值为浅拷贝,深拷贝为:DEEP_COPY_OBJECTS

2、META_Node (osg, Switch)

说明:是一个宏,宏中定义了标准Clone,且具有isSameAs,ClassName,accept三个重要方法。目的是让从Node派生的子类方便的定义所需要的纯虚方法。

3、virtual void traverse (NodeVisitor &nv)

说明:设置向下遍历器,一般为从该结点向下开始遍历。

4、void setNewChildDefaultValue (bool value)

说明:设置新孩子加入时的默认值是显示还是开还是关。如果value为真表示开,为假表示关。

5、bool getNewChildDefaultValue () const

说明:得到新加入结点默认开关值,如果默认为开,则返回真,否则返回假。

6、virtual bool addChild (Node *child)

virtual bool addChild (Node *child, bool value)

说明:添加一个孩子到开关中。添加成功则返回真,添加失败则返回假。添加失败可能会由于空指针或者该node已被包含在组结点当中。

7、virtual bool insertChild (unsigned int index, Node *child)

virtual bool insertChild (unsigned int index, Node *child, bool value)

说明:插入一个孩子到index值后。可以设置开关值。插入成功则返回真,否则返回假。如果该孩子为空或者已经在组中,则会返回假。

8、virtual bool removeChildren (unsigned int pos, unsigned int numChildrenToRemove)

说明:从第pos开始,移除numChildrenToR个孩子结点。

9、void setValue (unsigned int pos, bool value)

说明:设置第pos个值的结点的开关值,如果value为真表示开,如果为假表示关。

10、bool getValue (unsigned int pos) const

说明:返回第Pos个孩子的开关值。开则返回真,关则返回假。

11、void setChildValue (const Node *child, bool value)

说明:设置孩子开关值,以结点指针为参数。如果value为真则设置为开,否则设置为关。

12、bool getChildValue (const Node *child) const

说明:得到孩子的开关值,以孩子指针做为参数。

13、bool setAllChildrenOff ()

说明:关闭所有孩子。如果关闭成功则返回真,否则返回假。

14、bool setAllChildrenOn ()

说明:打开所有孩子,如果打开成功则返回真,否则返回假。

15、bool setSingleChildOn (unsigned int pos)

说明:设置单个孩子的开关开启和关闭。设置成功返回真,否则返回假。

16、void setValueList (const ValueList &values)

说明:为开关孩子序列设置一个布尔序列来完成设置值,开关序列,定义为std::vector<bool>

17、const ValueList & getValueList () const

说明:得到开关孩子序列的开关值序列。

18、virtual BoundingSphere computeBound () const

说明:计算包围球,返回开关所有开启子结点的总包围球。

四、osg::MatrixTransform类

类说明:这是一个最常用的移动结点的类,可以随动,旋转控制结点。这些操作都是乘矩阵得到。

1、MatrixTransform ()

MatrixTransform (const MatrixTransform &, const CopyOp &copyop=CopyOp::SHALLOW_COPY)

MatrixTransform (const Matrix &matix)

说明:构造函数,第二个构造函数为从一个现有MatrixTransform来构造新的MatrixTransform。可以确定拷贝类型,默认为浅拷贝,可以为深拷贝:DEEP_COPY_OBJECTS。而第三个构造函数为从一个matrix来构造一个MatrixTransform.

2、META_Node (osg, Switch)

说明:是一个宏,宏中定义了标准Clone,且具有isSameAs,ClassName,accept三个重要方法。目的是让从Node派生的子类方便的定义所需要的纯虚方法。

3、virtual MatrixTransform * asMatrixTransform ()

virtual const MatrixTransform * asMatrixTransform () const

说明:返回一个MatrixTransform的指针,如果是对象是可以这样使用,或是其父类的其它类型。

4、void setMatrix (const Matrix &mat)

说明:这个方法非常重要,是里面最重要的方法,里面有很多的惯用法。其中格式都是这样的:mat.setMatrix(osg::Matrix::Transform(x,y,z)),其中osg::Matrix::Scale以及osg::Matrix::Rotate也可以被用在其中,并且可以相乖叠加。这样就设置了mat的矩阵。然后把node加入到mat中,再把mat加入到Group中。

5、const Matrix & getMatrix () const

说明:得到已经设置的矩阵值。返回一个矩阵的引用。

6、void preMult (const Matrix &mat)

void postMult (const Matrix &mat)

说明:preMult的意思为前乘矩阵,postMult的意思为后乘矩阵。

7、const Matrix & getInverseMatrix () const

说明:得到逆矩阵。

8、virtual bool computeLocalToWorldMatrix (Matrix &matrix, NodeVisitor *) const

virtual bool computeWorldToLocalMatrix (Matrix &matrix, NodeVisitor *) const

说明:把NodeVisitor所指结点由局部坐标系统转向世界坐标系统 ,或由世界坐标系统转向局部坐标系统。得到矩阵值,矩阵值也可以转换为坐标,转换成功返回true,失败返回false.

osg节点函数功能汇总相关推荐

  1. matlab中函数功能汇总(一)——rectangle、bwlabel、regionprops

    文章目录 前言 一.rectangle 二.bwlabel 三.regionprops 写在最后 前言 由于最近在学习MATLAB,在使用函数的时候总是要找很久,而且每次用到都要到处去搜,一直都希望有 ...

  2. EXCEL表格常用函数功能汇总

    1.相对引用与绝对引用 相对引用:引用单元格的相对地址,即引用单元格的位置关系是相对的,默认情况下,新公式使用的是相对引用.填充柄无论向上,向下,向左,向右拖动,它会引用它相对位置的内容. 绝对引用: ...

  3. Python内置函数功能汇总

    本文按函数字母顺序归纳知识点: abs(x):返回x的绝对值 all(iterable):集合中元素都为真是返回True,反之返回False any(iterable):集合中的元素有一个 为真时为真 ...

  4. Python 内置函数功能汇总

    68个内置函数 分类记忆 数学运算 × 7 abs() . divmod() . max() . min() .pow() .round() .sum() 类型转换 × 24 bool() . int ...

  5. oracle 不等函数,SQL(Oracle)日常使用与不常使用函数的汇总

    --日常使用的sql语句和oracle语句,有些相对使用的频率比较高,收藏起来还是比较值得的 -- 绝对值 SQL:select abs(-1) value Oracle:select abs(-1) ...

  6. tf.pad函数功能介绍

    tf.pad()函数主要是对张量在各个维度上进行填充,该函数的参数如下所示: pad(tensor,paddings,mode='CONSTANT',name=None ) 其中: tensor是待填 ...

  7. mysql函数大全最小,MySQL函数一览_MySQL函数全部汇总

    前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时 ...

  8. Python嵌套定义函数增强reduce()函数功能

    技术要点: 1)Python允许嵌套定义函数. 2)functools标准库中的reduce()函数第一个参数可以是函数或lambda表达式,这个函数必须接收两个参数. 下面的代码实现任意进制的按权展 ...

  9. hive 强转为string_Hive的条件函数与日期函数全面汇总解析

    点击上方蓝字  关注我们 在Hive的开窗函数实战的文章中,主要介绍了Hive的分析函数的基本使用.本文是这篇文章的延续,涵盖了Hive所有的条件函数和日期函数,对于每个函数,本文都给出了具体的解释和 ...

最新文章

  1. Nginx与PHP(FastCGI)的安装、配置、优化
  2. django安装mysql驱动
  3. 聚焦3D地形编程第五章GeomipMapping for the CLOD
  4. 使用录制宏制作工资条
  5. IDA __OFSUB__ 测试
  6. [总结]Jquery api 快速参考
  7. C++读图片——Mac下对于bmp文件读写读取过大的解决方案
  8. 编写sonar 插件:No SqaleSubCharacteristic annotation was found on class xxx
  9. java中异常+连接重置_java.net.SocketException:连接重置
  10. 替换后的最长重复字符
  11. 要成为物联网的paas平台,需要哪些条件做为支撑?
  12. Linux系统IO端口,Linux系统对IO端口和IO内存的管理
  13. ATM机为什么不能存100张?
  14. 内联css加伪元素,使用CSS:前和:后内联CSS伪元素?(Using CSS :before and :after p
  15. 【快代理API】获取隧道代理IP
  16. 从输入URL到页面加载的过程?由一道题完善自己的前端知识体系!
  17. Java基础项目——基于文本家庭简易收支记账程序
  18. HI3559A系统卡死问题-修复
  19. 单板嵌入式计算机定义,用于嵌入式控制系统的单板计算机
  20. 男人开始对情人腻了的4种表现,别傻傻的不懂

热门文章

  1. 常见人名大全_生辰八字起名取名:2020年属鼠的女孩起名字大全
  2. mysql建库语句on报错_mysql运维必备知识点(转载至其他作者)
  3. lin通信ldf文件解析_手把手教你在CANoe中创建一个LIN通讯工程
  4. linux postfix 日志,linux – 如何计算Postfix的mailq的消息?
  5. markdown 换行_markdown傻瓜指南(github)
  6. 伪分布式hbase数据迁移汇总
  7. 将权限组件应用到新项目
  8. Linux 基础——权限管理命令chmod
  9. Mahout实战---运行第一个推荐引擎
  10. PL/SQL Developer下设置“长SQL自己主动换行”