void CreateMesh() { mesh = generator.MakeRock(); previewMeshFilter.mesh = Convert.ToUnityMesh(mesh); if (previewEditor) { DestroyImmediate(previewEditor); } previewEditor = Editor.CreateEditor(previewObj); }
public static Mesh ToUnityMesh(MeshDecimator.Mesh dmesh) { return(new Mesh { vertices = dmesh.Vertices .Select(v => new Vector3((float)v.x, (float)v.y, (float)v.z)) .ToArray(), // uv = dmesh.UV1.Select(uv => new Vector2(uv.x, uv.y)).ToArray(), triangles = dmesh.GetIndices(0), normals = dmesh.Normals.Select(v => new Vector3(v.x, v.y, v.z)) .ToArray() }); }
public static string SaveMesh(MeshDecimator.Mesh mesh, string fileName) { var fullFileName = Path.ChangeExtension(fileName, "obj"); var data = WaveFrontObjExporter.ToObjString(mesh); #if UNITY_WEBGL && !UNITY_EDITOR TriggerDownloadTextFile(data, fullFileName); return(fileName); #else var path = Path.Combine(Application.dataPath, fullFileName); File.WriteAllText(path, data); return(path); #endif }
public MeshDecimator.Mesh ExportMDMesh() { int[] args = new int[] { 0, 1, 0, 0 }; argBuffer.SetData(args); ComputeBuffer.CopyCount(appendVertexBuffer, argBuffer, 0); argBuffer.GetData(args); int numTris = args[0]; int numVerts = args[0] * 3; // 18 floats per Tri // x,y,z,nx,ny,nz // x,y,z,nx,ny,nz // x,y,z,nx,ny,nz float[] dataCPU = new float[numTris * 18]; appendVertexBuffer.GetData(dataCPU); var faces = new int[numVerts]; var verts = new MeshDecimator.Math.Vector3d[numVerts]; int vertIndex = 0; for (int i = 0; i < numTris; i++) { int addr = i * 18; verts[vertIndex++] = new MeshDecimator.Math.Vector3d(dataCPU[addr++], dataCPU[addr++], dataCPU[addr++]); addr += 3; verts[vertIndex++] = new MeshDecimator.Math.Vector3d(dataCPU[addr++], dataCPU[addr++], dataCPU[addr++]); addr += 3; verts[vertIndex++] = new MeshDecimator.Math.Vector3d(dataCPU[addr++], dataCPU[addr++], dataCPU[addr++]); addr += 3; } for (int i = 0; i < numVerts; i++) { faces[i] = i; } MeshDecimator.Mesh outmesh = new MeshDecimator.Mesh(verts, faces); doRender = false; return(outmesh); }