export const ORBIT_VIEW_DIRECTIONS = Object.freeze([ "iso", "+x", "-x", "+y", "-y", "+z", "-z", ]); const ORBITS = Object.freeze({ iso: Object.freeze({ yaw: -Math.PI / 4, pitch: Math.asin(1 / Math.sqrt(3)), }), "+x": Object.freeze({ yaw: -Math.PI / 2, pitch: 0 }), "-x": Object.freeze({ yaw: Math.PI / 2, pitch: 0 }), "+y": Object.freeze({ yaw: Math.PI, pitch: 0 }), "-y": Object.freeze({ yaw: 0, pitch: 0 }), "+z": Object.freeze({ yaw: 0, pitch: Math.PI / 2 }), "-z": Object.freeze({ yaw: Math.PI, pitch: -Math.PI / 2 }), }); /** * Return the orthographic camera orbit for a view from the named axis toward * the array origin. A fresh object prevents one view from mutating another. */ export function orbitForViewDirection(direction = "iso") { const orbit = ORBITS[direction]; if (!orbit) { throw new RangeError( "view direction must be one of: " + ORBIT_VIEW_DIRECTIONS.join(", "), ); } return { ...orbit }; }