osg 中节点类介绍

一、osg::Node类

类描述:osg::Node为结点类,下有派生类无数,是OSG中最重要的类之一,也是最常用的类之一。

1、Node ()

Node (const Node &node, const CopyOp &copyop=CopyOp::SHALLOW_COPY)

说明:构造函数,其中第二个重载函数是从已知的Node当中构建出新的Node,里面含有两个参数,第二个参数表示拷贝类型,默认是浅拷贝,可以设置为深拷贝。对于Node有枚举深拷贝值:DEEP_COPY_NODES表示深拷贝

2、virtual Object * cloneType () const

说明:返回该对象的一个拷贝,这是当在使用一个已有Node初始化时使用此函数方有用。

3、virtual Object * clone (const CopyOp &copyop) const

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

4、virtual bool isSameKindAs (const Object *obj) const

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

5、virtual const char * libraryName () const

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

6、virtual const char * className () const

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

7、virtual Group * asGroup ()

virtual const Group * asGroup () const

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

8、virtual Transform * asTransform ()

virtual const Transform * asTransform () const

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

9、virtual void accept (NodeVisitor &nv)

virtual void ascend (NodeVisitor &nv)

virtual void traverse (NodeVisitor &)

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

10、const ParentList & getParents () const

ParentList getParents ()

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

11、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,表示从当前结点自己开始遍历。该参数一般肯定为当前结点的某个父结点才有意义。

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.


这篇很详细,磊磊看见不错,转载过来的,地址如下:

https://zhuanlan.zhihu.com/p/38327504

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

磊磊cpp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值