Raycast Oriented Bounding Box
We can extend the same slab method used for raycasting against an AABB to also work with an OBB. The key difference is how we find the values of and .
Getting ready
We are going to implement a function that finds the entry and exit points of a Raycast against an OBB. This function will only return the entry point. The function returns a scalar value t. This scalar value is the time along the ray at which the intersection happened. If the intersection is invalid, a negative number is returned.
How to do it…
Follow these steps to implement raycasting against an OBB:
Declare the
Raycast
function inGeometry3D.h
:float Raycast(const OBB& obb, const Ray& ray);
Start implementing the
Raycast
function inGeometry3D.cpp
by declaring a few local variables to keep the code readable. We want to store the half extents of the box as a linear array, and each axis of the OBBs rotation frame as a vector:float Raycast(const OBB& obb, const Ray& ray) { const float...