The honest half of §113's "force vectors": one segment per contact, from
pointOnA along the contact normal, scaled by that contact's normal
impulse (newton-seconds, §29 ContactPoint.impulse).
Why impulses and not forces (staged, 2026-08-02)
Applied forces are not readable. SolverBodyAccess has applyForce,
applyForceAtPoint, applyTorque, applyImpulse, applyImpulseAtPoint,
applyAngularImpulse, and resetForces — seven writes and no getter; the
seam is write-only for the force channel, and §26's command buffers live in
@fourjs/physics, which this package cannot import. What is readable is the
impulse the solver actually applied at each contact, which is the force
quantity a collision overlay wants anyway. Divide by the fixed delta for
newtons — the same conversion PhysicsWorld does for §28 break thresholds —
or leave scale in impulse units and read it as relative.
The honest half of §113's "force vectors": one segment per contact, from
pointOnAalong the contact normal, scaled by that contact's normal impulse (newton-seconds, §29ContactPoint.impulse).Why impulses and not forces (staged, 2026-08-02)
Applied forces are not readable.
SolverBodyAccesshasapplyForce,applyForceAtPoint,applyTorque,applyImpulse,applyImpulseAtPoint,applyAngularImpulse, andresetForces— seven writes and no getter; the seam is write-only for the force channel, and §26's command buffers live in@fourjs/physics, which this package cannot import. What is readable is the impulse the solver actually applied at each contact, which is the force quantity a collision overlay wants anyway. Divide by the fixed delta for newtons — the same conversionPhysicsWorlddoes for §28 break thresholds — or leavescalein impulse units and read it as relative.See DEBUG_DRAW_STAGED for applied-force vectors.
Returns the number of segments appended.