OSG坐標系統


1、世界坐標
        世界坐標系描述的是整個場景中所有的對象,可以理解為絕對坐標系,所有對象的位置都是絕對坐標。從整體上考慮,它為所有對象的位置提供一個絕對的參考標准,從而避免了物體之間由於獨立的物體坐標系而導致的坐標系混亂。

2、物體坐標系

        每一個物體都有自己的坐標系,當物體發生交換時,實際上是它本身的坐標系相對於世界坐標系發生變換的過程。
        物體坐標系通常描述的問題是特定物體的內部對象,主要包括物體的頂點,物體的法向量和物體的方向。

3、攝像機坐標系

        攝像機坐標系與屏幕坐標系類似,只不過攝像機坐標系位於3D空間,而屏幕坐標系位於2D空間。


 
 
OSG的坐標系:X正方向向右,Y正方向朝里,Z正方向朝上。
 
 
*****坐標系變換*****
》》物體坐標系->世界坐標系
       #-> 計算場景中某一特定節點在世界坐標系下的坐標,只需要將該節點的根結點和該節點之間的所有變換矩陣相乘即可。
       #->實現方式:
                    回調,訪問器等;
                    訪問器是一種方便可操控的方式,相對而言,回調在一定程度上不具備課操控性,且會因為增加額外開銷而影響渲染 效率。
                $->訪問器的實現:
                    訪問器通過遍歷的方式記錄場景中節點的路徑,並計算路徑上矩陣變換的世界坐標,最終返回一個矩形式表示的世界坐標,下面是《OpenSceneGraph三維渲染引擎編程指南》中的示例代碼:
                     clipboard
                    
                    
                     clipboard
 
 
 
 
*****屏幕坐標->世界坐標*****
                      
 
 
 
OSG中國區論壇上 http://bbs.osgchina.org/forum.php?mod=viewthread&tid=4240&highlight=%BD%DA%B5%E3%2B%CA%C0%BD%E7%D7%F8%B1%EA關於獲得根結點下某個子節點的世界坐標,Array給的回答:
                        geode->getBound().center() * osg::computeLocalToWorld(geode->getParentalNodePaths()[0])      //經測試,可行
可以獲得子節點的世界坐標,據說是最簡單的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM