THREE.JS / FOUNDATIONS 161

Point. Hold. Release.

Follow one target-ray controller through connected, hover, selectstart, selectend, and disconnected states. Desktop buttons dispatch the same controller events so the ownership contract is testable without pretending a headset is present.

Initializing Preparing renderer

Preparing WebXR manager, target-ray spaces, grip models, and shared raycasting...

mode
-
connected
-
hovered
-
selected
-
events
-
ray hits
-
moves
-
draws
-
Desktop event harnesssame controller listeners

Selectstart attaches the intersected mesh to the controller; selectend attaches it back to the content group while preserving world transform.

Event sequencewaiting
No controller events yet.
active controller-
target-ray mode-
object ownershipscene group

The event log is intentionally short; it records the last eight lifecycle transitions.

Capability boundaryprobing
WebXR API-
immersive VR-
XRButton-
reference space-

A desktop simulation can verify state transitions and ownership; physical controller pose, input source profiles, and immersive frame timing still require a headset.

The XR button is a real session entry point. Use ?forceWebGL=1 for the WebGL2 companion; no physical XR session is claimed by desktop simulation.

THREE.JS FOUNDATIONS LAB