#ifndef T_FUNCTIONS #define T_FUNCTIONS #include #include #include #include #include #include #include #include #include #include "t.h" #include "Structures.h" struct TInTInfo { glm::vec3 POI; glm::vec3 CN; float overlap; }; struct AxisCollisionCN { float overlap; bool infront; glm::vec3 POI; }; glm::vec3 CalculateTriangleNormal(Triangle t); float Magnitude2(const glm::vec3& v); float Magnitude(const glm::vec3& v); float SquaredPerpendicularMagnitude(glm::vec3 off, glm::vec3 line); float VolumeOfTriangle(glm::vec3 p1, glm::vec3 p2, glm::vec3 p3); std::optional RayIntersectsTriangle(const Ray& ray, const Triangle triangle); std::optional IsRayInT(const Ray& ray, t& t); bool IsRayInTBool(const Ray& ray, t& t); bool BoundingBoxInBoundingBox(const BoundingBox bb1, const BoundingBox bb2); bool BoundingAxisInBoundingAxis(BoundingAxis ba1, BoundingAxis ba2); bool TAxisCollidesTNoInfo(std::vector < glm::vec3 >& t1, std::vector < glm::vec3 >& t2, glm::vec3 axis); std::optional> TAxisCollidesT(std::vector < glm::vec3 >& t1, std::vector < glm::vec3 >& t2, glm::vec3 axis); std::optional TAxisCollidesTCN(std::vector < glm::vec3 >& t1, std::vector < glm::vec3 >& t2, glm::vec3 axis); bool TNearT(t& t1, t& t22); std::optional TInT(t& t1, t& t2); bool TInTNoInfo(t& t1, t& t2); glm::quat AngleAxis(glm::vec3 axis, float angle); glm::vec3 LookAtVector(glm::vec3 start, glm::vec3 end); glm::quat RotationBetweenVectors(glm::vec3 start, glm::vec3 dest); glm::quat LookAt(glm::vec3 direction); glm::quat LookAt(glm::vec3 start, glm::vec3 end); #endif