我正在使用 Javascript 庫“Tess2”對一系列輪廓進行三角測量。

輪廓由一系列點組成(實心填充為負纏繞順序,孔為正纏繞順序)
但是,演算法輸出的結果三角形不再與輪廓及其填充顏色相關聯。
我將如何更改 Tess2(或任何其他細分輪廓的 javascript 庫)以允許在生成的三角形中保留顏色資料?
我試過到處尋找,但找不到解決方案。
uj5u.com熱心網友回復:
從我在源代碼中看到的,鑲嵌函式在回傳的物件中包含一個頂點索引:
Tess2.tesselate = function(opts) {
...
return {
vertices: tess.vertices,
vertexIndices: tess.vertexIndices,
vertexCount: tess.vertexCount,
elements: tess.elements,
elementCount: tess.elementCount,
mesh: debug ? tess.mesh : undefined
};
您可以使用每個頂點的顏色創建一個新陣列,然后使用物件中的vertexIndices來獲取頂點的顏色。
如果您希望每個面都有一個顏色,您只需要生成一個像上面這樣的陣列,這意味著為陣列中的每個頂點放置相同的頂點顏色。您還希望將所有這些資料包裝在某種方便的物件或類中。
[編輯]
事實證明,曲面細分演算法合并了相同位置的頂點,這意味著它完全重組了頂點陣列。有一種解決方案可以明確不合并具有重疊頂點的不同輪廓:
Tess2.tesselate({ contours: yourContours, elementType: Tess2.BOUNDARY_CONTOURS });
這應該保留原始頂點,但不是按照原始順序,用于vertexIndices獲取這些頂點的原始位置。
uj5u.com熱心網友回復:
經過多次失敗的嘗試,我終于到了那里。
我一直在嘗試通過一次曲面細分一次處理大量輪廓。我嘗試編輯曲面細分庫以使每個半邊保留其原始輪廓 ID。當它最終似乎起作用時,我有幾個尤里卡時刻,只是當我對它進行壓力測驗并發現它并不完美時才感到失望。
但事實證明我非常愚蠢......我所要做的就是用特定的填充對每個輪廓進行分組,然后獨立地對每個組進行細分。
我不明白對于每個內部輪廓填充,總會有一個相反的輪廓有效地包圍了外部輪廓回圈。例如,要表示一個帶有藍色盒子的紅色盒子,將有 2 個紅色輪廓和 1 個藍色輪廓。我認為它可以只用 1 個藍色輪廓和 1 個紅色表示,其中藍色也代表紅色輪廓的孔,因此獨立處理每個顏色組的輪廓對我來說沒有意義。
當我終于意識到這一點時,我想通了。
我已經在 github 上發布了一個解決方案,但我不確定它對任何人有多大用處:
我已經包含了一個非常全面的匯出器腳本,用于將輪廓(包括曲線)轉換為 Adob??e Flash/Animate 的多邊形路徑,這可能對某人有用。
我將很快在此基礎上撰寫一個 OBJ 匯出器,這樣我就可以在 3D 引擎中表示矢量圖形。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/512730.html
上一篇:如何在c源代碼中實作積分
下一篇:高維陣列乘法
