Example #1
0
    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;
            }
        }
    }
Example #2
0
    /// <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);
    }