OSG三維渲染引擎之OSG簡介


參考書籍《OpenSceneGraph三維渲染引擎設計與實踐》,作者王銳,錢學雷

一、場景圖形

1.概念

場景圖形(Scene Graph)是一種經常用於計算機游戲和圖形學相關軟件的數據結構設計方法。

2.應用

典型的應用了場景圖形概念的軟件系統包括AutoCAD、Java3D、CorelDRAW以及OSG。

3.場景圖形實現

簡單的場景圖形實現是使用數組或者鏈表,並按照固定的順序依次繪制或操作這些節點;

大規模場景管理的場景圖形往往使用圖結構(Graph Structure)或樹結構(Tree Structure)來組成一組節點集。

目前多數渲染引擎均采用一種自頂向下、分層的樹狀結構來組織空間數據集,以提升渲染的效率。

二、三維渲染引擎

1.概念

簡單來說,三維渲染引擎就是為了實現三維場景圖形的結構管理和繪制而提供的一系列API的集合。它應當包含至少兩個層次:構建層(Construction Layer)和交互層(Interaction  Layer),前者提供了在三維空間中設計和完成所需模型的工具集,或者從外部加載復雜模型的數據接口;后者則提供對三維空間及所含模型的裝配、渲染、優化和控制功能。

2.分類

三維渲染引擎分為低階引擎和高階引擎。

(1)低階引擎

OpenGL和DirectX均為低階引擎。

(2)高階引擎

不僅支持面向對象的開發方式,並且以場景圖形為基礎。

3.主流渲染引擎

PHIGS(Programmer's Hierachical Interactive Graphics System)、OpenInventor、OpenGL Performer、Cystal Space、Java3D、Unreal、OpenSG、OGRE3D、Irrlicht、Vega Prime、OpenSceneGraph

其中,

OGRE3D(Object-Oriented Graphics Rendering Engine)是一個面向場景的、靈活的三維渲染引擎,誕生於1999年,至今其開發團隊任然十分活躍。OGRE 3D主要針對游戲開發,可以使用OpenGL或DirectX作為底層支持,並支持多種高級特性。OGRE基於有改動的LGPL協議發布,並實現了場景八叉樹、BSP樹、CLOD以及分頁調度的機制,可以運行於Linux、Mac OS X和Window系統中。

三、OSG

1.概念

OpenSceneGraph是一個高性能開源三維圖形引擎,基於修改的LGPL協議(OSGPL)免費發布,廣泛應用於虛擬仿真、虛擬現實、科學和工程可視化等領域。它以OpenGL為底層平台,使用C++編寫而成,可運行於Windows、UNIX/linux、Mac OS X、IRIX、Solaris、HP-UX、AIX和FreeBSD等操作系統。其功能特性涵蓋了大規模場景的分頁支持,多線程、多顯示的渲染,粒子系統與陰影,各種文件格式的支持,以及對於Java、Perl、Python等語言的封裝。

2.優勢與不足

OSG引擎由一系列圖形學相關的功能模塊組成,主要為圖形圖像應用程序的開發提供場景管理和圖形渲染優化的功能。它使用可移植的ANSI C++編寫,並使用已成為工業標准為OpenGL底層渲染API。OSG具有跨平台的特性,可以運行在大多數類型的操作系統上,並使用抽象層的概念,使OSG的函數接口可以獨立於用戶的本地操作系統使用;但是OSG也包含了針對某些平台相關的支持代碼。

OSG遵循開源協議發布,其用戶許可方式是一種修改過的GNU寬通用公共許可證(GNU Lesser General Public License,LGPL),稱為OSGPL。

OSG主要具備以下優勢:

(1)快速開發。OSG場景圖形內封裝了幾乎全部的OpenGL底層接口,並隨時支持最新的擴展特性。應用程序的開發者可以將中心放在三維程序開發的實質性內容以及與各種場景對象交互的方法上,而不再過多關注底層的代碼。

(2)高品質。OSG經歷了許多開發成員的反復檢查、測試和改善,參與OSG核心代碼開發並有貢獻的人數很多。

(3)高性能。OSG的核心代碼支持多種場景的裁剪技術、細節層次節點、渲染狀態排序、頂點數組、顯示列表、VBO、PBO、FBO、OpenGL着色器語言等;以及文字顯示,粒子系統,陰影系統;雨、雪、火焰、煙霧等特效模擬,場景的東塔調度,線程渲染等各種機制。它們共同使OSG逐漸成為一個高性能的三維渲染引擎。

(4)高質量代碼

(5)可擴展性。基於場景圖形的擴展思想,OSG提供了強大的可擴展能力,包括各種類型的擴展節點(NodeKits,節點工具箱)、擴展渲染屬性、擴展回調、擴展交互事件處理器等,為用戶的程序開發提供了靈活的支持能力。

(6)可移植性。OSG提供了Windows、UNIX、Linux、Mac OS X、IRIX、Solaris、HP-UX、AIX和FreeBSD系統的移植能力,基於OSG開發的程序只要經過一次編寫,就可以編譯並運行在這些平台上,不需要關心更多的代碼移植的細節。

(7)低費用。開源意味着免費,使用和發布基於OSG開發的程序和軟件是不需要額外許可費用的。

(8)沒有知識產權問題。對於開源且易於所有人閱讀的代碼而言,不存在侵犯軟件專利的可能性。

不足:參考文檔較少、代碼風格不統一、部分功能的實現過於冗雜、無法應用於實踐等。

3.組成結構

OSG的功能類采用“命名空間+類名稱”的形式來命名。命名空間方式為第一個單詞小寫,后繼單詞首字母大寫,如osg Util;

類的名稱規則采用每個單詞首字母大寫的組合形式,如MatrixTransform

功能類的成員函數使用小寫字母開頭,之后每個單詞的首字母大寫,例setMatrix()

OSG引擎的組成部分包括一系列動態鏈接庫(.dll/so)、插件(.dll/.so)、供開發者使用的靜態鏈接庫(.lib/.a)、頭文件,以及可執行的工具程序和實例。

按其作用可分為:

OSG核心庫:提供了基本場景圖形和渲染功能,以及3D圖形程序所需的某些特定功能實現。其核心庫有:

osg庫,osgDB庫,osgUtil庫,osgGA庫,osgViewer庫

節點擴展工具箱(NodeKits):擴展了核心OSG場景圖形節點類的功能,以提供高級節點類型和渲染特效。節點擴展庫包括:

osgAnimation,osgFX,osgManipulator,osgParticle,osgShadow,osgSim,osgTerrain,osgText,osgVolume,osgWidget

OSG文件讀寫插件:其中包括2D圖像、3D模型文件和其他類型文件的讀寫功能插件,可以任意擴展或刪減

內省庫:提供了OSG與其他開發環境集成的功能

工具程序和示例集:提供了實用的工具和超過100個有關OSG使用和功能實驗的例子

歡迎關注我們的公眾號
---------------------
作者:Estelle_Z
來源:CSDN
原文:https://blog.csdn.net/qq_41631051/article/details/90263265
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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