Signatur
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, alsorequestPresent()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 Wertfalse.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 anVRLayerInit-Ebenen, dierequestPresent()annimmt. Der Wert ist0, wenncanPresentfalsch ist, und sonst mindestens1.
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
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();
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));
});
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');
});
});
// 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.
hasOrientationgilt schon innerhalb von WebVR als veraltet und ist bei fast allen Gerätentrue. Man sollte sich darauf nicht verlassen.- Die Werte sind statisch. Wer bei geänderter Hardware aktuelle Werte braucht, muss nach
vrdisplayconnectbzw.vrdisplaydisconnectdie Displays erneut abfragen. - Bei WebXR prüft man die Fähigkeiten stattdessen mit
navigator.xr.isSessionSupported('immersive-vr')und über Referenzraum-Typen wielocal-flooroderbounded-floor. - Für
requestPresent()sind eine Nutzergeste und ein sicherer Kontext (HTTPS) nötig.