public void addPrim(string nameAtr, bool hasUV, PrimIF prim) { if (!this.mapAtrToPrims.ContainsKey(nameAtr)) { this.addAtr(nameAtr); } this.mapAtrToPrims[nameAtr][hasUV].Add(prim); }
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); } } }