2014-09-24 48 views
2

我想在非凸多面體對象上實現布爾運算,並想用OpenGL渲染它們。我已閱讀了關於在多面體上執行布爾運算的兩種主要技術:邊界表示(BReps)和構造實體幾何(CSG)。 根據一些論文,使用CSG實現布爾應該更容易,所以我想使用CSG而不是BReps。 我知道BReps通過頂點和多邊形描述幾何體,而CSG使用基本原始對象,例如在樹結構中組合的圓柱體或球體。 我知道在BReps上執行布爾值是通過切割相交的多邊形並刪除那些不需要的多邊形來實現的(取決於操作符是否爲聯合或區別或...)。 但是如何在CSG方面實現布爾運算?我如何實現CSG布爾操作?我已經在互聯網上看過,發現這個例如http://evanw.github.io/csg.js/https://www.andrew.cmu.edu/user/jackiey/resources/CSG/CSG_report.pdf 奇怪的是,這些算法只是使用BReps爲他們的布爾值。所以我不明白CSG的優勢應該在哪裏,或者爲什麼CSG布爾應該更容易實現。構造實體幾何與邊界表示

回答

1

你以某種方式談論蘋果和梨。

CSG是一種通用的方法來描述基本元素的複雜實體,如果你想要的話,它是一個「算術」的實體。這個過程獨立於這些固體的確切表示。替代/互補建模技術的例子有自由表面生成,廣義柱面,代數方法...

BRep是基於頂點/邊/面圖結構的實體的可能表示之一。一些替代表示是空間佔用模型,例如體素和八分體。

通常,使用手頭的表示來評估CSG表達式;在某些情況下,原來的CSG樹就像這樣保留下來,在樹葉上留下基本的基元。

多面BRep模型在概念上很容易實現;無論如何,CSG表達評估是艱鉅的(多面體交叉引起不安的數值和拓撲問題)。

BRep的渲染需要對面進行三角測量,然後可以通過標準渲染管線進行處理。

體素模型既易於實現,又使得CSG表達式處理起來微不足道;另一方面它給出了形狀的粗略近似。

原始CSG樹可用於通過射線追蹤技術進行直接渲染:在通過射線遍歷所有基元后,可以使用CSG表達式組合射線部分。這種方法將相對簡單的實現與準確性相結合,代價是高昂的計算成本(所有內容都需要在圖像的每個像素以及每個視圖上重複)。

1

CSG模型僅代表應用於轉化後的原生質體的期望操作(聯合,交叉點等)。它並沒有真正修改原語(例如修剪立方體的角落)。你可以看到顯示在屏幕上的複雜模型的原因是因爲渲染引擎正在執行。顯示CSG模型時,通常有兩種方法:第一種方法是將其快速轉換爲Brep模型,第二種方法是使用CSG直接顯示算法,該算法通常基於scanline algorithmsim。所以,如果你已經有了一個很好的CSG渲染引擎,那麼你不必擔心修剪Brep模型,你的生活確實更容易。但是如果你必須自己編寫渲染引擎,那麼使用CSG就不會節省太多時間。

0
在我的意見CSG

在所有

  • 不容易,但它更精確的曲線
  • 的有沒有使用
  • 圓柱體,球體...
  • 而是有使用旋轉曲面南玻

操作

  • 如果在同一個軸上旋轉曲面上執行(bool)操作
  • 然後只需對曲線執行操作...(這是CSG比BRep更好的地方)
  • 當軸不是同樣的,你必須在CSG樹中創建新的條目
  • 也可以通過簡單地更新它們的大小來完成兼容對象上的操作(如盒子加入/切割具有相同的連接/相交表面)...
  • 但大多數實現不會做這樣的事情,而是每個操作都存儲在樹
  • 中,這會使得樹中的任何更改後渲染速度變慢
  • 也渲染必須做所有的操作,而不是在它自己的操作,但在渲染或預渲染階段
  • ,這使得CSG實現更復雜。
  • 我在看到它唯一的好處是,該模型可以有分析表示
  • 這是更準確,特別是如果多個操作是在它的上面......