網格(mesh)簡化

2021-06-21 20:32:02 字數 848 閱讀 2038

我已經耗費了好幾天簡化地圖-感覺上我似乎會階段性地遇到這個問題。在重新簡化的過程中,我意識到這個問題說起來比我想象中的會簡單

在乙個給定範圍(也就是,乙個線段的集合和既不是線段交點也不是線段的端點的自由點)內我們可以迭代地用一條「捷徑」線段替代鄰近的線段進行簡化(例如:用線段pr代替pq和qr線段)並且給定條件如下:

頂點的度q為2(例如:只有pq和qr有點q)。

線段pr不在集合範圍內。

三角形pqr(不是位於p和r之間)。按照定義來說pq和qr上沒有其他的點。

測試3——對於佔位點(也就是在三角形pqr內或其邊上的點)測試——是關鍵。如果pqr內有多餘的點,那麼就會產生一些島型幾何圖形(或自由頂點)並且再簡化之後就會出現在pqr不正確的那邊,或者,幾何圖形與pr外的部分「連線」且pr會與圖中線段相交。這兩種情況下都不應該對網格進行簡化。

鑑於此,我們可以構建乙個迭代演算法簡化網格:把每個通過這些測試的基礎後的頂點放到乙個佇列,測試基於移除該點會導致錯誤的原理。移除第乙個頂點,基於變化的誤差度量重新排列相鄰頂點。請注意,如果其中的"佔位點"從測試3此前已移除,乙個以前被"困"的頂點現在可能是可移除的了。

該區域不是我們想要的

通過計算區域此前我已編碼類似的邏輯,——即找到每乙個和pr相交的點、線、面。這有幾個問題: 規劃區域的計算的代價是很高的。給出了乙個x條邊的簡單多邊形,我們就必須要做x區計算一樣多的計算(如果任一頂點的移除都是合法的)和區域還要迭代計算多邊形邊界。因此,我們有乙個o(n^2)計算,乙個由大量較小的編組成的巨大多邊形的計算是相當痛苦的工作。(悲劇的是,這正是我此前資料的樣子。 )這樣做區域計算是錯誤的,即便我們的程式沒有崩潰,如果區域內有洞在三角形pqr 中,那麼我們還是不應該去簡化。因此,在進行區域計算的同時要迭代繞過洞。

合併Mesh網格

1 對於具有相同材質的物件,可以通過把他們的mesh網格 mesh filter 合併在一起,然後禁用被合併的物件,來達到減少drawcall的效果 void start transform.getcomponent mesh new mesh transform.getcomponent mesh...

通過Mesh生成網格

gameobject obj new gameobject go meshfilter mf obj.addcomponent meshrenderer mr obj.addcomponent 新增乙個材質球 mr.sharedmaterial resources.load material 第乙個...

直線或線段與mesh網格相交的計算

第一步 判斷直線是否與三角形平面平行或在三角形平面內,這一步只需做直線方向向量與三角形法向量的點積即可,不詳細敘述。第二步 把三角形投影到二維平面上,我們可以想象一下把空間中的三角形投影到以已知直線作為法線的平面上,那麼直線在平面內的投影就只是乙個點,而三角形在該平面上還是乙個三角形,要判斷直線是否...