osg节点函数功能汇总

1 virtual Object * cloneType () const

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

int main(int argc, char** argv)
{
osg::ref_ptr spViewer = new osgViewer::Viewer();
osg::ref_ptr spRoot = new osg::Group();

osg::ref_ptrspNode = osgDB::readNodeFile("cow.osg");
spRoot->addChild(spNode);

osg::ref_ptrspNodeCopy = (osg::Node*)spNode->cloneType();
osg::ref_ptr 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 ©op) const

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

int main(int argc, char** argv)
{
	osg::ref_ptr spViewer = new osgViewer::Viewer();
	osg::ref_ptr spRoot = new osg::Group();

	osg::ref_ptrspNode = osgDB::readNodeFile("cow.osg");
	spRoot->addChild(spNode);

	osg::ref_ptrspNodeCopy = (osg::Node*)spNode->clone(osg::CopyOp::DEEP_COPY_ALL );
	osg::ref_ptr 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 spViewer = new osgViewer::Viewer();
	osg::ref_ptr spRoot = new osg::Group();

	osg::ref_ptrspNode = 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.

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则代表隐藏,否则代表显示。具体参见:

osg利用setNodeMask和Switch隐藏节点用法说明  博文。

28、NodeMask getNodeMask () const

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

29、void setDescriptions (const DescriptionList &descriptions)

说明:设置结点描述。往往为一个字符串来表结点描述。DescriptionList为std::vector

30、DescriptionList & getDescriptions ()

const DescriptionList & getDescriptions () const

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

std::string & getDescription (unsigned int i)

说明:得到结点描述,返回为一个字符串序列std::vector。有参数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 ©op=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等等种种方法。是一个非常常用的类。具体参见:

osg利用setNodeMask和Switch隐藏节点用法说明 

1、Switch ()

Switch (const Switch &, const CopyOp ©op=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

17、const ValueList & getValueList () const

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

18、virtual BoundingSphere computeBound () const

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

四、osg::MatrixTransform类

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

1、MatrixTransform ()

MatrixTransform (const MatrixTransform &, const CopyOp ©op=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基础技术点,osg常用函数)