| 41 | } |
| 42 | |
| 43 | f32 ray_sphere_intersection(const Vector3 &from, const Vector3 &dir, const Sphere &s) |
| 44 | { |
| 45 | const Vector3 v = s.c - from; |
| 46 | const f32 b = dot(v, dir); |
| 47 | const f32 rr = s.r * s.r; |
| 48 | const f32 bb = b * b; |
| 49 | const f32 det = rr - dot(v, v) + bb; |
| 50 | |
| 51 | if (det < 0.0f || b < s.r) |
| 52 | return -1.0f; |
| 53 | |
| 54 | return b - fsqrt(det); |
| 55 | } |
| 56 | |
| 57 | // http://www.opengl-tutorial.org/miscellaneous/clicking-on-objects/picking-with-custom-ray-obb-function/ |
| 58 | f32 ray_obb_intersection(const Vector3 &from, const Vector3 &dir, const Matrix4x4 &tm, const Vector3 &half_extents) |