public static TriangleInfo[] GetTriangles(MeshFilter filter) { Mesh mesh = filter.sharedMesh; if (mesh == null) { return(null); } Vector3[] vertices = mesh.vertices; int[] tris = mesh.triangles; TriangleInfo[] triangles = new TriangleInfo[tris.Length / 3]; for (int i = 0; i < tris.Length; i += 3) { Vector3 v1 = filter.transform.TransformPoint(vertices[tris[i]]); Vector3 v2 = filter.transform.TransformPoint(vertices[tris[i + 1]]); Vector3 v3 = filter.transform.TransformPoint(vertices[tris[i + 2]]); AABBBoundBox box = new AABBBoundBox(Vector3.positiveInfinity, Vector3.negativeInfinity); box.Extend(v1); box.Extend(v2); box.Extend(v3); triangles[i / 3] = new TriangleInfo { p1 = v1, p2 = v2, p3 = v3, }; } return(triangles); }
private TriangleBound GroupBoundBox(List <TriangleInfo> infoList) { TriangleBound triangeBound = new TriangleBound(); AABBBoundBox bound = new AABBBoundBox(Vector3.positiveInfinity, Vector3.negativeInfinity); triangeBound.triangles = new TriangleInfo[infoList.Count]; for (int i = 0; i < infoList.Count; i++) { triangeBound.triangles[i] = infoList[i]; bound.Extend(infoList[i].p1); bound.Extend(infoList[i].p2); bound.Extend(infoList[i].p3); } triangeBound.boundBox = bound; return(triangeBound); }