Пример #1
0
 public void addPrim(string nameAtr, bool hasUV, PrimIF prim)
 {
     if (!this.mapAtrToPrims.ContainsKey(nameAtr))
     {
         this.addAtr(nameAtr);
     }
     this.mapAtrToPrims[nameAtr][hasUV].Add(prim);
 }
Пример #2
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);
            }
        }
    }