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
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::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则只释放与之有关联的对象,从而释放与之有关联的上下文。否则会为释放一切图像上下文释放一切对象,
类说明: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
说明:计算包围球,返回开关所有开启子结点的总包围球。
类说明:这是一个最常用的移动结点的类,可以随动,旋转控制结点。这些操作都是乘矩阵得到。
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.