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()); }
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); }
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); } } }