Start · Sprachen · JavaScript · Referenz · PositionSensorVRDevice.resetSensor()

PositionSensorVRDevice.resetSensor()

Methode

Setzt den Positionssensor eines VR-Geräts zurück, sodass die aktuelle Position und Ausrichtung künftig als Nullpunkt (Ursprung) gelten.

seit JavaScript Veraltet: WebVR 0.x (nur experimentell, z. B. Fire deprecated seit ja Kategorie: webapi

Signatur

PositionSensorVRDevice.prototype.resetSensor()

Beschreibung

Die Methode resetSensor() gehört zur veralteten Schnittstelle PositionSensorVRDevice der frühen WebVR-Spezifikation (Version 0.x). Wenn man sie aufruft, wird die aktuelle Position und Ausrichtung des Headsets zum neuen Bezugspunkt. Danach liefert getState() für genau diese Haltung eine Position von {x: 0, y: 0, z: 0} und eine neutrale Ausrichtung (Quaternion ohne Drehung).

Typische Anwendungsfälle waren eine „Blickrichtung neu zentrieren“-Funktion (Recenter), z. B. wenn sich der Nutzer auf dem Stuhl gedreht hatte, oder das Kalibrieren der Startposition beim Laden einer Szene. Meist lag die Funktion auf einer Taste oder einem Menüpunkt.

Später wurde die Schnittstelle durch VRDisplay ersetzt. Dort übernahm VRDisplay.resetPose() diese Aufgabe, und auch diese Methode ist inzwischen veraltet. Heute nutzt man die WebXR Device API: Dort löst die Plattform das Neu-Zentrieren über das reset-Event von XRReferenceSpace aus, und eine Anwendung kann mit getOffsetReferenceSpace() einen eigenen Versatz festlegen.

Rückgabewert

Typ
void
Beschreibung
Kein Rückgabewert (undefined). Die Wirkung zeigt sich erst bei späteren Aufrufen von getState() bzw. getImmediateState().

Beispiele

Positionssensor suchen und beim Start zurücksetzen (Legacy-WebVR)

// Nur in alten, experimentellen WebVR-Builds lauffähig
const findPositionSensor = async () => {
  if (!navigator.getVRDevices) {
    console.warn('WebVR 0.x wird nicht unterstützt.');
    return null;
  }
  const devices = await navigator.getVRDevices();
  return devices.find(d => d instanceof PositionSensorVRDevice) ?? null;
};

const sensor = await findPositionSensor();
if (sensor) {
  sensor.resetSensor(); // aktuelle Haltung = Ursprung
  const { position, orientation } = sensor.getState();
  console.log(position, orientation);
}
DOMPoint { x: 0, y: 0, z: 0, w: 0 } DOMPoint { x: 0, y: 0, z: 0, w: 1 }

Blickrichtung per Taste neu zentrieren

let sensor = null;

navigator.getVRDevices?.().then(devices => {
  sensor = devices.find(d => d instanceof PositionSensorVRDevice) ?? null;
});

document.addEventListener('keydown', (event) => {
  if (event.key === 'r' && sensor) {
    sensor.resetSensor();
    console.log('Sensor zurückgesetzt – Ansicht neu zentriert.');
  }
});
Sensor zurückgesetzt – Ansicht neu zentriert.

Moderne Alternative mit WebXR: Reset-Event behandeln

const startXR = async () => {
  if (!(await navigator.xr?.isSessionSupported('immersive-vr'))) {
    console.warn('immersive-vr nicht verfügbar');
    return;
  }
  const session = await navigator.xr.requestSession('immersive-vr');
  let refSpace = await session.requestReferenceSpace('local');

  // Das System (z. B. Recenter-Taste am Headset) meldet einen Reset
  refSpace.addEventListener('reset', (event) => {
    console.log('Referenzraum wurde zurückgesetzt', event.transform);
  });

  // Eigener Versatz, z. B. Nutzer 1,6 m über dem Boden platzieren
  refSpace = refSpace.getOffsetReferenceSpace(
    new XRRigidTransform({ x: 0, y: -1.6, z: 0 })
  );
};

// Muss durch eine Nutzeraktion (z. B. Klick) ausgelöst werden
document.querySelector('#enter-vr')?.addEventListener('click', startXR);

// Wichtig · Fallstricke

Veraltet und entfernt: PositionSensorVRDevice und resetSensor() gab es nur in experimentellen Browser-Builds. Kein aktueller Browser unterstützt sie. Verwende sie in neuem Code nicht, sondern greife zur WebXR Device API (navigator.xr).

  • Die Methode verändert keine bereits abgefragten Zustandsobjekte. Erst ein erneuter Aufruf von getState() liefert die zurückgesetzten Werte.
  • Geräte, die nur die Ausrichtung messen (ohne Positions-Tracking), setzen lediglich die Ausrichtung zurück. Die Position bleibt dann ohnehin null oder 0.
  • Prüfe die Verfügbarkeit immer vorher, z. B. mit navigator.getVRDevices bzw. navigator.xr. Sonst wirft der Aufruf einen TypeError.
  • Löse einen Reset nicht ohne Wissen des Nutzers aus. Ein plötzlicher Sprung der Ansicht in VR kann Übelkeit (Motion Sickness) verursachen.
  • WebXR funktioniert nur in sicheren Kontexten (HTTPS). Außerdem kann die Permissions-Policy xr-spatial-tracking den Zugriff einschränken.