Signatur
Beschreibung
Die Methode resetPose() der veralteten WebVR-Schnittstelle VRDisplay legt die aktuelle VRPose.position und VRPose.orientation des Headsets als neuen Nullpunkt fest. Alle Posen, die danach über getFrameData() oder getPose() abgefragt werden, beziehen sich auf diesen neuen Ursprung.
Typischer Einsatz ist eine „Neu zentrieren“-Funktion. Wer sitzt und sich gedreht hat oder wessen Headset-Tracking abgedriftet ist, bekommt so wieder eine Ansicht, die nach vorne ausgerichtet ist. Oft liegt die Funktion auf einer Taste oder einem Button in der Oberfläche.
Bei Room-Scale-Erlebnissen, also Geräten mit capabilities.hasPosition und stageParameters, sollte man die Methode nur zurückhaltend aufrufen. Sie verschiebt das Koordinatensystem gegenüber dem echten Raum, und virtuelle Objekte passen dann womöglich nicht mehr zu den physischen Grenzen. Bei Geräten, die nur die Ausrichtung erfassen (3DoF), wird vor allem die Blickrichtung um die Hochachse (Yaw) zurückgesetzt.
Rückgabewert
undefined).Beispiele
Ansicht per Taste neu zentrieren
// Das erste verfügbare VR-Display ermitteln
const init = async () => {
if (!navigator.getVRDisplays) {
console.log('WebVR wird nicht unterstützt');
return;
}
const displays = await navigator.getVRDisplays();
if (displays.length === 0) return;
const vrDisplay = displays[0];
// Taste „R“ setzt die Pose zurück
window.addEventListener('keydown', (event) => {
if (event.key === 'r') {
vrDisplay.resetPose();
console.log('Pose zurückgesetzt');
}
});
};
init();
Pose vor und nach dem Zurücksetzen vergleichen
const comparePose = async () => {
const [vrDisplay] = await navigator.getVRDisplays();
const frameData = new VRFrameData();
vrDisplay.getFrameData(frameData);
console.log('Vorher:', frameData.pose.orientation);
vrDisplay.resetPose();
// Die neue Pose wird erst im nächsten Frame sichtbar
vrDisplay.requestAnimationFrame(() => {
vrDisplay.getFrameData(frameData);
console.log('Nachher:', frameData.pose.orientation);
});
};
comparePose();
Beim Start der Präsentation automatisch zentrieren
const startVR = async (canvas) => {
const [vrDisplay] = await navigator.getVRDisplays();
await vrDisplay.requestPresent([{ source: canvas }]);
// Nur bei Geräten ohne Room-Scale-Tracking zentrieren
if (!vrDisplay.stageParameters) {
vrDisplay.resetPose();
}
};
document.querySelector('#enter-vr')
.addEventListener('click', () => startVR(document.querySelector('canvas')));
// Wichtig · Fallstricke
Veraltet: Die gesamte WebVR-API (VRDisplay, navigator.getVRDisplays()) ist überholt und wurde aus den meisten Browsern entfernt. Chrome und Edge haben sie nur zeitweise hinter Flags angeboten, Firefox hat sie entfernt, und Safari hat sie nie unterstützt. Für neue Projekte ist die WebXR Device API gedacht.
- In WebXR gibt es keine direkte Entsprechung. Stattdessen reagiert man auf das Ereignis
reseteinesXRReferenceSpaceoder baut mitgetOffsetReferenceSpace()einen verschobenen Bezugsraum. - In Room-Scale-Anwendungen kann
resetPose()dazu führen, dass virtuelle und reale Raumgrenzen nicht mehr übereinstimmen. - Die Änderung wirkt sich erst auf Posen aus, die später abgefragt werden. Bereits ausgelesene
VRFrameData-Objekte bleiben unverändert. - Vor dem Aufruf mit
'getVRDisplays' in navigatorprüfen, ob die API überhaupt vorhanden ist.