1 #include "geometry.hpp"
6 bool Intersection(const Ray &ray, const AABB &aabb, const glm::mat4 &M, float *dist) {
9 const glm::vec3 aabb_pos(M[3].x, M[3].y, M[3].z);
10 const glm::vec3 delta = aabb_pos - ray.orig;
13 const glm::vec3 xaxis(M[0].x, M[0].y, M[0].z);
14 const float e = glm::dot(xaxis, delta);
15 const float f = glm::dot(ray.dir, xaxis);
17 if (std::abs(f) > 0.001f) {
18 float t1 = (e + aabb.min.x) / f;
19 float t2 = (e + aabb.max.x) / f;
34 if (aabb.min.x - e > 0.0f || aabb.max.x < 0.0f) {
41 const glm::vec3 yaxis(M[1].x, M[1].y, M[1].z);
42 const float e = glm::dot(yaxis, delta);
43 const float f = glm::dot(ray.dir, yaxis);
45 if (std::abs(f) > 0.001f) {
46 float t1 = (e + aabb.min.y) / f;
47 float t2 = (e + aabb.max.y) / f;
62 if (aabb.min.y - e > 0.0f || aabb.max.y < 0.0f) {
69 const glm::vec3 zaxis(M[2].x, M[2].y, M[2].z);
70 const float e = glm::dot(zaxis, delta);
71 const float f = glm::dot(ray.dir, zaxis);
73 if (std::abs(f) > 0.001f) {
74 float t1 = (e + aabb.min.z) / f;
75 float t2 = (e + aabb.max.z) / f;
90 if (aabb.min.z - e > 0.0f || aabb.max.z < 0.0f) {