THREE.JS / FOUNDATIONS 103

Turn first. Then let the step speak.

A movement input is a direction, not an instantaneous rotation. Compare a shortest-path Euler turn, a bounded quaternion turn, and a semantic footstep clock that is explicit about its authored data.

Initializing -

Loading the locomotion clip and orientation study lanes.

Target
-
Euler error
-
Quaternion error
-
Steps
-
Facing controllerchecking
90°
2.80 rad/s

The target heading is shared by all lanes; only the orientation policy changes.

Orientation policy audit-
Euler yaw
-
Euler step
-
Quat yaw
-
Quat step
-
LookAt yaw
-
LookAt step
-

Euler uses wrapped yaw plus a maximum angular delta. Quaternion uses setFromUnitVectors() and rotateTowards(). The event lane uses Object3D.lookAt() for a deliberately instant comparison.

Authored step clock-
00.51
Left @ 02%+Right @ 27%+ Left @ 52%+Right @ 77%
Phase
-
Last event
-
Event count
-
Mixer loops
-

Waiting for the first authored footstep event.

The GLB provides pose tracks but no semantic event track. This explicit phase schedule is the gameplay data that turns a loop into a footstep event.

Direction to gameplay signal
input heading->target quaternion->turn clamp->step event

AnimationMixer updates the pose clock; the orientation controller and semantic event schedule remain application policy.

Try ?forceWebGL=1 for a WebGL2 comparison. The authored schedule is intentionally labeled study data; it is not extracted from the RobotExpressive GLB.

Back to the study index ->
LAB 103 / FACING + EVENTS