X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmodel%2Fgeometry.hpp;h=5065124dad69a9974738a12035b8d4e1c18f4182;hb=170c0ff60b9679c954a9e74d5300c9929899b2bd;hp=fd2c42bb8c8fa7f643f7fcae8697aeac26496dd2;hpb=7c5e04a4af82947ae8e26db3d03f13a555c10aba;p=blank.git diff --git a/src/model/geometry.hpp b/src/model/geometry.hpp index fd2c42b..5065124 100644 --- a/src/model/geometry.hpp +++ b/src/model/geometry.hpp @@ -2,6 +2,7 @@ #define BLANK_MODEL_GEOMETRY_H_ #include +#include #include @@ -19,28 +20,46 @@ constexpr float PI_0p5_inv = 1.0f / PI_0p5; constexpr float DEG_RAD_FACTOR = PI / 180.0f; constexpr float RAD_DEG_FACTOR = 180.0f / PI; -constexpr float deg2rad(float d) { +constexpr float deg2rad(float d) noexcept { return d * DEG_RAD_FACTOR; } -constexpr float rad2deg(float r) { +constexpr float rad2deg(float r) noexcept { return r * RAD_DEG_FACTOR; } +inline float length_squared(const glm::vec3 &v) noexcept { + return dot(v, v); +} + +inline float distance_squared(const glm::vec3 &a, const glm::vec3 &b) noexcept { + return length_squared(a - b); +} + + +template +inline bool iszero(const T &v) noexcept { + return length_squared(v) < std::numeric_limits::epsilon(); +} + + template -T manhattan_distance(const glm::tvec3 &a, const glm::tvec3 &b) { +T manhattan_distance(const glm::tvec3 &a, const glm::tvec3 &b) noexcept { glm::tvec3 diff(abs(a - b)); return diff.x + diff.y + diff.z; } template -T manhattan_radius(const glm::tvec3 &v) { +T manhattan_radius(const glm::tvec3 &v) noexcept { glm::tvec3 a(abs(v)); return std::max(a.x, std::max(a.y, a.z)); } +glm::mat3 find_rotation(const glm::vec3 &a, const glm::vec3 &b) noexcept; + + struct AABB { glm::vec3 min; glm::vec3 max;