OpenCSG

CSG使用Open Open Open

概述:
OpenCSG是一個基於圖像CSG的庫,CSG使用OpenGL渲染。OpenCSG使用c++編寫,並支持Microsoft Windows或Linux作業系統下最先進的圖形硬體。OpenCSG-1.2.0是最新的版本。
什麼是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為參數的深度函式來隱藏數組中的基元。

相關詞條

相關搜尋

熱門詞條

聯絡我們