The horizontal semicircular canals sense head angular velocity, not position. The cupula — an elastic membrane deflected by inertial lag of the endolymph fluid — behaves like a heavily damped torsion pendulum. Ignoring its ~3 ms short time constant, its transfer function relating cupula deflection Δ to head velocity Ω is a high-pass filter:
Δ(s)/Ω(s) = T1·s / (1 + T1·s), T1 ≈ 5–7 s (physiological)
implemented here as: dz/dt = (Ω_head − z)/T1 (low-pass state)
Δ = Ω_head − z (cupula/canal signal)
Because T1 is long, Δ ≈ Ω_head for any head movement faster than about 1/T1 — the canal reports velocity accurately during ordinary head turns — but decays toward zero during sustained constant-velocity rotation. Drag the T1 slider low (2 s) and hold a constant manual turn to see the cupula signal — and hence the reflex — decay away far faster than at the physiological 6 s.
ω_eye = −g · Δ (ideal g = 1.0 → perfect gaze stabilization)
gaze angle = θ_head + θ_eye-in-head
retinal slip = −(gaze angle) [target fixed at 0°, straight ahead]
- VOR gain slider — g < 1 under-compensates (vestibular hypofunction, causes oscillopsia — the world appears to jump during head movement); g > 1 over-compensates.
- VOR suppression — when you deliberately track a target that moves with your head (reading a phone while walking), smooth pursuit overrides the reflex and drives eye-in-head offset back toward zero instead of counter-rotating.
- Manual head control — drag left/right inside the head view to turn the head yourself; the canal signal is then computed from your actual drag velocity (a finite-difference derivative each frame), exactly as it would be computed from a real angular-rate sensor, not from a closed-form sine.
- Eye-in-head rotation is clamped to ±40°, the approximate physiological range of horizontal ocular motility before a real eye would need a saccadic reset (the fast phase of nystagmus), simplified away here to keep the slow-phase compensation visible.
Clinical relevance: the head-impulse test measures exactly this gain at the bedside — a corrective catch-up saccade after a fast head turn indicates g well below 1, a hallmark of vestibular neuritis or ototoxic canal damage.