#include #include namespace Gedeng { class CollisionResult { public: explicit CollisionResult(bool is_colliding, glm::vec3 collision_position = glm::vec3(0, 0, 0)) : is_colliding(is_colliding), collision_position(collision_position) { } bool is_colliding; glm::vec3 collision_position; }; class Ray { public: glm::vec3 origin; glm::vec3 direction; Ray(glm::vec3 origin, glm::vec3 direction) : origin(origin), direction(direction) { } CollisionResult get_plane_collision(glm::vec3 normal = glm::vec3(0, 1, 0)) { float denom = glm::dot(normal, direction); if (glm::abs(denom) > 0.0001f) { float t = glm::dot(-origin, normal) / denom; if (t >= 0) return CollisionResult(true, origin + t * direction); } return CollisionResult(false); } }; } // namespace Gedeng