summaryrefslogtreecommitdiff
path: root/assetFactory/factoryMesh.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'assetFactory/factoryMesh.cpp')
-rw-r--r--assetFactory/factoryMesh.cpp61
1 files changed, 32 insertions, 29 deletions
diff --git a/assetFactory/factoryMesh.cpp b/assetFactory/factoryMesh.cpp
index 8869efd..f7bc7c8 100644
--- a/assetFactory/factoryMesh.cpp
+++ b/assetFactory/factoryMesh.cpp
@@ -6,43 +6,46 @@
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);
+ const auto & material = mesh.property(mesh.materialFaceProperty, 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, material};
+ 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);
}