diff --git a/include/omath/Triangle.hpp b/include/omath/Triangle.hpp new file mode 100644 index 0000000..68a8894 --- /dev/null +++ b/include/omath/Triangle.hpp @@ -0,0 +1,59 @@ +// +// Created by Orange on 11/13/2024. +// +#pragma once +#include "omath/Vector3.hpp" + +namespace omath +{ + template + class Triangle final + { + public: + constexpr Triangle(const Vector& vertex1, const Vector& vertex2, const Vector& vertex3) + : m_vertex1(vertex1), m_vertex2(vertex2), m_vertex3(vertex3) + { + + } + + Vector3 m_vertex1; + Vector3 m_vertex2; + Vector3 m_vertex3; + + [[nodiscard]] + constexpr Vector3 CalculateNormal() const + { + return (m_vertex1 - m_vertex2).Cross(m_vertex3 - m_vertex1).Normalized(); + } + + [[nodiscard]] + constexpr float SideALength() const + { + return m_vertex1.DistTo(m_vertex2); + } + + [[nodiscard]] + constexpr float SideBLength() const + { + return m_vertex3.DistTo(m_vertex2); + } + + [[nodiscard]] + constexpr Vector3 SideAVector() const + { + return m_vertex1 - m_vertex2; + } + + [[nodiscard]] + constexpr Vector3 SideBVector() const + { + return m_vertex3 - m_vertex2; + } + + [[nodiscard]] + constexpr Vector3 MidPoint() const + { + return (m_vertex1 + m_vertex2 + m_vertex3) / 3; + } + }; +} // namespace omath diff --git a/include/omath/Triangle3d.hpp b/include/omath/Triangle3d.hpp deleted file mode 100644 index de71a80..0000000 --- a/include/omath/Triangle3d.hpp +++ /dev/null @@ -1,36 +0,0 @@ -// -// Created by Orange on 11/13/2024. -// -#pragma once -#include "omath/Vector3.hpp" - -namespace omath -{ - class Triangle3d final - { - public: - Triangle3d(const Vector3& vertex1, const Vector3& vertex2, const Vector3& vertex3); - - Vector3 m_vertex1; - Vector3 m_vertex2; - Vector3 m_vertex3; - - [[nodiscard]] - Vector3 CalculateNormal() const; - - [[nodiscard]] - float SideALength() const; - - [[nodiscard]] - float SideBLength() const; - - [[nodiscard]] - Vector3 SideAVector() const; - - [[nodiscard]] - Vector3 SideBVector() const; - - [[nodiscard]] - Vector3 MidPoint() const; - }; -} diff --git a/include/omath/collision/LineTracer.hpp b/include/omath/collision/LineTracer.hpp index e86f1dd..33b81a2 100644 --- a/include/omath/collision/LineTracer.hpp +++ b/include/omath/collision/LineTracer.hpp @@ -4,7 +4,7 @@ #pragma once #include "omath/Vector3.hpp" -#include "omath/Triangle3d.hpp" +#include "omath/Triangle.hpp" namespace omath::collision { @@ -27,12 +27,12 @@ namespace omath::collision [[nodiscard]] - static bool CanTraceLine(const Ray& ray, const Triangle3d& triangle); + static bool CanTraceLine(const Ray& ray, const Triangle& triangle); // Realization of Möller–Trumbore intersection algorithm // https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm [[nodiscard]] - static Vector3 GetRayHitPoint(const Ray& ray, const Triangle3d& triangle); + static Vector3 GetRayHitPoint(const Ray& ray, const Triangle& triangle); }; } diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 0e0ea74..fe42cba 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -4,7 +4,6 @@ target_sources(omath PRIVATE color.cpp Vector4.cpp Vector2.cpp - Triangle3d.cpp ) add_subdirectory(prediction) diff --git a/source/Triangle3d.cpp b/source/Triangle3d.cpp deleted file mode 100644 index aacabc8..0000000 --- a/source/Triangle3d.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "omath/Triangle3d.hpp" - - -namespace omath -{ - Triangle3d::Triangle3d(const Vector3 &vertex1, const Vector3 &vertex2, const Vector3 &vertex3) - : m_vertex1(vertex1), m_vertex2(vertex2), m_vertex3(vertex3) - { - - } - - Vector3 Triangle3d::CalculateNormal() const - { - return (m_vertex1 - m_vertex2).Cross(m_vertex3 - m_vertex1).Normalized(); - } - - float Triangle3d::SideALength() const - { - return m_vertex1.DistTo(m_vertex2); - } - - float Triangle3d::SideBLength() const - { - return m_vertex3.DistTo(m_vertex2); - } - - Vector3 Triangle3d::SideAVector() const - { - return m_vertex1 - m_vertex2; - } - - Vector3 Triangle3d::SideBVector() const - { - return m_vertex3 - m_vertex2; - } - Vector3 Triangle3d::MidPoint() const - { - return (m_vertex1 + m_vertex2 + m_vertex3) / 3; - } -} // namespace omath diff --git a/source/collision/LineTracer.cpp b/source/collision/LineTracer.cpp index 83bcdd2..5f8c5b6 100644 --- a/source/collision/LineTracer.cpp +++ b/source/collision/LineTracer.cpp @@ -5,7 +5,7 @@ namespace omath::collision { - bool LineTracer::CanTraceLine(const Ray &ray, const Triangle3d &triangle) + bool LineTracer::CanTraceLine(const Ray& ray, const Triangle& triangle) { return GetRayHitPoint(ray, triangle) == ray.end; } @@ -19,7 +19,7 @@ namespace omath::collision return DirectionVector().Normalized(); } - Vector3 LineTracer::GetRayHitPoint(const Ray &ray, const Triangle3d &triangle) + Vector3 LineTracer::GetRayHitPoint(const Ray& ray, const Triangle& triangle) { constexpr float kEpsilon = std::numeric_limits::epsilon(); @@ -41,7 +41,7 @@ namespace omath::collision const auto u = t.Dot(p) * invDet; - if ((u < 0 && std::abs(u) > kEpsilon) || (u > 1 && std::abs(u-1) > kEpsilon)) + if ((u < 0 && std::abs(u) > kEpsilon) || (u > 1 && std::abs(u - 1) > kEpsilon)) return ray.end; const auto q = t.Cross(sideA); @@ -59,4 +59,4 @@ namespace omath::collision return ray.start + rayDir * tHit; } -} +} // namespace omath::collision diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 77c9508..aa377b8 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -18,6 +18,7 @@ add_executable(unit-tests general/UnitTestAngles.cpp general/UnitTestViewAngles.cpp general/UnitTestAngle.cpp + general/UnitTestTriangle.cpp engines/UnitTestOpenGL.cpp engines/UnitTestUnityEngine.cpp diff --git a/tests/general/UnitTestTriangle.cpp b/tests/general/UnitTestTriangle.cpp new file mode 100644 index 0000000..b7f486f --- /dev/null +++ b/tests/general/UnitTestTriangle.cpp @@ -0,0 +1,4 @@ +// +// Created by Orange on 1/6/2025. +// +#include "omath/Triangle.hpp"