2014-04-06 119 views
2

我想在我的跟蹤管線中有一個碰撞檢測模塊,用於檢測兩個不同網格碰撞/互相穿透或者是否存在鉸接網格的自穿透。根據滲透的深度,應該有一個懲罰來對付這種現象。爲了做到這一點,我應該得到碰撞面/頂點的列表。CGAL網格交叉/碰撞

檢查了幾個選項後,我決定開始使用CGAL

this link有一個有趣的答案指向一些例子。 (thisthis)。這些示例使用AABB(軸對齊邊界框),這是非剛性網格的建議方法,因爲需要頻繁更新它們。這些例子都清楚了自相交的情況下,但下面的不是很清楚,我:

  • 除了各三角形創建B.Box,我想這有引擎蓋下創建無樹結構加快搜索過程。是這樣嗎?如果是的話,任何暗示這樣做?
  • 在2個單獨的網格的情況下,我想這是不好的合併所有的三角形/盒在一個向量,並按照例子(雖然它被稱爲here作爲一種解決方案,它聽起來不那麼優雅)。任何暗示一個不錯的做法?應該通過創建三角形/盒子的樹來混合these的例子嗎?雖然對於AABB樹要提到的是:

注意,此組件適合尋找所有相交的對象對的問題。我們引用組件Intersecting Sequences of dD Iso-oriented Boxes,它可以找到所有交叉對的iso向盒。

回答

3
  1. 功能CGAL::box_intersection_d創建上飛段樹,以加快對相交AA-包圍盒的計算。
  2. 據我所知,推薦的方法是將兩個曲面合併到custom boxes的一個矢量中,其中框中有一個字段用於指示三角形所屬表面的標識符。這有助於快速丟棄來自同一表面的盒子對。
+0

謝謝Irineau!第一個問題/答案應該像你提到的那樣,否則事情會變得非常緩慢,但是在文檔中沒有明確提及樹下樹的創建,所以感謝你在那裏拋出一些光! –

+0

關於第二個問題/答案,您所說的話肯定是我能夠想象的唯一東西,但是我想知道它是否是最佳的,從這個意義上說:爲了避免檢查遠處的物體以及在目前的時間框架內沒有任何碰撞的機會,因此將所有對象的三角形放在一個向量中可能會導致一些加速(樹仍在使用),但可能不是最佳方式(頂部樹節點包括特定對象/對象組的三角形)。你有什麼想法嗎?再次感謝! –

+0

實際上,bbox相交包已經有了一個可以處理兩個bbox向量的函數。我在答案中使用的鏈接指向該版本。我提出的建議是針對你有兩套以上bbox的情況。 – lrineau