Start · Sprachen · JavaScript · Referenz · VRDisplayCapabilities.hasOrientation

VRDisplayCapabilities.hasOrientation

Eigenschaft

Schreibgeschützter Wahrheitswert, der angibt, ob das VR-Display die Orientierung (Drehung) des Kopfes verfolgen und über <code>VRPose.orientation</code> liefern kann.

seit JavaScript WebVR 1.1 (veraltet, nie Standard; ersetzt durch W deprecated seit ja Kategorie: webapi

Signatur

VRDisplayCapabilities.hasOrientation

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

Typ
boolean
Beschreibung
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();
Oculus Rift CV1: Orientierung=true, Position=true

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));
});
Tracking-Modus: 3DoF

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));
Quaternion: 0.01 0.38 -0.02 0.92

// 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.getVRDisplays existiert. Sonst wirft der Code einen TypeError.
  • Auch wenn hasOrientation true ist, kann VRPose.orientation in einzelnen Frames null sein, 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).