Esempio n. 1
0
    static void outputDebug(TotekanMeshInfo infoMesh)
    {
        var strPos = getStrList <Vector3>(infoMesh.positions);

        Debug.Log("MeshInfo: pos" + strPos);
        var strNorm = getStrList <Vector3>(infoMesh.normals);

        Debug.Log("MeshInfo: normal" + strNorm);
        var strUVs = getStrList <Vector2>(infoMesh.uvs);

        Debug.Log("MeshInfo: uv" + strUVs);

        int indexTriangle = 0;
        var builder       = new StringBuilder();

        foreach (var indicesTriangle in infoMesh.indices)
        {
            builder.Append(indexTriangle + ":(");
            foreach (var index in indicesTriangle)
            {
                builder.Append(index + " ");
            }
            builder.Append(") ");
            indexTriangle++;
        }
        Debug.Log("MeshInfo: indices: " + builder.ToString());
    }
Esempio n. 2
0
    static Mesh createMesh(TotekanMeshInfo infoMesh)
    {
        var mesh = new Mesh();

        Debug.Log("Creating mesh: vertex count=" + infoMesh.positions.Count.ToString() + ", index count=" + infoMesh.indices.Count.ToString());
        mesh.vertices     = infoMesh.positions.ToArray();
        mesh.normals      = infoMesh.normals.ToArray();
        mesh.uv           = infoMesh.uvs.ToArray();
        mesh.subMeshCount = infoMesh.indices.Count;
        int indexSubMesh = 0;

        foreach (var indices in infoMesh.indices)
        {
            mesh.SetTriangles(indices.ToArray(), indexSubMesh);
            indexSubMesh++;
        }

        return(mesh);
    }
Esempio n. 3
0
    static void buildTablesMesh(PrimIF prim, bool hasUV, ref List <TotekanMeshInfo> infosMesh)
    {
        var            listIndicesTriangle = prim.getListIndicesTriangle();
        var            positions           = getListVector3FromListVec3(prim.getPositions());
        List <Vector3> normals             = null;

        if (prim is PrimNormalIF)
        {
            var primNormalIF = prim as PrimNormalIF;
            normals = normalizeListVectors(getListVector3FromListVec3(primNormalIF.getNormals()));
        }
        else
        {
            Vector3 normal = calcNormal(prim.getPositions()).normalized;
            normals = new List <Vector3>();
            for (int index = 0; index < positions.Count; index++)
            {
                normals.Add(normal);
            }
            for (var indexNormal = 0; indexNormal < normals.Count; indexNormal++)
            {
                normals[indexNormal] = -normals[indexNormal];
            }
        }

        List <Vector2> uvs = null;

        if (prim is PrimUVIF)
        {
            var primUVIF = prim as PrimUVIF;
            uvs = getListVector2FromListVec2(primUVIF.getUVs());
        }
        else
        {
            uvs = new List <Vector2>();
            for (int index = 0; index < positions.Count; index++)
            {
                uvs.Add(Vector2.zero);
            }
        }

        TotekanMeshInfo infoMeshLatest = null;

        if (infosMesh.Count == 0)
        {
            infoMeshLatest = new TotekanMeshInfo();
            infosMesh.Add(infoMeshLatest);
        }
        else
        {
            infoMeshLatest = infosMesh[infosMesh.Count - 1];
            if (maxVerticesMesh < infoMeshLatest.positions.Count + positions.Count)
            {
                Debug.Log("Vertices may exceed maximum limit=" + maxVerticesMesh.ToString() + ", so creating another mesh ...");
                infoMeshLatest = new TotekanMeshInfo();
                infosMesh.Add(infoMeshLatest);
            }
        }
        int indexStartInMesh = infoMeshLatest.positions.Count;

        for (int index = 0; index < positions.Count; index++)
        {
            infoMeshLatest.positions.Add(positions[index]);
            infoMeshLatest.normals.Add(normals[index]);
            infoMeshLatest.uvs.Add(uvs[index]);
        }

        foreach (var indicesTriangle in listIndicesTriangle)
        {
            int        numIndices = infoMeshLatest.indices.Count;
            List <int> indicesTriangleInMesh;
            if (numIndices == 0)
            {
                indicesTriangleInMesh = new List <int>();
                infoMeshLatest.indices.Add(indicesTriangleInMesh);
            }
            else
            {
                indicesTriangleInMesh = infoMeshLatest.indices[infoMeshLatest.indices.Count - 1];;
            }
            foreach (var index in indicesTriangle)
            {
                indicesTriangleInMesh.Add(index + indexStartInMesh);
            }
        }
    }