public void Export() { for (int i = 0; i < mesh.Length; i++) { if (mesh[i].vertices == null) { mesh[i].vertices = new List <MeshVert>(); } if (mesh[i].faces == null) { mesh[i].faces = new List <MeshFace>(); } mesh[i].vertices.Clear(); mesh[i].faces.Clear(); for (int j = 0; j < mesh[i].Vertices.Length / 15; j++) { MeshVert m = new MeshVert(); m.pos = new Vector3(mesh[i].Vertices[j, 0], mesh[i].Vertices[j, 2], mesh[i].Vertices[j, 1]); m.normal = new Vector3(mesh[i].Vertices[j, 4], mesh[i].Vertices[j, 5], mesh[i].Vertices[j, 6]); m.color = new Color(mesh[i].Vertices[j, 8], mesh[i].Vertices[j, 9], mesh[i].Vertices[j, 10], mesh[i].Vertices[j, 11]); m.uv = new Vector2(mesh[i].Vertices[j, 13], mesh[i].Vertices[j, 14]); mesh[i].vertices.Add(m); } for (int j = 0; j < mesh[i].Faces.Length / 7; j++) { MeshFace mf = new MeshFace(); mf.material = (int)mesh[i].Faces[j, 0]; mf.triangle = new List <int> { (int)mesh[i].Faces[j, 1], (int)mesh[i].Faces[j, 3], (int)mesh[i].Faces[j, 2] }; mesh[i].faces.Add(mf); } } }
public CopyLayerInstance(MeshVert _parent, MeshFace _element, int copyLayerId = -1) { parent = _parent; element = _element; offsetPosition = Vector3.zero; copyLayer = CopyLayerManager.GetLayer(copyLayerId); copyLayer.Add(this); }
void ConvertMesh(Mesh mesh) { meshFilter.mesh = mesh; var meshVertices = mesh.vertices; var meshTriangles = mesh.triangles; // Create Verts foreach (var v in meshVertices) { var newVert = new MeshVert(v); //newVert.index = verts.Count; var index = MeshVerts.IndexOf(newVert); if (index == -1) { MeshVerts.Add(newVert); } else { MeshVerts.Add(MeshVerts[index]); } } // Create Tris and Find Neighbours for (var i = 0; i < meshTriangles.Length; i += 3) { MeshFaces.Add(new MeshTri(MeshVerts[meshTriangles[i]], MeshVerts[meshTriangles[i + 1]], MeshVerts[meshTriangles[i + 2]])); } foreach (var face in MeshFaces) { face.GetNeighbours(); } // Clean Up MeshVerts = MeshVerts.Distinct().ToList(); //meshFilter.mesh.MarkDynamic(); transform.position = new Vector3(0, mesh.bounds.extents.y, 0); //sizeOffset = 1 + (meshTriangles.Length / 3 / 800); Camera.main.GetComponent <MouseOrbitZoom>().SetDesiredDistance(mesh.bounds.size.z + mesh.bounds.extents.y); meshCollider.sharedMesh = mesh; }
// Vertices for normal cube void Vertices(int side, float3 position, int index) { switch (side) { case 0: // North vertices[index + 0] = new MeshVert { vertex = baseVerts[4] + position }; vertices[index + 1] = new MeshVert { vertex = baseVerts[5] + position }; vertices[index + 2] = new MeshVert { vertex = baseVerts[1] + position }; vertices[index + 3] = new MeshVert { vertex = baseVerts[0] + position }; break; case 1: // South vertices[index + 0] = new MeshVert { vertex = baseVerts[6] + position }; vertices[index + 1] = new MeshVert { vertex = baseVerts[7] + position }; vertices[index + 2] = new MeshVert { vertex = baseVerts[3] + position }; vertices[index + 3] = new MeshVert { vertex = baseVerts[2] + position }; break; case 2: // East vertices[index + 0] = new MeshVert { vertex = baseVerts[5] + position }; vertices[index + 1] = new MeshVert { vertex = baseVerts[6] + position }; vertices[index + 2] = new MeshVert { vertex = baseVerts[2] + position }; vertices[index + 3] = new MeshVert { vertex = baseVerts[1] + position }; break; case 3: // West vertices[index + 0] = new MeshVert { vertex = baseVerts[7] + position }; vertices[index + 1] = new MeshVert { vertex = baseVerts[4] + position }; vertices[index + 2] = new MeshVert { vertex = baseVerts[0] + position }; vertices[index + 3] = new MeshVert { vertex = baseVerts[3] + position }; break; case 4: // Up vertices[index + 0] = new MeshVert { vertex = baseVerts[7] + position }; vertices[index + 1] = new MeshVert { vertex = baseVerts[6] + position }; vertices[index + 2] = new MeshVert { vertex = baseVerts[5] + position }; vertices[index + 3] = new MeshVert { vertex = baseVerts[4] + position }; break; case 5: // Down vertices[index + 0] = new MeshVert { vertex = baseVerts[0] + position }; vertices[index + 1] = new MeshVert { vertex = baseVerts[1] + position }; vertices[index + 2] = new MeshVert { vertex = baseVerts[2] + position }; vertices[index + 3] = new MeshVert { vertex = baseVerts[3] + position }; break; default: throw new System.ArgumentOutOfRangeException("Index out of range 5: " + side); } }
public FloatingMeshVert(MeshVert _meshVert, Vector3 _pos, CopyLayerInstance _copyLayer) { meshVert = _meshVert; StartPosition = _pos; copyLayer = _copyLayer; }