概述
3d模型的任意切割一直是游戏开发里的一个很大的问题,模型切割的关键点就只有生成横切面的新顶点以及切口纹理的缝合,理论上解决了这两点,就近乎可以做到以假乱真的程度了。本篇文章就这两点进行描述
详细
一、准备工作
解压缩后得到ClipDemo.unitypackage文件,将此文件导入unity5.45中,双击main场景,运行即可。运行后可以看到一个球体,对着球体拖动鼠标做切割动作,可以看到Hierarchy面板生成多个new Model,即为切割生成的模型,可以在Scene中拖动这些物体,可以看到是切割后的物体。压缩包内容如下:
二、程序实现
如上图所示,当切割模型时,对于切面上的三角面,无非是如图中3种情况(正好切在三角形的某个顶点上几乎不可能,不过也可以考虑在内,这里就不画出来了),所以每个三角形正好被切到的时候,其自身内部应该生成新的顶点(图中-1,-2点)。生成处新的顶点之后,我们需要将原来的一个三角形重新分割为如图绿色的数字标志的三个三角形,也就是原来一个三角形被分为三个三角形。代码如下:
MeshFilter mf = this.gameObject.GetComponent<MeshFilter>(); //顶点数组转顶点容器 List<Vector3> verticeList = new List<Vector3>(); int verticeCount = mf.mesh.vertices.Length; for (int verticeIndex = 0; verticeIndex < verticeCount; ++verticeIndex) { verticeList.Add(mf.mesh.vertices[verticeIndex]); } //三角形数组转三角形容器 List<int> triangleList = new List<int>(); int triangleCount = mf.mesh.triangles.Length; for (int triangleIndex = 0; triangleIndex < triangleCount; ++triangleIndex) { triangleList.Add(mf.mesh.triangles[triangleIndex]);