summaryrefslogtreecommitdiff
path: root/game
diff options
context:
space:
mode:
Diffstat (limited to 'game')
-rw-r--r--game/geoData.cpp16
-rw-r--r--game/geoData.h6
2 files changed, 16 insertions, 6 deletions
diff --git a/game/geoData.cpp b/game/geoData.cpp
index 7710efe..70133a9 100644
--- a/game/geoData.cpp
+++ b/game/geoData.cpp
@@ -57,8 +57,7 @@ GeoData::loadFromAsciiGrid(const std::filesystem::path & input)
});
}
}
- mesh.update_face_normals();
- mesh.update_vertex_normals();
+ mesh.update_vertex_normals_only();
return mesh;
};
@@ -77,8 +76,7 @@ GeoData::createFlat(GlobalPosition2D lower, GlobalPosition2D upper, GlobalDistan
mesh.add_face(ll, uu, lu);
mesh.add_face(ll, ul, uu);
- mesh.update_face_normals();
- mesh.update_vertex_normals();
+ mesh.update_vertex_normals_only();
return mesh;
}
@@ -317,3 +315,13 @@ GeoData::findBoundaryStart() const
return is_boundary(heh);
});
}
+
+void
+GeoData::update_vertex_normals_only()
+{
+ for (auto vh : all_vertices()) {
+ Normal3D n;
+ calc_vertex_normal_correct(vh, n);
+ this->set_normal(vh, glm::normalize(n));
+ }
+}
diff --git a/game/geoData.h b/game/geoData.h
index 3141dbe..d4d0fb3 100644
--- a/game/geoData.h
+++ b/game/geoData.h
@@ -10,10 +10,10 @@
#include <thirdparty/openmesh/glmcompat.h>
struct GeoDataTraits : public OpenMesh::DefaultTraits {
- FaceAttributes(OpenMesh::Attributes::Normal | OpenMesh::Attributes::Status);
+ FaceAttributes(OpenMesh::Attributes::Status);
EdgeAttributes(OpenMesh::Attributes::Status);
VertexAttributes(OpenMesh::Attributes::Normal | OpenMesh::Attributes::Status);
- HalfedgeAttributes(OpenMesh::Attributes::Normal | OpenMesh::Attributes::Status);
+ HalfedgeAttributes(OpenMesh::Attributes::Status);
using Point = GlobalPosition3D;
using Normal = Normal3D;
};
@@ -105,6 +105,8 @@ protected:
[[nodiscard]] bool triangleContainsPoint(const GlobalPosition2D, FaceHandle) const;
[[nodiscard]] HalfedgeHandle findBoundaryStart() const;
+ void update_vertex_normals_only();
+
private:
GlobalPosition3D lowerExtent {}, upperExtent {};
};