Skip to main content
Mapping curves transform filtered tracking data to final output, allowing you to customize how head movements translate to in-game view changes. This is one of OpenTrack’s most powerful features.

Mapping System Overview

OpenTrack uses spline curves to map input ranges to output ranges:

How Mapping Works

The pipeline applies mapping curves after filtering:
Rotation axes are mapped before relative translation, while position axes are mapped after. This ensures proper coordinate transformations.

Map Function

Spline Curves

OpenTrack uses Catmull-Rom splines for smooth interpolation:

Catmull-Rom Interpolation

Splines are pre-computed into a lookup table for performance. The curve is evaluated at 250Hz, so fast lookups are critical.

Axis Configuration

Each axis has configurable parameters:

Input Range (clamp_x_)

Default ranges:
  • Yaw: ±180°
  • Pitch: ±90°
  • Roll: ±180°

Output Range (clamp_y_)

Similar ranges, but can be negative to invert:

Common Curve Types

Use case: Direct mapping, no modificationConfiguration:
  • Two points: (0, 0) and (max_input, max_output)
  • Input range = Output range

Practical Mapping Examples

Flight Simulation

1

Yaw (Left/Right)

Amplified in center for better awareness, tapers to 1:1 at extremes.
2

Pitch (Up/Down)

Reduced sensitivity to prevent excessive up/down look.
3

Roll

Very reduced - roll is often uncomfortable in cockpit view.
4

Translation

Moderate translation to maintain cockpit reference.

Racing Simulation

1

Yaw

2

Pitch

3

Roll

First-Person Shooter

1

Yaw & Pitch

Need precise aiming, minimal amplification.
2

Translation

Translation can be disorienting in FPS games.

Alternate Splines

Use different curves for negative values:
Use cases:
  • Asymmetric workspace (easier to turn one direction)
  • Compensate for tracking issues on one side
  • Different game mechanics per direction
Useful if your tracking setup has better performance looking one direction.

Source Axis Mapping

Remap which physical axis controls each output:

Zero Position Offset

Shift the zero point of an axis:
Use cases:
  • Adjust for monitor not being centered
  • Compensate for permanent head tilt
  • Offset default view position in game

Inversion Options

Applied early in pipeline:
Use invert_pre for fixing tracker orientation. Use invert_post for game-specific requirements.

Spline Point Management

Manipulate curve points programmatically:

Example: Create Linear Curve

Example: Create S-Curve

Performance Considerations

Splines are highly optimized:
The spline is pre-computed into a 16384-entry lookup table. Runtime evaluation is just a lookup and linear interpolation - very fast.

Troubleshooting

  1. Check “Apply mapping curves” is enabled:
  2. Verify curve has points defined
  3. Check input range (clamp_x_) covers your movement range
  4. Restart tracking after changing curves
  1. Check you’re editing the correct axis
  2. Verify curve points are sorted by X value
  3. Ensure first point is at or near (0, 0)
  4. Check for overlapping points (auto-removed but can cause confusion)
  1. Splines should be smooth - check for too-sharp corners
  2. Verify input range isn’t being clamped unexpectedly
  3. Check for axis remapping conflicts
  4. Look for points very close together
  1. Check if alternate spline is enabled but not configured
  2. Verify input range is symmetric (±X, not just 0-X)
  3. Check inversion settings
  4. Look for centering issues

Best Practices

Start simple - Begin with linear 1:1 curves, then adjust
Test incrementally - Change one axis at a time
Use S-curves - Generally provide best comfort and precision
Match your game - Racing needs different curves than flight sim
Avoid extremes - Very high amplification (>3:1) or reduction (<0.3:1) can be uncomfortable

Next Steps

Configuration

Advanced tracking settings

Filters

Smooth data before mapping

Relative Translation

Advanced translation compensation