36 lines
908 B
C++
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
|