36 lines
908 B
C++

#include <glm/geometric.hpp>
#include <glm/glm.hpp>
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