fixed v1.1.0 — the wide AABB operations a real consumer needed
Adds two wide-AABB operations. Additions only — backward compatible, both frozen hashes unchanged.
fixMakeAABBWideAt( points, count, radius, origin ) |
build a wide box from local points placed at a wide origin |
fixAABBWide_Transform( transform, box ) |
transform a wide box by a local transform |
How they were found
By trying to wire box3d's ludicrous build to this library and failing to compile. The wide AABB surface looked complete and was not:
fixMakeAABBWidetakes an array of wide points. Real consumers build boxes from local mesh and hull vertices placed at a wide origin — vertices stay Q48.16 even when the body sits a light-year out. That is a different function, not a different call.fixAABBWide_Transformdid not exist at all.
Inherited limitation, stated rather than papered over
The transform narrows the centre to local range, so a box whose centre exceeds Q48.16 saturates. Extents survive at any distance — that is the fixAABBWide_Extents fix from v1.0.0 — but a transform about a distant centre does not. This matches the behaviour it was ported from, so it is a faithful port and not a regression. A wide-centre formulation belongs in its own change with its own goldens.
Verification
Both new functions are exercised by test/aabb_test.c — a header-only function nothing calls is invisible to a passing build. Proven able to fail: dropping the abs from the rotation matrix breaks three checks, including the never-shrinks property that would matter in a broadphase.
fixed-core determinism 0x3e1c7997594d2019
wide boundary 0xeedc16ea642ffb5f