osg节点函数功能汇总
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()函數(shù)拷貝了一個新節(jié)點spNodeCopy,再把spNodeCopy加入到場景,這個時候場景中是不會顯示奶牛的,因為查看cloneType()
的定義:
virtual Object* cloneType() const { return new Node(); }發(fā)現(xiàn)它僅僅是返回了一個和?spNode類型相同的對象,spNode的其它屬性,比如奶牛模型等并沒有拷貝。
2? virtual Object * clone (const CopyOp ©op) const
說明:拷貝,參數(shù)代表拷貝類型。返回該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相同的節(jié)點spNodeCopy ,此時spNodeCopy 和spNode各自有一份獨立且各種屬性完全相同的數(shù)據,此時視圖會顯示兩頭奶牛,注意和cloneType()函數(shù)的區(qū)別。
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的遍歷。第一個表示接受遍歷,一般表示全遍歷。第二個表示向上遍歷。第三個表示向下遍歷,參數(shù)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
說明:得到父結點的個數(shù)。
13、NodePathList getParentalNodePaths (osg::Node *haltTraversalAtNode=0) const
說明:允許得到該結點在某個結點之上的父結點路徑。返回一個結點列表,設置一個結點,遍歷該結點之上的父結點路徑。默認值為0,表示從當前結點自己開始遍歷。該參數(shù)一般肯定為當前結點的某個父結點才有意義。具體詳解參見《getParentalNodePaths、osg::NodePathList、osg::NodePath詳解》
14、MatrixList getWorldMatrices (osg::Node *haltTraversalAtNode=0) const
說明:得到讓該結點在某個結點之上的父結點發(fā)生Matrix操作的矩陣結點列表。設置一個結點,遍歷使該結點之上的父結點發(fā)生Matrix操作的路徑。默認值為0,表示從當前結點自己開始遍歷。該參數(shù)一般肯定為當前結點的某個父結點才有意義。
15、void setUpdateCallback (NodeCallback *nc)
說明:設置一個更新回調,nc為回調函數(shù)名。
16、NodeCallback * getUpdateCallback ()
const NodeCallback * getUpdateCallback () const
說明:返回更新回調指針。
17、unsigned int getNumChildrenRequiringUpdateTraversal () const
說明:得到設置了更新回調的子結點數(shù)目。
18、void setEventCallback (NodeCallback *nc)
說明:設置事件回調,nc為事件回調參數(shù)指針。
19、NodeCallback * getEventCallback ()
const NodeCallback * getEventCallback () const
說明:得到事件回調指針。返回該指針。
20、unsigned int getNumChildrenRequiringEventTraversal () const
說明:得到設置了事件回調的子結點數(shù)目。
21、void setCullCallback (NodeCallback *nc)
說明:設置揀選回調。
22、NodeCallback * getCullCallback ()
const NodeCallback * getCullCallback () const
說明:得到揀選回調指針。返回揀選回調指針。
23、void setCullingActive (bool active)
說明:是否開啟揀選。
24、bool getCullingActive () const
說明:得到揀選開啟的狀態(tài)。如果開啟,則返回真,否則返回假。
25、unsigned int getNumChildrenWithCullingDisabled () const
說明:得到沒有開啟揀選的子結點數(shù)目。返回該數(shù)目。
26、bool containsOccluderNodes () const
說明:看是否包含遮檔結點。遮檔結點往往是一個幾何形狀,用于檔后面的結點。
27、void setNodeMask (NodeMask nm)
說明:設置結點是否隱藏。如果nm為0則代表隱藏,否則代表顯示,nm為0時表示隱藏,為非零時表示顯示。
28、NodeMask getNodeMask () const
說明:得到結點狀態(tài),是顯示,還是隱藏。如為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>。有參數(shù)i的表示得到第i個描述,因為描述是一個序列,表示得到第i個描述。返回字符串string。
31、unsigned int getNumDescriptions () const
說明:得到結點描述個數(shù)。
32、void addDescription (const std::string &desc)
說明:添加一個描述。
33、void setStateSet (osg::StateSet *stateset)
說明:設置狀態(tài)設置。狀態(tài)設置關系到OpenGL當中所有的狀態(tài)。
34、osg::StateSet * getOrCreateStateSet ()
說明:得到或者創(chuàng)建狀態(tài)指針。一旦返回該指針,該指針便可與該結點關聯(lián),改變該指針就會改變該結點的狀態(tài)值。
35、osg::StateSet * getStateSet ()
const osg::StateSet * getStateSet () const
說明:得到狀態(tài)指針,如果沒有綁定過,則返回空。
36、void setInitialBound (const osg::BoundingSphere &bsphere)
說明:設置初始包圍球。參數(shù)表示一個包圍球。如果dirty了,將會改變該球的值。等于關聯(lián)了一個球球。
37、const BoundingSphere & getInitialBound () const
說明:得到初始球。返回該球球的引用。
38、void dirtyBound ()
說明:要求計算包圍球球。
39、const BoundingSphere & getBound () const
說明:得到包圍球球。
40、virtual BoundingSphere computeBound () const
說明:計算包圍球球。
41、void setComputeBoundingSphereCallback (ComputeBoundingSphereCallback *callback)
說明:設置包圍球回調,當計算包圍球時會調用該函數(shù),該參數(shù)為回調指針。
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則只釋放與之有關聯(lián)的對象,從而釋放與之有關聯(lián)的上下文。否則會為釋放一切圖像上下文釋放一切對象。
?
二、osg::Group類
?
類描述:對結點起到組織作用,一般做為父結點或者根結點出現(xiàn)。它允許有一系列的孩子,相同的孩子或者孩子之間有引用重得加入的會共享內存,是通過父類osg::Referenced實現(xiàn)自動管理內存句柄的。它繼承與osg::Node
1、Group ()
Group (const Group &, const CopyOp ©op=CopyOp::SHALLOW_COPY)
說明:構造函數(shù)。第二個構造函數(shù)意思為從一個已知的Group構造新的Group。參數(shù)表示拷貝類型,默認是淺拷貝,拷貝類型,默認為淺拷貝,可以是深拷貝:DEEP_COPY_OBJECTS
2、virtual Group * asGroup ()
virtual const Group * asGroup () const
說明:返回一個Group指針,這是為了提供給子類所使用的。當對象為非指針時也可以使用。
3、virtual void traverse (NodeVisitor &nv)
說明:接受一個NodeVisitor向上遍歷訪問,nv為訪問器參數(shù),注意傳入為引用類型。
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)
說明:移除某個孩子,移除成功則返回真,否則返回假。第一函數(shù)為以某個孩子的指針為參數(shù)移除它。第二個是以第pos個孩子為參數(shù)移除pos之后的numChildrenToRemove個,要刪除的孩子指針值。
7、virtual bool removeChildren (unsigned int pos, unsigned int numChildrenToRemove)
說明:刪除一些孩子,從第pos個孩子后刪除一些孩子。numChildrenToRemove要刪除的孩子數(shù)量。
8、virtual bool replaceChild (Node *origChild, Node *newChild)
說明:使用某個結點,代替某個孩子,origChild表示舊孩子,就是被替掉的那個孩子。newChild表示新孩子,要頂上去的孩子。
9、unsigned int getNumChildren () const
說明:得到該組的孩子數(shù)量。返回孩子數(shù)量值。
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
說明:判斷該組是否包含參數(shù)所指node.如果包含則返回真,否則返回假。
13、unsigned int getChildIndex (const Node *node) const
說明:得到參數(shù)所指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則只釋放與之有關聯(lián)的對象,從而釋放與之有關聯(lián)的上下文。否則會為釋放一切圖像上下文釋放一切對象,
?
三、osg::Switch類
?
類說明:Switch是一個管理類,它下面可以有很多子類,它就像是一個開關可以控制子類的顯示與隱藏,而這種隱藏是不耗費內存的,與SetNodeMask對比有明顯的優(yōu)勢,SetNodeMask事實上只是隱藏了結點,但結點仍被繪制。該類是從Node和Group派生而來,故可以被加入組結點以及asGroup等等種種方法。是一個非常常用的類。
1、Switch ()
Switch (const Switch &, const CopyOp ©op=CopyOp::SHALLOW_COPY)
說明:構造函數(shù)。第二個構造函數(shù)為從已知的Switch構造出新的Switch。拷貝類型為參數(shù)二控制。默認值為淺拷貝,深拷貝為: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)
說明:設置孩子開關值,以結點指針為參數(shù)。如果value為真則設置為開,否則設置為關。
12、bool getChildValue (const Node *child) const
說明:得到孩子的開關值,以孩子指針做為參數(shù)。
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 ©op=CopyOp::SHALLOW_COPY)
MatrixTransform (const Matrix &matix)
說明:構造函數(shù),第二個構造函數(shù)為從一個現(xiàn)有MatrixTransform來構造新的MatrixTransform。可以確定拷貝類型,默認為淺拷貝,可以為深拷貝:DEEP_COPY_OBJECTS。而第三個構造函數(shù)為從一個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所指結點由局部坐標系統(tǒng)轉向世界坐標系統(tǒng) ,或由世界坐標系統(tǒng)轉向局部坐標系統(tǒng)。得到矩陣值,矩陣值也可以轉換為坐標,轉換成功返回true,失敗返回false.
?
總結
以上是生活随笔為你收集整理的osg节点函数功能汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 制作漫画风图片(无需下载APP无需PS无
- 下一篇: getParentalNodePaths