基于圖像CSG的庫 OpenCSG 1.3.2 發布
OpenCSG是一個基于圖像CSG的庫,CSG使用OpenGL渲染。OpenCSG使用c++編寫,并支持Microsoft Windows或Linux操作系統下最先進的圖形硬件。
什么是CSG呢?CSG是Constructive Solid Geometry(構造實體幾何)的縮寫,它使用簡單的3D圖形來構造復雜圖形。也就是說,通過附加或求差的方法可以進行圖形的組合,那些不是由CSG操 作產生的最基本的圖形稱之為primitives(基元),基元必須是實體,即基元必須要有明確的內部或者外部定義。通過構建,一個CSG也一定是實體。
基于圖像的CSG渲染(深度緩沖區CSG渲染)是一個專用名詞,它為幾何邊界未經過明確計算的 CSG形狀指定渲染算法,這種算法使用圖形硬件的幀緩沖區設置,如深度緩存或模板緩存,來構建CSG形狀。OpenCSG實現多種算法結合,其中就有 goldfeather算法和SCS算法。
優點:
CSG是經常被用作在CAD/CAM應用程序中的基本建模技術。這里,基于圖像的CSG是交互操作CSG形狀的關鍵。由于OpenCSG對更復雜的圖像渲染較為快速,所以它能有效地在這些應用中使用。
很久以前諸如PovRay這樣的繪圖工具就已經使用CSG進行圖像建模了。盡管這種繪圖工具的互動建模工具包恰恰忽略CSG命令,但OpenCSG代表了這種應用軟件的一種有價值的附加品。
總的來說,到目前為止CSG渲染已經幾乎沒有再用于交互式應用程序,因為所需的算法復雜且容易出錯。我們希望通過提供一個免費的庫,這個庫是易于使用、快速靈活的,這將使它比目前更為主流。
先決條件:
OpenCSG的庫要求在OpenGL中也支持PBuffer或幀緩沖對象的圖形硬件。在PBuffers條件下,如果渲染到紋理的相關設備也被支持這將是有利的,如今OpenCSG使用RenderTexture類作為PBuffer庫。
一直以來,PBuffers已被廣泛支持。NVidia至少自 Radeon 系列就開始支持PBuffers,隨后是Riva TNT 和 ATI;其他供應商生產的圖形硬件似乎并不支持PBuffers。因此,如果您不熟悉圖形硬件并且運氣較差的話可能就無法使用OpenCSG來運行程序。 在Linux條件下,您可能需要選擇同時支持OpenGL軟件渲染與PBuffers。
幀緩沖對象是OpenGL的一個較新的擴展。它們更易于用作開發,現在(2010年)已經成熟。它們也是OpenGL3.0的一部分、從1.2.0OpenCSG開始在默認情況下使用OpenCSG,在較舊的版本中默認使用PBuffers。
對于OpenGL擴展檢查,OpenCSG使用OpenGL擴展甲等庫GLEW。
OpenCSG寫在c++中,使用命名空間,并需要STL。在Windows下我不希望主要編 譯器不兼容。MSVC6, VC2003 .net和Dev-C++ 5 beta都提供相應的工作區。在Linux環境下,您應該使用gcc3或者更高版本。由于該編譯器并不能處理必須在內部使用的std::map實現,致使 gcc 2.95.x不再有效。
要運行好OpenCSG,您應該有高填充率的圖形硬件。NVidia 圖形硬件自從 GeForce 和 ATI Radeon 以后滿足了以上要求。在OpenCSG::OcclusionQuery選項顯然需要封閉查詢,這個選項功能是從Radeon 9x00(x>= 5)和GeForce3(注意,GeForce4MX的數量為GeForce2!)顯卡芯片出現以后才開始支持的。
OpenCSG 已成功地在英特爾和AMD的硬件上使用 Radeon HD 4670、 GeForce 8 x 00、GeForceFX 6800、5600 GeForceFX,Radeon 9700、 GeForce3、GeForce4MX 和 TNT2圖形硬件運行(越往后越慢)。
在Radeon9000上,OpenCSG會在除了標準Goldfeather渲染路徑以外的其他任何地方產生渲染錯誤,這一情況曾廣為人知,這是否是驅動器的問題并不很清楚。我沒有在NVidia或ATI/AMD以外的圖形硬件上運行OpenCSG的經驗。
使用情況:
OpenCSG的接口非常容易使用。只有一個叫做OpenCSG::Primitive的抽象類。A基元對象包含一個表示是附加還是求差的屬性操作。使用OpenCSG可以通過執行render()方法來創建一個派生自具體基元的類。
如今實現CSG渲染,有一個將std::vector<Primitive*> 作為參數的函數OpenCSG::render()。渲染函數求由基元組得出的CSG表達式的值并使用CSG的固有值來初始化深度緩沖區。顏色緩沖區仍然 沒有改變,此后您必須使用一個以GL_EQUAL為參數的深度函數來隱藏數組中的基元。
OpenCSG 1.3.2 發布了,這是一個維護版本,修復了大量關于渲染方面的問題。
項目地址:http://www.opencsg.org/