static void CreateObjects(int count, Vector3[] verts, Vector3[] norms, Vector2[] uvs, float size, GameObject model) { for (int obj = 0; obj < count; ++obj) { var vertIndex = Facade.GetVertexIndexOfObject(obj); var uvIndex = Facade.GetUVIndexOfObject(obj); var normIndex = Facade.GetNormalIndexOfObject(obj); var divs = Math.Ceiling((double)vertIndex.Length / MAXVERTS); var name = Facade.GetNameOfObject(obj); var parent = GameObject.Find(name); if (parent == null) { parent = new GameObject(name + " Parent"); parent.transform.parent = model.transform; var material = CreateMaterial(obj, "Standard"); CreateTextureMaps(obj, ref material); parent.AddComponent <MeshRenderer>(); parent.GetComponent <MeshRenderer>().material = material; } for (int sector = 0; sector < divs; ++sector) { var child = new GameObject(name); child.AddComponent <MeshRenderer>(); child.GetComponent <MeshRenderer>().material = parent.GetComponent <MeshRenderer>().material; child.AddComponent <MeshFilter>(); var mesh = child.GetComponent <MeshFilter>().mesh; mesh.vertices = GetVerts(verts, vertIndex, sector); mesh.uv = GetUVs(uvs, uvIndex, sector); mesh.normals = GetNorms(norms, normIndex, sector); mesh.triangles = Enumerable .Range(0, mesh.vertices.Length).ToArray(); if (mesh.normals.Length == 0) { mesh.RecalculateNormals(); } var t = TangentBasis.GetMeshTangets(mesh, 1.0f); mesh.tangents = t; child.AddComponent <MeshCollider>(); child.transform.parent = parent.transform; } } }
/// <summary> /// Gets an array of tangent vectors for a mesh. /// </summary> /// <param name="mesh"></param> /// <returns></returns> public static Vector4[] GetMeshTangets(Mesh mesh, float hand) { var verts = mesh.vertices; var uvs = mesh.uv; var norms = mesh.normals; var length = mesh.triangles.Length; var tangents = new Vector4[length]; for (int i = 0; i < length; i += 3) { var tangent = new Vector3(); TangentBasis.Compute(verts[i], uvs[i], verts[i + 1], uvs[i + 1], verts[i + 2], uvs[i + 2], ref tangent); tangents[i] = AddHand(tangent, hand); tangents[i + 1] = AddHand(tangent, hand); tangents[i + 2] = AddHand(tangent, hand); } return(tangents); }