Start · Sprachen · JavaScript · Referenz · VRDisplayCapabilities

VRDisplayCapabilities

Schnittstelle

Beschreibt die Fähigkeiten eines <code>VRDisplay</code>, etwa ob es Position oder Orientierung erfasst, ein externes Display hat und wie viele Ebenen es darstellen kann.

seit JavaScript WebVR 1.1 (veraltet, nie standardisiert; ersetzt d deprecated seit ja Kategorie: webapi

Signatur

interface VRDisplayCapabilities

Beschreibung

Das Interface VRDisplayCapabilities gehört zur veralteten WebVR API. Über die Eigenschaft VRDisplay.capabilities bekommt man ein Objekt dieses Typs. Seine schreibgeschützten Eigenschaften zeigen, was ein angeschlossenes VR-Headset kann. So lässt sich die Anwendung zur Laufzeit an das jeweilige Gerät anpassen.

Das Interface hat die folgenden schreibgeschützten Eigenschaften:

  • canPresent (boolean): Das Display kann Inhalte darstellen, also requestPresent() unterstützen.
  • hasExternalDisplay (boolean): Das Display ist vom Hauptbildschirm des Geräts getrennt, wie bei einem Desktop-Headset. Bei mobilen Lösungen wie Cardboard ist der Wert false.
  • hasOrientation (boolean): Das Gerät kann seine Ausrichtung verfolgen (3DoF). Diese Eigenschaft ist veraltet.
  • hasPosition (boolean): Das Gerät kann seine Position im Raum verfolgen (6DoF).
  • maxLayers (number): Die größte Anzahl an VRLayerInit-Ebenen, die requestPresent() annimmt. Der Wert ist 0, wenn canPresent falsch ist, und sonst mindestens 1.

Typischerweise wertet man diese Eigenschaften direkt nach navigator.getVRDisplays() aus. Man entscheidet damit zum Beispiel, ob Raum-Tracking angeboten wird oder ob die Szene zusätzlich auf dem Hauptbildschirm gespiegelt werden muss (Mirroring). Für neue Projekte sollte man stattdessen die WebXR Device API verwenden.

Rückgabewert

Typ
VRDisplayCapabilities
Beschreibung
Man erzeugt die Instanz nicht selbst. Sie wird über VRDisplay.capabilities geliefert.

Beispiele

Fähigkeiten des ersten VR-Displays auslesen

const pruefeVR = async () => {
  if (!navigator.getVRDisplays) {
    console.log('WebVR wird nicht unterstützt');
    return;
  }
  const displays = await navigator.getVRDisplays();
  if (displays.length === 0) {
    console.log('Kein VR-Gerät gefunden');
    return;
  }
  const { displayName, capabilities: caps } = displays[0];
  console.log(`Gerät: ${displayName}`);
  console.log(`Darstellung möglich: ${caps.canPresent}`);
  console.log(`Positions-Tracking: ${caps.hasPosition}`);
  console.log(`Externes Display: ${caps.hasExternalDisplay}`);
  console.log(`Max. Ebenen: ${caps.maxLayers}`);
};

pruefeVR();
Gerät: Oculus Rift CV1 Darstellung möglich: true Positions-Tracking: true Externes Display: true Max. Ebenen: 1

Anwendung an die Tracking-Fähigkeiten anpassen

const konfiguriereSzene = (vrDisplay) => {
  const caps = vrDisplay.capabilities;

  if (caps.hasPosition) {
    console.log('6DoF: Raum-Tracking aktiv, Nutzer kann sich bewegen');
  } else {
    console.log('3DoF: Nur Kopfdrehung, Standardhöhe von 1,6 m verwenden');
  }

  // Bei externem Headset das Bild zusätzlich auf dem Monitor spiegeln
  return { spiegeln: caps.hasExternalDisplay };
};

navigator.getVRDisplays?.().then(([display]) => {
  if (display) console.log(konfiguriereSzene(display));
});
3DoF: Nur Kopfdrehung, Standardhöhe von 1,6 m verwenden { spiegeln: false }

Darstellung nur starten, wenn das Gerät sie unterstützt

const canvas = document.querySelector('canvas');
const button = document.querySelector('#vr-start');

navigator.getVRDisplays?.().then(([display]) => {
  if (!display || !display.capabilities.canPresent) {
    button.disabled = true;
    button.textContent = 'VR nicht verfügbar';
    return;
  }
  button.addEventListener('click', async () => {
    const layers = [{ source: canvas }].slice(0, display.capabilities.maxLayers);
    await display.requestPresent(layers);
    console.log('VR-Darstellung gestartet');
  });
});
VR-Darstellung gestartet

// Wichtig · Fallstricke

Veraltet: Die WebVR API wurde nie standardisiert. Die WebXR Device API hat sie abgelöst. Nur ältere Browser haben WebVR unterstützt, etwa Firefox bis Version 97 hinter einem Flag oder alte Versionen von Samsung Internet und Oculus Browser. Chrome hat WebVR nur in Origin Trials angeboten. In aktuellen Browsern gibt es navigator.getVRDisplays nicht. Deshalb immer vorher auf das Feature prüfen.

  • hasOrientation gilt schon innerhalb von WebVR als veraltet und ist bei fast allen Geräten true. Man sollte sich darauf nicht verlassen.
  • Die Werte sind statisch. Wer bei geänderter Hardware aktuelle Werte braucht, muss nach vrdisplayconnect bzw. vrdisplaydisconnect die Displays erneut abfragen.
  • Bei WebXR prüft man die Fähigkeiten stattdessen mit navigator.xr.isSessionSupported('immersive-vr') und über Referenzraum-Typen wie local-floor oder bounded-floor.
  • Für requestPresent() sind eine Nutzergeste und ein sicherer Kontext (HTTPS) nötig.