summaryrefslogtreecommitdiff
path: root/assetFactory
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2023-04-10 01:59:11 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2023-04-10 01:59:28 +0100
commitf5a213f621f012e8e4ea541cad409e3cfa1ccaa6 (patch)
treeee27846d23208b08f4c9bec2e21556c449043c4a /assetFactory
parentAdd low poly tree collection (diff)
downloadilt-f5a213f621f012e8e4ea541cad409e3cfa1ccaa6.tar.bz2
ilt-f5a213f621f012e8e4ea541cad409e3cfa1ccaa6.tar.xz
ilt-f5a213f621f012e8e4ea541cad409e3cfa1ccaa6.zip
One OpenMesh instance per top level Use in createMesh
Diffstat (limited to 'assetFactory')
-rw-r--r--assetFactory/factoryMesh.cpp60
1 files changed, 31 insertions, 29 deletions
diff --git a/assetFactory/factoryMesh.cpp b/assetFactory/factoryMesh.cpp
index 8869efd..4922936 100644
--- a/assetFactory/factoryMesh.cpp
+++ b/assetFactory/factoryMesh.cpp
@@ -6,43 +6,45 @@
Mesh::Ptr
FactoryMesh::createMesh() const
{
- ModelFactoryMesh mesh;
+ std::vector<Vertex> vertices;
+ std::vector<unsigned int> indices;
+
for (const auto & use : uses) {
+ ModelFactoryMesh mesh;
use->createMesh(mesh, 1);
- }
- mesh.update_face_normals();
- mesh.update_vertex_normals();
- std::vector<Vertex> vertices;
- std::vector<unsigned int> indices;
- for (const auto & face : mesh.faces()) {
- const auto & smooth = mesh.property(mesh.smoothFaceProperty, face);
- const auto & colour = mesh.color(face);
+ mesh.update_face_normals();
+ mesh.update_vertex_normals();
+ for (const auto & face : mesh.faces()) {
+ const auto & smooth = mesh.property(mesh.smoothFaceProperty, face);
+ const auto & colour = mesh.color(face);
- std::vector<unsigned int> faceIndices;
- for (const auto & heh : mesh.fh_range(face)) {
- const auto & vertex = mesh.to_vertex_handle(heh);
- const auto & textureUV = mesh.texcoord2D(heh);
- const auto & point = mesh.point(vertex);
- const auto & normal = smooth ? mesh.property(mesh.vertex_normals_pph(), vertex)
- : mesh.property(mesh.face_normals_pph(), face);
- Vertex outVertex {point, textureUV, normal, colour};
- if (const auto existingItr = std::find(vertices.rbegin(), vertices.rend(), outVertex);
- existingItr != vertices.rend()) {
- faceIndices.push_back(static_cast<unsigned int>(std::distance(existingItr, vertices.rend()) - 1));
- }
- else {
- faceIndices.push_back(static_cast<unsigned int>(vertices.size()));
- vertices.emplace_back(outVertex);
+ std::vector<unsigned int> faceIndices;
+ for (const auto & heh : mesh.fh_range(face)) {
+ const auto & vertex = mesh.to_vertex_handle(heh);
+ const auto & textureUV = mesh.texcoord2D(heh);
+ const auto & point = mesh.point(vertex);
+ const auto & normal = smooth ? mesh.property(mesh.vertex_normals_pph(), vertex)
+ : mesh.property(mesh.face_normals_pph(), face);
+ Vertex outVertex {point, textureUV, normal, colour};
+ if (const auto existingItr = std::find(vertices.rbegin(), vertices.rend(), outVertex);
+ existingItr != vertices.rend()) {
+ faceIndices.push_back(static_cast<unsigned int>(std::distance(existingItr, vertices.rend()) - 1));
+ }
+ else {
+ faceIndices.push_back(static_cast<unsigned int>(vertices.size()));
+ vertices.emplace_back(outVertex);
+ }
}
- }
- for (unsigned int i = 2; i < faceIndices.size(); i++) {
- indices.push_back(faceIndices[0]);
- indices.push_back(faceIndices[i - 1]);
- indices.push_back(faceIndices[i]);
+ for (unsigned int i = 2; i < faceIndices.size(); i++) {
+ indices.push_back(faceIndices[0]);
+ indices.push_back(faceIndices[i - 1]);
+ indices.push_back(faceIndices[i]);
+ }
}
}
+
return std::make_shared<Mesh>(vertices, indices);
}