I have read the source code of OrientedBoundingBox and I'm a bit disappointed, it seems to work like BoundingBox at its creation, its volume is not as smallest as possible, it computes the smallest axis-aligned bounding box and after that, it updates the corner depending on the orientation. The problem is the result is far from satisfying if your bounded object is not axis-aligned at the beginning. Am I wrong? Have I misread anything? Is there a workaround?
In my case, I want to use OrientedBoundingBox for my portals, maybe I can get the really smallest oriented bounding box by using the normal of the triangles and then update the axis by using it.
As my portals are flat, I suggest the following steps to solve my problem in my particular case:
- get the normal of a triangle composing the portal
- get 2 vertices of this triangle
- compute a vector with these vertices
- use the cross product to compute a third vector
- normalize the 3 vectors
- make a matrix with them
- use the invert of this matrix as a rotation matrix on the portal
- compute the oriented bounding box
- use the matrix as a rotation matrix on the portal
- update the oriented bounding box
Is it a good way to compute the smallest oriented bounding box for a flat object?