Signatur
Beschreibung
Das Interface VREyeParameters gehört zur veralteten WebVR API. Es enthält alle Informationen, die man braucht, um eine Szene für ein Auge korrekt darzustellen. Eine Instanz erzeugt man nicht selbst. Man bekommt sie über VRDisplay.getEyeParameters("left") bzw. VRDisplay.getEyeParameters("right").
Wichtige Eigenschaften (alle nur lesbar):
offset: einFloat32Arraymit drei Werten (x, y, z). Er gibt den Versatz des Auges von der Mitte zwischen beiden Augen in Metern an und entspricht etwa dem halben Augenabstand (IPD).renderWidth/renderHeight: empfohlene Breite und Höhe des Renderbereichs in Pixeln für dieses Auge.fieldOfView(VRFieldOfView): das Sichtfeld in Grad (oben, rechts, unten, links). Diese Eigenschaft gilt als veraltet, stattdessen nimmt man die Projektionsmatrizen ausVRFrameData.
In der Praxis braucht man VREyeParameters vor allem, um die Größe des Canvas festzulegen. Für stereoskopisches Rendern liegen beide Augen nebeneinander, deshalb ist die Canvas-Breite die Summe beider renderWidth-Werte und die Höhe das Maximum der renderHeight-Werte. Für neue Projekte sollte man die WebXR Device API verwenden, die WebVR vollständig ersetzt.
Rückgabewert
VRDisplay.getEyeParameters(whichEye) zurückgegeben. Es gibt keinen öffentlichen Konstruktor.Beispiele
Augenparameter abrufen und ausgeben
// Nur in Browsern mit WebVR-Unterstützung (z. B. alter Firefox, Oculus Browser)
const init = async () => {
if (!navigator.getVRDisplays) {
console.log('WebVR wird nicht unterstützt – bitte WebXR verwenden.');
return;
}
const [display] = await navigator.getVRDisplays();
if (!display) return console.log('Kein VR-Headset gefunden.');
const left = display.getEyeParameters('left');
console.log('Offset links:', Array.from(left.offset));
console.log(`Auflösung: ${left.renderWidth} x ${left.renderHeight}`);
};
init();
Canvas-Größe für Stereo-Rendering festlegen
const setupCanvas = (display, canvas) => {
const left = display.getEyeParameters('left');
const right = display.getEyeParameters('right');
// Beide Augen nebeneinander rendern
canvas.width = left.renderWidth + right.renderWidth;
canvas.height = Math.max(left.renderHeight, right.renderHeight);
console.log(`Canvas: ${canvas.width} x ${canvas.height}`);
};
navigator.getVRDisplays?.().then(([display]) => {
if (display) setupCanvas(display, document.querySelector('canvas'));
});
Augenabstand (IPD) berechnen
const getIPD = (display) => {
const l = display.getEyeParameters('left').offset;
const r = display.getEyeParameters('right').offset;
const ipd = Math.hypot(r[0] - l[0], r[1] - l[1], r[2] - l[2]);
return `${(ipd * 1000).toFixed(1)} mm`;
};
navigator.getVRDisplays?.().then(([d]) => d && console.log('IPD:', getIPD(d)));
// Wichtig · Fallstricke
Veraltet: WebVR wurde nie standardisiert und ist in allen gängigen Browsern entfernt oder abgeschaltet (Chrome hatte es nur hinter einem Flag, Firefox hat es entfernt). Nutze stattdessen die WebXR Device API. Dort entsprechen XRView und XRWebGLLayer.getViewport() dieser Funktion.
- Prüfe die Unterstützung immer vorher, z. B. mit
'getVRDisplays' in navigator. fieldOfViewist schon innerhalb von WebVR 1.1 veraltet. Nimm für die ProjektionVRFrameData.leftProjectionMatrixbzw.rightProjectionMatrix.renderWidth/renderHeightsind nur Empfehlungen. Kleinere Werte verbessern die Leistung, machen das Bild aber unschärfer.- Die Werte können sich ändern, z. B. wenn der Nutzer den IPD-Regler am Headset verstellt. Frage sie deshalb bei einem
vrdisplaypresentchange-Ereignis neu ab. - WebVR benötigt einen sicheren Kontext (HTTPS).