構造實體幾何
![](http://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Csg_tree.png/220px-Csg_tree.png)
構造實體幾何(英文為 Constructive solid geometry,縮寫為 CSG)是實體造型中應用的一項技術。CSG 是 三維計算機圖形學與CAD中經常使用的一個程序化建模技術。在構造實體幾何中,建模人員可以使用邏輯運算符將不同物體組合成複雜的曲面或者物體。 CSG 可以用簡單的實體來構造或表達非常複雜的模型或者曲面[1]。在有些場合中,構造實體幾何只在多邊形網格上進行處理,因此可能並不是程序化的或者參數化的。
最簡單的實體被稱為體元或幾何圖元,通常是形狀簡單的物體,如立方體、圓柱體、稜柱、稜錐、球體、圓錐等。根據每個軟件包的不同這些體元也有所不同,在一些軟件包中可以使用彎曲的物體進行 CSG 處理,在另外一些軟件包中則不支持這些功能。
構造物體就是將體元根據集合論的布爾邏輯組合在一起,這些運算包括:併集、交集以及補集。
布爾運算(Boolean)
[編輯]在建模軟件包中,如立方體、球體、環體以及其它基本幾何體都可以用數學公式來表述,它們統稱為體元。通常這些物體用可以輸入參數的程序來描述,例如球體可以用球心坐標及半徑來表示。這些體元都可以經下面的操作組合成複雜的物體:
併集 | 補集 | 交集 |
---|---|---|
將兩個物體組合成一個 | 從一個物體中減去另一個 | 兩個物體共有的部分 |
構造實體幾何的應用
[編輯]![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Boolean_raytrace.svg/275px-Boolean_raytrace.svg.png)
構造實體幾何有許多實際的應用,在需要簡單幾何物體的場合或者數學精度很關鍵的場合都有應用。 虛幻引擎、Source引擎 的映射引擎 Hammer 以及 Quake 都在使用這項技術[1]。(Hammer 實際上最初來自於 Worldcraft,它是 Quake 的一個場景編輯器。)BRL-CAD 是一個基於構造實體幾何造型技術的實體造型CAD軟件包。由於可以用相對簡單的物體來生成非常複雜的幾何形狀,因此構造實體幾何得到了廣泛的流行。如果構造實體幾何是程序化的或者參數化的,那麼用戶可以通過修改物體的位置或者邏輯運算對複雜物體進行修改。
構造實體幾何方法生成的複雜幾何體都是密閉的物體,這些物體的表面上不存在難以察覺的縫隙[2]。而如果使用邊界表示來生成幾何體,則需要拓撲學數據或者額外的連續性檢測,來保證生成密閉的幾何體。對於一些工程計算而言,幾何體必須是密閉的。
如果使用構造實體幾何來表示幾何體,那麼很容易判斷某一個理想的點是否在幾何體內。因為形狀規則的幾何圖元和點的位置關係易於判斷,而根據幾何體的邏輯表達式合成幾何圖元的判斷結果後,就可以得到複雜幾何體的判斷結果[3]。因此可以在光線追蹤任務中用構造實體幾何表示物體。
示例程序
[編輯]參考文獻
[編輯]- ^ 1.0 1.1 Bloomenthal, Jules; Bajaj, Chandrajit, 5.2.5 Intersection with CSG Trees, Introduction to Implicit Surfaces, Morgan Kaufmann: 178–180, 1997 [2021-01-09], ISBN 9781558602335, (原始內容存檔於2017-04-23).
- ^ van Rossen, Sander; Baranowski, Matthew, Real-time constructive solid geometry, Ansari, Marwan (編), Game Development Tools, CRC Press: 79–96, 2011 [2021-01-09], ISBN 9781439867723, (原始內容存檔於2017-01-01).
- ^ Glassner, Andrew S., An Introduction to Ray Tracing, Morgan Kaufmann: 80, 1989 [2021-01-09], ISBN 9780122861604, (原始內容存檔於2017-01-01).
外部連結
[編輯]- GNU Triangulated Surface library (頁面存檔備份,存於互聯網檔案館) - 具有在三角形網格上進行構造實體幾何處理能力的開放原始碼(LGPL)庫
- Computational Geometry Algorithms Library (頁面存檔備份,存於互聯網檔案館) - 有構造實體幾何處理能力的開放原始碼(LGPL,QPL)庫