我需要通过一些方式把网格变换到另一个里,通过添加或者减去三角形或者顶点,并改变它们的位置。 我的目标是顺利的把我的"Monster"(一个单个的网格)变换到一个人(也是一个单个的网格)。有点像"Crumple Mesh Modifier",点击here可以看到。 原问题:“Tranform” a mesh into another programaticaly
答案:erdak 动态创建一个网格: MeshFilter meshFilter = GetComponent(); Mesh mesh = meshFilter.sharedMesh; if (mesh == null){ meshFilter.mesh = new Mesh(); mesh = meshFilter.sharedMesh; } Vector3 p0 = new Vector3(0,0,0); Vector3 p1 = new Vector3(1,0,0); Vector3 p2 = new Vector3(0,1,0); Vector3 p3 = new Vector3(0,0,1); // clear mesh of current data mesh.Clear(); // set vertices mesh.vertices = new Vector3[]{p0,p1,p2,p3}; // set mesh.triangles = new int[]{ 0,1,2, 0,2,3, 2,1,3, 0,3,1 }; mesh.RecalculateNormals(); mesh.RecalculateBounds(); mesh.Optimize(); 修改现有的顶点 (对于脸也类似): // mesh.vertices returns a copy Vector3[] vert_copy = mesh.vertices; vert_copy[0] = new Vector3(10,11,12); vert_copy[1] = new Vector3(13,14,15); // reassign new vertices to mesh mesh.vertices = vert_copy; mesh.RecalculateNormals(); mesh.RecalculateBounds(); mesh.Optimize(); 当你重新计算法线和界限的时候,这些调用变得复杂。如果转变的时候网格不会与其他网格互动, 你可以推迟RecalculateBounds()直到转变结束。相似的,如果你预计只有很小的每帧的转变,可以以每隔一帧或者每300毫秒限制ecalculateNormals()。
答案:erdak
动态创建一个网格:
修改现有的顶点 (对于脸也类似):
当你重新计算法线和界限的时候,这些调用变得复杂。如果转变的时候网格不会与其他网格互动, 你可以推迟RecalculateBounds()直到转变结束。相似的,如果你预计只有很小的每帧的转变,可以以每隔一帧或者每300毫秒限制ecalculateNormals()。