**Chat log** from Bead: 3D Mouse Keyboard Camera Controls · [canonical source](https://redfish.acequia.io/guerin/.agents/b28561b2-f9e6-4a2a-88f3-edb06fb262e9/2026-06-17/chats/2026-06-17-3d-mouse-keyboard-camera-controls.md) · session 2026-06-17 · discussion: Talk: 3D Mouse Keyboard Camera Controls *Verbatim chat log: immutable provenance. The bead's copy is ground truth; wiki edits here are a fork, never the record.*
Bead `b28561b2-f9e6-4a2a-88f3-edb06fb262e9`. Session date 2026-06-17. Body: CV (Claude Code extension). Verbatim user prompts; assistant turns summarized with pointers to the durable notes.
## Pre-bead context - The IDE had `7610bb17` (`through-the-lens-campanile`) README open. Noted as ambient context; the new bead mounts it as a research sibling but the camera-controls catalog is its own concern.
## Turn 1 (verbatim user prompt) > we will catalog different 3d mouse and keyboard navigations standards or norms. > start-bead 3D-mouse-keyboard-camera-controls > go online and find writeups. > explore three.js on what they offer as options to switch. > explore cesium.js and their options > mapbox 3d > maplibre > distinguish fly mode vs orbit and or object selection and edit action mode. What are those called in different industries > also look at the cad world like autocad. > bead-sync at end and give me your url ### Assistant actions 1. Read the bead protocol (`.ai/START-HERE.md`, `.ai/beads.md`, `.ai/conventions.md`, `.ai/skills/bead-sync/SKILL.md`) and an example `about.md` for the template. 2. Generated GUID `b28561b2-f9e6-4a2a-88f3-edb06fb262e9`; opened the bead. 3. Launched four parallel web-research sweeps (general-purpose subagents, each using WebSearch + WebFetch against official docs and reputable writeups): - three.js controls classes (Orbit, Map, Trackball, Arcball, Fly, FirstPerson, PointerLock, Transform, Drag) + the runtime-switch pattern. - CesiumJS Camera + ScreenSpaceCameraController (default bindings by scene mode, enable flags, flyTo / lookAt, manual WASD). - Mapbox GL JS + MapLibre GL JS (camera model, handlers, keyboard, FreeCamera, terrain / globe, NavigationControl, the maxPitch 85-vs-60 divergence). - CAD / DCC / game (AutoCAD, Autodesk suite, SolidWorks, Blender, Maya, 3ds Max, C4D, Unity, Unreal, SketchUp, SpaceMouse) + the cross-industry synonym map and the three-paradigm taxonomy. 4. Wrote the notes: - [00-goal-and-taxonomy.md](../notes/00-goal-and-taxonomy.md): the three paradigms (orbit/examine, fly/walk, object-edit), the synonym tables, the default-orbit-binding divergence table. - [01-threejs-controls.md](../notes/01-threejs-controls.md). - [02-cesiumjs-camera.md](../notes/02-cesiumjs-camera.md). - [03-mapbox-maplibre.md](../notes/03-mapbox-maplibre.md). - [04-cad-dcc-game-engines.md](../notes/04-cad-dcc-game-engines.md). 5. Wrote `about.md` + `README.md`. Ran `/bead-sync`. ### Key findings captured (so the chat alone re-derives the answer) - **Three paradigms, distinct input channels:** Orbit/Examine (camera circles a target, fixed up-vector), Fly/Walk (first-person camera-is-locus, WASD+mouse-look), Object-edit/Transform (move geometry via a gizmo, camera holds still). Camera motion binds to a modifier (Alt) or button-hold; transform binds to bare keys (W/E/R or G/R/S), so they coexist without conflict. - **Cross-industry names:** Orbit = Tumble (Maya) = Examine (Navisworks/web viewers) = Arc Rotate = Rotate View (SolidWorks) = Arcball. Pan = Track (Maya). Zoom = Dolly (Maya/Blender separate Dolly=move-camera from Zoom=lens-focal-length). Fly = Walk = Flythrough (Unity) = Walkthrough = Tour Building (Revit). Object handle = Gizmo = Manipulator (Maya) = Triad (SolidWorks). - **"Maya navigation"** (Alt+LMB tumble / Alt+MMB track / Alt+RMB dolly) is the nearest thing to a universal standard. The bare-MMB-orbit outliers are SolidWorks and Blender (the muscle-memory clash). - **three.js** ships nine controls; you switch by dispose+recreate and preserving camera state. Nav controls vs object controls (Transform/Drag) coexist; gate the camera control off during a gizmo drag. - **Cesium** is globe-orbit by default (LEFT_DRAG rotates the globe), with five remappable `*EventTypes`; free-look is SHIFT+LEFT_DRAG; no built-in WASD (the Camera Tutorial wires it manually); lookAt locks the frame, flyTo does not. - **Mapbox/MapLibre** share identical handler bindings (right-drag / Ctrl-drag rotates bearing+pitch together via `pitchWithRotate`; Shift+arrows rotate/pitch on the keyboard). Big divergence: default maxPitch 85 (Mapbox) vs 60 (MapLibre). FreeCameraOptions is the closest thing to a fly mode; neither ships a WASD controller.
## End-bead note Sync result and the canonical URL are reported in the assistant's final turn. Reference / survey bead; no code shipped here.