2016-01-18 49 views
1

我想通過平面切割網格。 嘗試使用此代碼,但只能獲得切割網格的一部分。(http://prntscr.com/9rne81http://prntscr.com/9rned3)。在Unity3d中如何通過平面切割網格

public void SliceIt() 
{ 
    Vector3[] vertices = mesh.vertices; 

    Transform clone = clone = ((Transform)Instantiate(transform, transform.position + new Vector3(0, 0.25f, 0), transform.rotation)); 

    Mesh meshSlice = clone.GetComponent<MeshFilter>().sharedMesh; 
    Vector3[] verticesSlice = meshSlice.vertices; 

    List<Vector3> verticesSlice2 = new List<Vector3>(); 

    Mesh cutplanemesh = cutplane.GetComponent<MeshFilter>().sharedMesh; 
    Vector3[] cutplanevertices = cutplanemesh.vertices; 

    p1 = cutplane.TransformPoint(cutplanevertices[40]); 
    p2 = cutplane.TransformPoint(cutplanevertices[20]); 
    p3 = cutplane.TransformPoint(cutplanevertices[0]); 
    var myplane = new Plane(p1, p2, p3); 

    for (var i = 0; i < vertices.Length; i++) 
    { 
     var tmpverts = transform.TransformPoint(vertices[i]); // original object vertices 

     if (myplane.GetSide(tmpverts)) 
     { 
      vertices[i] = transform.InverseTransformPoint(new Vector3(tmpverts.x, tmpverts.y - (myplane.GetDistanceToPoint(tmpverts)), tmpverts.z)); 

      verticesSlice[i] = transform.InverseTransformPoint(new Vector3(tmpverts.x, tmpverts.y, tmpverts.z)); 
      var v = transform.InverseTransformPoint(new Vector3(tmpverts.x, tmpverts.y, tmpverts.z)); 
      verticesSlice2.Add(v); 
     } 
     else 
     { 
      var v = transform.InverseTransformPoint(new Vector3(tmpverts.x, tmpverts.y - (myplane.GetDistanceToPoint(tmpverts)), tmpverts.z)); 
      verticesSlice2.Add(v); 
     } 
    } 

    mesh.vertices = verticesSlice; 
    mesh.RecalculateBounds(); 

    meshSlice.vertices = verticesSlice2.ToArray(); 
    meshSlice.RecalculateBounds(); 

}

我做這個代碼這個:http://unitycoder.com/blog/2011/08/09/fake-mesh-slicer-v3-0/#comments

我這樣說的:http://answers.unity3d.com/questions/450272/cutting-a-mesh-into-smaller-pieces.html 但我dont`t知道如何三角形分割屬於平面的正面和反面。

回答