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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章