private void Start() { lineMaterial = new Material(Shader.Find("Hidden/Internal-Colored")); mesh = new Mesh(); Vertex3[] vertices = new Vertex3[NumberOfVertices]; Vector3[] meshVerts = new Vector3[NumberOfVertices]; int[] meshIndices = new int[NumberOfVertices]; Random.InitState(seed); for (int i = 0; i < NumberOfVertices; i++) { float x = size * Random.Range(-1.0f, 1.0f); float y = size * Random.Range(-1.0f, 1.0f); float z = size * Random.Range(-1.0f, 1.0f); vertices[i] = new Vertex3(x, y, z); meshVerts[i] = new Vector3(x, y, z); meshIndices[i] = i; } mesh.vertices = meshVerts; mesh.SetIndices(meshIndices, MeshTopology.Points, 0); hull = new ConvexHull3(); hull.Generate(vertices); }
public void generateHullMesh(Vertex3[] vertices) { hull = new ConvexHull3(); hull.Generate(vertices); if (hull == null || hull.Simplexs.Count == 0 || hull.Vertices.Count == 0) { return; } mesh = new Mesh(); meshFilter.mesh = mesh; points = new Vector3[hull.Simplexs.Count * 3]; indecies = new int[hull.Simplexs.Count * 3]; int index = 0; foreach (Simplex <Vertex3> f in hull.Simplexs) { DrawSimplex(f, index); index += 3; } mesh.vertices = points; mesh.triangles = indecies; }
List <int> SimplexToTriangle(ConvexHull3 hull) { var vertexs = hull.Vertices; var simplexs = hull.Simplexs; List <int> tri = new List <int>(); foreach (var f in simplexs) { int v0 = Array.IndexOf(vertexs.ToArray(), f.Vertices[0]); int v1 = Array.IndexOf(vertexs.ToArray(), f.Vertices[1]); int v2 = Array.IndexOf(vertexs.ToArray(), f.Vertices[2]); if (f.IsNormalFlipped) { tri.Add(v0); tri.Add(v2); tri.Add(v1); } else { tri.Add(v0); tri.Add(v1); tri.Add(v2); } } return(tri); }
// Start is called before the first frame update void Start() { string[] parts = { "mask_048_0", "mask_048_1", "mask_048_2", "mask_048_3", "mask_048_4", "mask_048_5", "mask_048_6" }; GameObject statueAsset = Resources.Load <GameObject>("siva/siva"); GameObject statue = Instantiate(statueAsset, new Vector3(0, 0, 0), Quaternion.identity); statue.name = "siva"; //string[] parts = { "part1", "part2", "part3" }; for (int i = 0; i < parts.Length; i++) { //Lecture du fichier de coordonnées dans un tableau de vertices TextAsset txtAssets = (TextAsset)Resources.Load("siva/" + parts[i]); //TextAsset txtAssets = (TextAsset)Resources.Load("myson/maks3D_Myson_0" + i); string fileContent = txtAssets.text; readXYZ(fileContent); //génération de l'enveloppe convexe hull = new ConvexHull3(); hull.Generate(vertices); //Conversion de l'enveloppe convexe en mesh Mesh mesh = HullToMesh(); //Création d'un objet qui va contenir le meshcollider GameObject partObject = new GameObject(parts[i]); //Création du meshcollider à partir du mesh créé précedemment MeshCollider meshCollider = partObject.AddComponent <MeshCollider>(); meshCollider.sharedMesh = mesh; MeshFilter meshFilter = partObject.AddComponent <MeshFilter>(); meshFilter.sharedMesh = mesh; MeshRenderer meshRenderer = partObject.AddComponent <MeshRenderer>(); Material mat = new Material(invMat); meshRenderer.sharedMaterial = mat; //meshRenderer.enabled = false; partObject.transform.SetParent(statue.transform, true); Debug.Log("fils après2: p=" + partObject.transform.position + " lp=" + partObject.transform.localPosition + " r=" + partObject.transform.rotation + " lr=" + partObject.transform.localRotation); } //pour debug sans android, décommenter //MeshRenderer mrd = transform.gameObject.GetComponent<MeshRenderer>(); //mrd.enabled = true; statue.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); statue.transform.SetParent(targ.transform); DebugT.text = "Sélectionnez une zone"; }
private void Start() { lineMaterial = new Material(Shader.Find("Hidden/Internal-Colored")); mesh = new Mesh(); Vertex3[] vertices = new Vertex3[NumberOfVertices]; Vector3[] meshVerts = new Vector3[NumberOfVertices]; int[] meshIndices = new int[NumberOfVertices]; Random.InitState(seed); for (int i = 0; i < NumberOfVertices; i++) { float x = size * Random.Range(-1.0f, 1.0f); float y = size * Random.Range(-1.0f, 1.0f); float z = size * Random.Range(-1.0f, 1.0f); vertices[i] = new Vertex3(x, y, z); meshVerts[i] = new Vector3(x, y, z); meshIndices[i] = i; } mesh.vertices = meshVerts; mesh.SetIndices(meshIndices, MeshTopology.Points, 0); hull = new ConvexHull3(); hull.Generate(vertices); Mesh ms = new Mesh { vertices = VertexToVector(hull.Vertices).ToArray(), triangles = SimplexToTriangle(hull).ToArray() }; ms.name = "ConvexHull"; ms.RecalculateNormals(); ms.RecalculateBounds(); DrawMesh.GetComponent <MeshFilter>().mesh = ms; }
// Use this for initialization void Start() { UnityARSessionNativeInterface.ARFrameUpdatedEvent += ARFrameUpdated; frameUpdated = false; // Vertex3[] vertices = new Vertex3[NumberOfVertices]; // Random.InitState(seed); // for (int i = 0; i < NumberOfVertices; i++) // { // float x = size * Random.Range(-1.0f, 1.0f); // float y = size * Random.Range(-0.1f, 0.1f); // float z = size * Random.Range(-1.0f, 1.0f); // vertices[i] = new Vertex3(x, y, z); // } hull = new ConvexHull3(); // hull.Generate(vertices); // generateMesh(); }
void LoadIfNecessary() { if (meshFilter == null) { meshFilter = GetComponent <MeshFilter>(); } if (ch2 == null) { ch2 = new ConvexHull2(new List <Vector3>()); } if (obb2 == null) { obb2 = new OBB2(ch2); } if (ch3 == null) { ch3 = new ConvexHull3(new List <Vector3>()); } if (obb3 == null) { obb3 = new OBB3(ch3); } }
private static (List <Mesh> meshes, List <Vector3> centers) RegionsToMeshes(VoronoiMesh3 voronoi, float scale, int seed, Material mat) { List <Mesh> meshes = new List <Mesh>(); List <Vector3> centers = new List <Vector3>(); foreach (VoronoiRegion <Vertex3> region in voronoi.Regions) { Vertex3 center = region.ArithmeticCenter; List <Vertex3> verts = new List <Vertex3>(); foreach (DelaunayCell <Vertex3> cell in region.Cells) { verts.Add(cell.CircumCenter); // if (!InBound(cell.CircumCenter, scale)) { // draw = false; // break; // } // else { // verts.Add(cell.CircumCenter); // } } // If you find the convex hull of the voronoi region it // can be used to make a triangle mesh. ConvexHull3 hull = new ConvexHull3(); hull.Generate(verts, false); List <Vector3> positions = new List <Vector3>(); List <Vector3> normals = new List <Vector3>(); List <int> indices = new List <int>(); for (int i = 0; i < hull.Simplexs.Count; i++) { for (int j = 0; j < 3; j++) { Vector3 v = new Vector3(); v.x = hull.Simplexs[i].Vertices[j].X; v.y = hull.Simplexs[i].Vertices[j].Y; v.z = hull.Simplexs[i].Vertices[j].Z; positions.Add(v); } Vector3 n = new Vector3(); n.x = hull.Simplexs[i].Normal[0]; n.y = hull.Simplexs[i].Normal[1]; n.z = hull.Simplexs[i].Normal[2]; if (hull.Simplexs[i].IsNormalFlipped) { indices.Add(i * 3 + 2); indices.Add(i * 3 + 1); indices.Add(i * 3 + 0); } else { indices.Add(i * 3 + 0); indices.Add(i * 3 + 1); indices.Add(i * 3 + 2); } normals.Add(n); normals.Add(n); normals.Add(n); } Mesh mesh = new Mesh(); mesh.SetVertices(positions); mesh.SetNormals(normals); mesh.SetTriangles(indices, 0); mesh.RecalculateBounds(); mesh.RecalculateNormals(); meshes.Add(mesh); centers.Add(new Vector3(center.X, center.Y, center.Z)); } return(meshes, centers); }
private void RegionsToMeshes() { meshes = new List <Mesh>(); foreach (VoronoiRegion <Vertex3> region in voronoi.Regions) { bool draw = true; List <Vertex3> verts = new List <Vertex3>(); foreach (DelaunayCell <Vertex3> cell in region.Cells) { if (!InBound(cell.CircumCenter)) { draw = false; break; } else { verts.Add(cell.CircumCenter); } } if (!draw) { continue; } //If you find the convex hull of the voronoi region it //can be used to make a triangle mesh. ConvexHull3 hull = new ConvexHull3(); hull.Generate(verts, false); List <Vector3> positions = new List <Vector3>(); List <Vector3> normals = new List <Vector3>(); List <int> indices = new List <int>(); for (int i = 0; i < hull.Simplexs.Count; i++) { for (int j = 0; j < 3; j++) { Vector3 v = new Vector3(); v.x = hull.Simplexs[i].Vertices[j].X; v.y = hull.Simplexs[i].Vertices[j].Y; v.z = hull.Simplexs[i].Vertices[j].Z; positions.Add(v); } Vector3 n = new Vector3(); n.x = hull.Simplexs[i].Normal[0]; n.y = hull.Simplexs[i].Normal[1]; n.z = hull.Simplexs[i].Normal[2]; if (hull.Simplexs[i].IsNormalFlipped) { indices.Add(i * 3 + 2); indices.Add(i * 3 + 1); indices.Add(i * 3 + 0); } else { indices.Add(i * 3 + 0); indices.Add(i * 3 + 1); indices.Add(i * 3 + 2); } normals.Add(n); normals.Add(n); normals.Add(n); } Mesh mesh = new Mesh(); mesh.SetVertices(positions); mesh.SetNormals(normals); mesh.SetTriangles(indices, 0); mesh.RecalculateBounds(); //mesh.RecalculateNormals(); meshes.Add(mesh); } }
public OBB3(ConvexHull3 convexHull3Data) { mConvexHull3 = convexHull3Data; mBox = new Box(); }