1 回答

TA貢獻1798條經驗 獲得超7個贊
解決方案 1 - 平凡
如果四邊形是凸的并且您知道頂點的順序,請使用indices = new double[6]{0,1,2,0,2,3};
解決方案 2 - 手動三角測量
如果四邊形是凸的,但您不確定順序,請測試方向并調整索引。
edge1 = vertices3D[1] - vertices3D[0];
edge2 = vertices3D[2] - vertices3D[0];
edge3 = vertices3D[3] - vertices3D[0];
normal12 = Vector3.Cross(edge1, edge2);
normal23 = Vector3.Cross(edge2, edge3);
if (Vector3.Dot(normal12, normal23) > 0)
indices = new double[6]{0,1,2,0,2,3};
else
indices = new double[6]{0,1,3,0,3,2};
解決方案 3 - 使用三角測量儀
如果四邊形不是凸的,或者您確實必須使用庫 Triangulator,請變換所有頂點,使它們位于 XY 平面上,第一個頂點位于(0,0,0).
edge1 = vertices3D[1] - vertices3D[0];
edge2 = vertices3D[2] - vertices3D[0];
normal = Vector3.Cross(edge1, edge2).normalized;
rotation = Quaternion.FromToRotation(normal, new Vector3(0,0,1));
Vector2[] vertices2D = new Vector2[vertices3D.Length];
for (int i=0; i<vertices3D.Length; i++) {
rotatedVertex = rotation * (vertices3D[i]-vertices3D[0]);
vertices2D[i] = new Vector2(rotatedVertex.x, rotatedVertex.y);
}
我不建議僅將 4 個點用于形成墻的三角測量儀。但是,對于復雜的多邊形和非凸形狀,它應該會很方便。
- 1 回答
- 0 關注
- 140 瀏覽
添加回答
舉報