In Unreal, the 3D coordinate system is defined as a right-handed, X-forward, Y-left, Z-up frame of reference; but, the default 3D coordinate system for, say, DirectX is a left-handed, X-right, Y-up, Z-forward frame of reference.
How does an engine enforce this behavior? Or, how do engines define a global coordinate system that “just works”? When an object is asked to get its “forward direction” it doesn’t do any matrix or quaternion conversions that I can tell, it just returns the I-basis (or X-component) of its transform. Its obvious something is being done to translate local transform matrices’ coordinate systems into the engine-specific transform matrices’ required coordinate systems. I just don’t know where or when these modifications are being applied.
A concrete example:
My confusion is compounded by how 3D cameras work; they ultimately determine how the scene is viewed. In my own engine I don’t change the default behavior that DirectX provides, so my coordinate system is a left-handed, X-right, Y-up, Z-forward. I don’t like this. I want it to be X-forward, Y-right, Z-up globally throughout the engine. Where would I do this? During the view calculation for every camera? Would that affect intuitive translations where if I translate “right” with a vector
(+10,0,0) the camera erroneously appears to move forward?