Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice

(SOLVED)RaycastHit.triangleIndex didn't work after I modified the mesh triangles

Discussion in 'Scripting' started by yam4863245, Dec 19, 2019.

  1. yam4863245

    yam4863245

    Joined:
    Apr 9, 2017
    Posts:
    2
    want to add a vertex to a mesh ,it's doing well when first time
    but after that RaycastHit.triangleIndex seems didn't give a correct value

    line.jpg I

    if mouse on the triangle , should draw it

    sda.jpg
    when I added a vertex on mouse position ,it didn't draw the correct triangle

    Code (CSharp):
    1. void Update()
    2.     {
    3.         RaycastHit hit = ShootRay();
    4.         if (null == hit.collider) return;
    5.  
    6.         MeshCollider meshCollider = hit.collider as MeshCollider;
    7.         if (meshCollider == null || meshCollider.sharedMesh == null)
    8.             return;
    9.  
    10.         Mesh mesh = meshCollider.GetComponent<MeshFilter>().mesh;
    11.         Vector3[] vertices = mesh.vertices;
    12.         int[] triangles = mesh.triangles;
    13.         var tri = GetTriangle( triangles, vertices, hit.triangleIndex);
    14.         Vector3 p0 = tri.p1;
    15.         Vector3 p1 = tri.p2;
    16.         Vector3 p2 = tri.p3;
    17.         Debug.LogFormat("[{0},{1},{2}]", tri.i1, tri.i2, tri.i3);
    18.         Transform hitTransform = hit.collider.transform;
    19.         p0 = hitTransform.TransformPoint(p0);
    20.         p1 = hitTransform.TransformPoint(p1);
    21.         p2 = hitTransform.TransformPoint(p2);
    22.         Debug.DrawLine(p0, p1,Color.red);
    23.         Debug.DrawLine(p1, p2,Color.red);
    24.         Debug.DrawLine(p2, p0, Color.red);
    25.  
    26.         if (Input.GetMouseButtonDown(0))
    27.             AddVertexAt(hit.point,mesh,hit.triangleIndex);
    28.     }
    29.  
    30.     List<Vector3> vertexBuffer = new List<Vector3>();
    31.     List<int> trianglesBuffer = new List<int>();
    32.  
    33.     void AddVertexAt(Vector3 point,Mesh mesh,int triangleIndex)
    34.     {
    35.         int baseIndex = triangleIndex * 3;
    36.  
    37.         mesh.GetVertices(vertexBuffer);
    38.         trianglesBuffer.Clear();
    39.         trianglesBuffer.AddRange( mesh.GetTriangles(0));
    40.         vertexBuffer.Add(point);
    41.    
    42.         int newPointIndex = vertexBuffer.Count - 1;
    43.  
    44.         Triangle tri = GetTriangle(trianglesBuffer.ToArray(), vertexBuffer.ToArray(), triangleIndex);
    45.  
    46.         for (int i = 0; i < 3; i++)
    47.             trianglesBuffer.RemoveAt(baseIndex);
    48.  
    49.         trianglesBuffer.AddRange(new int[] { tri.i1, tri.i2, newPointIndex  });
    50.         trianglesBuffer.AddRange(new int[] { tri.i1, newPointIndex, tri.i3 });
    51.         trianglesBuffer.AddRange(new int[] { tri.i3, newPointIndex, tri.i2});
    52.         Debug.LogFormat("[{0},{1},{2}]", tri.i1, tri.i2, tri.i3);
    53.  
    54.         mesh.Clear();
    55.         mesh.vertices = vertexBuffer.ToArray();
    56.         mesh.SetTriangles(  trianglesBuffer.ToArray(),0);
    57.         mesh.RecalculateNormals();
    58.  
    59.     }
    60.  
    61.     Triangle GetTriangle( int[] triangles, Vector3[] vertexes,int triangleIndex)
    62.     {
    63.         Triangle triangle = new Triangle();
    64.         int baseIndex = triangleIndex * 3;
    65.         triangle.i1 = triangles[baseIndex];
    66.         triangle.i2 = triangles[baseIndex + 1];
    67.         triangle.i3 = triangles[baseIndex + 2];
    68.         triangle.p1 = vertexes[triangle.i1];
    69.         triangle.p2 = vertexes[triangle.i2];
    70.         triangle.p3 = vertexes[triangle.i3];
    71.         return triangle;
    72.     }
     
    Last edited: Dec 19, 2019
  2. yam4863245

    yam4863245

    Joined:
    Apr 9, 2017
    Posts:
    2
    sloved, I didn't update meshcollider's mesh