Signatur
Beschreibung
Die Eigenschaft hasOrientation gehört zur Schnittstelle VRDisplayCapabilities der veralteten WebVR-API. Man erreicht sie über VRDisplay.capabilities. Sie ist true, wenn das Headset die Drehung des Kopfes erfassen kann, also Neigen, Gieren und Rollen (3DoF). Die Werte stehen dann in VRPose.orientation als Quaternion bereit.
Praktisch nutzt man die Eigenschaft, um vor dem Rendern zu prüfen, ob eine kopfgesteuerte Kamera möglich ist. Ist der Wert false, sollte die Anwendung auf eine andere Steuerung ausweichen, etwa Maus, Touch oder Gerätesensoren über DeviceOrientationEvent. Zusammen mit hasPosition lässt sich unterscheiden, ob nur Drehung (3DoF) oder zusätzlich Position im Raum (6DoF) erfasst wird.
Da WebVR durch die WebXR Device API abgelöst wurde, eignet sich diese Eigenschaft nur noch für ältere Anwendungen. Neue Projekte sollten WebXR verwenden.
Rückgabewert
true, wenn das Display Orientierungsdaten verfolgen und liefern kann, sonst false.Beispiele
Fähigkeiten aller angeschlossenen VR-Displays prüfen
const checkDisplays = async () => {
if (!navigator.getVRDisplays) {
console.log('WebVR wird nicht unterstützt.');
return;
}
const displays = await navigator.getVRDisplays();
for (const display of displays) {
const { hasOrientation, hasPosition } = display.capabilities;
console.log(`${display.displayName}: Orientierung=${hasOrientation}, Position=${hasPosition}`);
}
};
checkDisplays();
3DoF oder 6DoF bestimmen
const getTrackingMode = (display) => {
const caps = display.capabilities;
if (caps.hasOrientation && caps.hasPosition) return '6DoF';
if (caps.hasOrientation) return '3DoF';
return 'kein Tracking';
};
navigator.getVRDisplays().then(([display]) => {
if (display) console.log('Tracking-Modus:', getTrackingMode(display));
});
Orientierung nur bei Unterstützung auslesen
const frameData = new VRFrameData();
const render = (display) => {
display.getFrameData(frameData);
if (display.capabilities.hasOrientation && frameData.pose.orientation) {
const [x, y, z, w] = frameData.pose.orientation;
console.log('Quaternion:', x.toFixed(2), y.toFixed(2), z.toFixed(2), w.toFixed(2));
} else {
// Ausweichen auf Maussteuerung
console.log('Keine Orientierung – nutze Maussteuerung.');
}
display.requestAnimationFrame(() => render(display));
};
navigator.getVRDisplays().then(([display]) => display && render(display));
// Wichtig · Fallstricke
Veraltet: WebVR war nie ein offizieller Standard und ist deprecated. Chrome hatte die API nur hinter Flags oder in Origin Trials, Firefox hat sie entfernt. Safari hat sie nie unterstützt. Verwende stattdessen die WebXR Device API (navigator.xr, XRViewerPose).
- Prüfe vor jedem Zugriff, ob
navigator.getVRDisplaysexistiert. Sonst wirft der Code einenTypeError. - Auch wenn
hasOrientationtrueist, kannVRPose.orientationin einzelnen Framesnullsein, etwa wenn das Tracking kurz verloren geht. Prüfe den Wert deshalb auch beim Rendern. - Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird stillschweigend ignoriert, im Strict Mode kann sie einen Fehler auslösen.
- Die API funktioniert nur in einem sicheren Kontext (HTTPS).