簡體   English   中英

從3D對象獲取2D凹面多邊形

[英]Get a 2D concave polygon from a 3D object

目前我的3D項目時間已用盡,所以我決定將所有物理和碰撞都交給Box2D, 因為我的項目將僅使用2D碰撞,但具有3D圖形

Box2D世界將是自上而下的,因此我需要將3D對象放平到2D多邊形中。 這就像從每個頂點刪除y坐標一樣容易,但是Box2D不會希望一堆頂點與實際對象重疊:

3D物件 自上而下的對象(展平)

因此,我想就如何實現算法(或應該使用的庫?)獲得一些建議,以得到一個漂亮的漂亮多邊形,如下所示:

漂亮的漂亮多邊形

還是更容易生成OOBB?

編輯:我現在意識到Box2D只采用凸形! 但是,這對於具有更精確物理學的其他庫仍然可能有用。

謝謝!

為了計算3D對象的2D表示形式,一種可能的方法是柵格化:從頂視圖創建對象的二進制柵格圖像(“二進制”表示每個像素只有黑色或白色),然后使用一組黑色像素作為2D對象表示形式,或者如果您仍然想要多邊形,則可以運行邊界遍歷算法來計算構成此2D對象邊界的像素序列。 該算法的精度取決於像素分辨率。 一種這樣的實現是OpenCV的findContours( http://docs.opencv.org/2.4/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html )。

擁有像素序列后,您可能希望簡化多段線,以保持較低的頂點數,以便對該多段線的后續操作將運行得更快。 (請參閱http://doc.cgal.org/latest/Polyline_simplification_2/index.html


更一般而言,如果要進行碰撞,則需要從確定碰撞檢測的精確度開始。 如果需要高精度的3D碰撞檢測,則將平面展平到2D並不是一個好方法。 因此,如果需要高精度和高性能,則必須對網格進行一些預處理,例如計算軸對齊的邊界框或邊界球的層次樹( https://en.wikipedia.org/wiki/Bounding_volume_hierarchy ) 。 如果您的對象經歷了剛性變換,那么邊界球會很好,因為球體在剛性變換下仍然是球體,因為邊界框在旋轉后不會保持軸對齊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM