Signatur
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
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);
}
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.');
}
});
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
nulloder 0. - Prüfe die Verfügbarkeit immer vorher, z. B. mit
navigator.getVRDevicesbzw.navigator.xr. Sonst wirft der Aufruf einenTypeError. - 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-trackingden Zugriff einschränken.