info re-expressed against anchor: both render-frame boxes move with the
geometry, wasmRtcOffset records the new anchor, and wasmRtcFrame is
replaced by the frame the geometry is now actually in. Keeping the old
wasmRtcFrame would leave needsShift: false beside a set wasmRtcOffset,
which the cache serialiser rejects and auxiliary parsers would trust.
originShift is copied through: every render-frame value here is relative
to originShift + ifcToViewerAxes(wasmRtcOffset) and only the second term
changes, so the change in the total is exactly the RTC delta.
Absolute-world fields are NOT in CoordinateInfo and are not touched by
the caller either: MeshData.geometryAabb has the RTC folded back in and
MeshData.localToWorld is the pre-RTC placement chain, both RTC-invariant.
infore-expressed againstanchor: both render-frame boxes move with the geometry,wasmRtcOffsetrecords the new anchor, andwasmRtcFrameis replaced by the frame the geometry is now actually in. Keeping the oldwasmRtcFramewould leaveneedsShift: falsebeside a setwasmRtcOffset, which the cache serialiser rejects and auxiliary parsers would trust.originShiftis copied through: every render-frame value here is relative tooriginShift + ifcToViewerAxes(wasmRtcOffset)and only the second term changes, so the change in the total is exactly the RTC delta.Absolute-world fields are NOT in
CoordinateInfoand are not touched by the caller either:MeshData.geometryAabbhas the RTC folded back in andMeshData.localToWorldis the pre-RTC placement chain, both RTC-invariant.