OSG簡介
OpenSceneGraph(簡稱OSG)使用OpenGL技術開發,是一套基於C++平台的應用程式介面(API)。OpenGL技術為圖形元素(多邊形、線、點等)和狀態(光照、材質、陰影等)的編程提供了標準化的介面。而OSG開發的主要意義在於,將3D情境定義為空白間中一系列連續的對象,以進行三維世界的管理。正是由於情境及其參數定義的特點,通過狀態轉化、繪圖管道和自定製等操作,OSG還可以用於最佳化渲染效能。 可以運行OSG的平台需要具備OpenGL的支援能力,以及C++的編譯環境,支援OSG的系統包括Solaris,IRIX,Windows,Mac OSX,HP-UX,Sony Platystation等等,不過XBox除外。
OSG是一個開源系統,主要包括情境圖形核心,Producer庫,OpenThread庫以及使用者外掛程式四個部分。自Robert Osfield主持這個項目以來,OSG就作為一個開放原始碼的圖形開發工程開始在全球運作了。
目前,部分高效能的軟體已經使用了OSG來渲染複雜的2D和3D情境。雖然大部分基於OSG的軟體更適用於可視化設計和工業模擬,但是在使用3D圖形的每個領域,都已經出現了OSG的身影。這其中包括了地理資訊系統(GIS),電腦輔助設計(CAD),建模和數字內容創作(DCC),資料庫開發,虛擬現實,動畫,遊戲和娛樂業。
簡單的執行個體匯入一個模型
#include <osgViewer/Viewer> #include <osgDB/ReadFile> #include <osg/DrawPixels> #include <osg/Geode> #include <osg/MatrixTransform> #include <osgViewer/ViewerEventHandlers> #include <osgGA/StateSetManipulator> int main(){osgViewer::Viewer viewer; //添加狀態事件 viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); //視窗大小變化事件 viewer.addEventHandler(new osgViewer::WindowSizeHandler); //添加一些常用狀態設定 viewer.addEventHandler(new osgViewer::StatsHandler); osg::Group *root = new osg::Group(); osg::ref_ptr < osg::Node> b25 = osgDB::readNodeFile("F://Models//B25//B25.IVE") ; // 對模型進行變換 osg::ref_ptr < osg::MatrixTransform> scale = new osg::MatrixTransform ; scale ->setMatrix(osg::Matrix::rotate(osg::DegreesToRadians(45.0), 1, 0, 0)*osg::Matrix::scale(0.5, 0.5, 0.5)*osg::Matrix::translate(4, 0, -2)) ; scale ->addChild(b25.get()) ; root->addChild(scale.get()); viewer.setSceneData(root); viewer.realize(); return viewer.run(); }