From f412b04cc367168b1a6f921dfa1171a17e1353fc Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 18 Mar 2023 02:12:21 +0000 Subject: Use indices instead of triangulation --- assetFactory/factoryMesh.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'assetFactory/factoryMesh.cpp') diff --git a/assetFactory/factoryMesh.cpp b/assetFactory/factoryMesh.cpp index c47e80e..59b390f 100644 --- a/assetFactory/factoryMesh.cpp +++ b/assetFactory/factoryMesh.cpp @@ -10,24 +10,31 @@ FactoryMesh::createMesh() const for (const auto & use : uses) { use->createMesh(mesh, 1); } - mesh.garbage_collection(); - mesh.triangulate(); mesh.update_face_normals(); mesh.update_vertex_normals(); std::vector vertices; + std::vector indices; for (const auto & face : mesh.faces()) { const auto smooth = mesh.property(mesh.smoothFaceProperty, face); const auto colour = mesh.color(face); - for (const auto & vertex : mesh.fv_range(face)) { + auto vrange = mesh.fv_range(face); + const unsigned int start = static_cast(vertices.size()); + for (const auto & vertex : vrange) { const auto textureUV = mesh.texcoord2D(vertex); vertices.emplace_back(mesh.point(vertex), textureUV, smooth ? mesh.property(mesh.vertex_normals_pph(), vertex) : mesh.property(mesh.face_normals_pph(), face), colour); } + const auto vcount = std::distance(vrange.begin(), vrange.end()); + for (unsigned int i = 2; i < vcount; i++) { + indices.push_back(start); + indices.push_back(start + i - 1); + indices.push_back(start + i); + } } - return std::make_shared(vertices, vectorOfN(vertices.size())); + return std::make_shared(vertices, indices); } bool -- cgit v1.2.3