add Normals to meshes

This commit is contained in:
AndreaRigoni
2026-03-14 13:23:28 +00:00
parent 35e4fb949d
commit e5dfb75262
12 changed files with 464 additions and 5 deletions

View File

@@ -60,5 +60,18 @@ void QuadMesh::AddQuad(const Vector4i &id)
this->m_Quads.push_back(id);
}
Vector3f QuadMesh::GetNormal(const Id_t id) const
{
const Vector4i &quad = m_Quads.at(id);
const Vector3f &v0 = m_Points.at(quad(0));
const Vector3f &v1 = m_Points.at(quad(1));
const Vector3f &v3 = m_Points.at(quad(3));
Vector3f edge1 = v1 - v0;
Vector3f edge2 = v3 - v0;
return edge1.cross(edge2).normalized();
}
}

View File

@@ -45,6 +45,9 @@ public:
inline std::vector<Vector3f> & Points() { return this->m_Points; }
inline std::vector<Vector4i> & Quads() { return this->m_Quads; }
const Vector4i & GetQuad(const Id_t id) const { return m_Quads.at(id); }
Vector3f GetNormal(const Id_t id) const;
private:
std::vector<Vector3f> m_Points;
std::vector<Vector4i> m_Quads;

View File

@@ -24,8 +24,6 @@
//////////////////////////////////////////////////////////////////////////////*/
#include "TriangleMesh.h"
@@ -65,5 +63,18 @@ void TriangleMesh::AddTriangle(const Vector3i &id)
this->m_Triangles.push_back(id);
}
Vector3f TriangleMesh::GetNormal(const Id_t id) const
{
const Vector3i &trg = m_Triangles.at(id);
const Vector3f &v0 = m_Points.at(trg(0));
const Vector3f &v1 = m_Points.at(trg(1));
const Vector3f &v2 = m_Points.at(trg(2));
Vector3f edge1 = v1 - v0;
Vector3f edge2 = v2 - v0;
return edge1.cross(edge2).normalized();
}
}

View File

@@ -47,6 +47,9 @@ public:
inline std::vector<Vector3f> & Points() { return this->m_Points; }
inline std::vector<Vector3i> & Triangles() { return this->m_Triangles; }
const Vector3i & GetTriangle(const Id_t id) const { return m_Triangles.at(id); }
Vector3f GetNormal(const Id_t id) const;
private:
std::vector<Vector3f> m_Points;
std::vector<Vector3i> m_Triangles;