【问题标题】:Remove vertices duplicates from mesh in unity统一从网格中删除重复的顶点
【发布时间】:2019-06-20 06:41:28
【问题描述】:

我需要从复杂度优于 O(n^2) 的统一网格中删除重复的顶点。我尝试使用 SortedList 和 Dictionary,但似乎无法使用 Vector3 作为索引,因为比较方法存在问题:

    int[] triangles = srcMesh.triangles;
    int ntriangles = triangles.Length;
    Vector3[] vertices = srcMesh.vertices;
    SortedList<Vector3, int> distinctVertices = new SortedList<Vector3, int>();
    int ind = 0;
    for (int i = 0; i < nvertices; i++)
    {
        if (!distinctVertices.ContainsKey(vertices[i]))
            distinctVertices.Add(vertices[i], ind++);
    }
    for (int i = 0; i < ntriangles; i++)
        triangles[i] = distinctVertices[vertices[triangles[i]]];
    foreach (Vector3 distinct in distinctVertices.Keys)
        vertices[distinctVertices[distinct]] = distinct;
    nvertices = distinctVertices.Count;`


ArgumentException: does not implement right interface
System.Collections.Generic.Comparer`1+DefaultComparer[UnityEngine.Vector3].Compare (Vector3 x, Vector3 y) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/Comparer.cs:86)
System.Collections.Generic.SortedList`2[UnityEngine.Vector3,System.Int32].Find (Vector3 key)
System.Collections.Generic.SortedList`2[UnityEngine.Vector3,System.Int32].ContainsKey (Vector3 key)
Extrusion.Start () (at Assets/Extrusion.cs:55)

【问题讨论】:

    标签: c# unity3d mesh


    【解决方案1】:

    您可以实现自己的IComparer&lt;Vector3&gt; 并将其传递给SortedList 构造函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 2018-06-12
      • 1970-01-01
      • 2017-08-30
      相关资源
      最近更新 更多