Signatur
Beschreibung
Die schreibgeschützte Eigenschaft renderHeight des Interfaces VREyeParameters gehört zur veralteten WebVR-API. Sie liefert die vom VR-Headset empfohlene Höhe in Pixeln, mit der das Bild für ein Auge gerendert werden soll. Der Wert berücksichtigt die Linsenverzerrung, deshalb liegt er meist über der physischen Auflösung des Displays.
Sie erhalten das Objekt über VRDisplay.getEyeParameters("left") bzw. getEyeParameters("right"). Üblicherweise werden beide Augenbilder nebeneinander in ein gemeinsames <canvas> gezeichnet. Die Canvas-Breite ergibt sich dann aus der Summe beider renderWidth-Werte, die Höhe aus dem größeren der beiden renderHeight-Werte.
Typischerweise lesen Sie den Wert einmal vor dem Aufruf von VRDisplay.requestPresent() aus und stellen damit die Canvas-Größe ein. Ein zu kleines Renderziel macht das Bild unscharf, ein zu großes kostet Leistung und senkt die Bildrate.
Rückgabewert
Beispiele
Renderhöhe des linken Auges auslesen
if (navigator.getVRDisplays) {
const displays = await navigator.getVRDisplays();
if (displays.length > 0) {
const leftEye = displays[0].getEyeParameters('left');
console.log(`Empfohlene Höhe: ${leftEye.renderHeight}px`);
}
} else {
console.log('WebVR wird nicht unterstützt.');
}
Canvas für Stereo-Rendering dimensionieren
const canvas = document.querySelector('#vr-canvas');
const setupCanvas = (vrDisplay) => {
const left = vrDisplay.getEyeParameters('left');
const right = vrDisplay.getEyeParameters('right');
// Beide Augen nebeneinander, Höhe = größerer Wert
canvas.width = left.renderWidth + right.renderWidth;
canvas.height = Math.max(left.renderHeight, right.renderHeight);
console.log(`Canvas: ${canvas.width} x ${canvas.height}`);
};
const [vrDisplay] = await navigator.getVRDisplays();
if (vrDisplay) {
setupCanvas(vrDisplay);
await vrDisplay.requestPresent([{ source: canvas }]);
}
Modernes Gegenstück in WebXR
// WebXR ersetzt renderHeight durch Viewports der XRWebGLLayer
const session = await navigator.xr.requestSession('immersive-vr');
const gl = document.createElement('canvas').getContext('webgl', { xrCompatible: true });
const layer = new XRWebGLLayer(session, gl);
session.updateRenderState({ baseLayer: layer });
const refSpace = await session.requestReferenceSpace('local');
session.requestAnimationFrame((time, frame) => {
const pose = frame.getViewerPose(refSpace);
for (const view of pose?.views ?? []) {
const vp = layer.getViewport(view);
console.log(`${view.eye}: ${vp.width} x ${vp.height}`);
}
});
// Wichtig · Fallstricke
- Veraltet: Die WebVR-API ist obsolet und wurde durch die WebXR Device API ersetzt. Aktuelle Browser unterstützen sie praktisch nicht mehr. Für neue Projekte sollten Sie
XRWebGLLayer.getViewport()bzw.XRWebGLLayer.framebufferHeightverwenden. - Prüfen Sie vor der Nutzung immer, ob die API vorhanden ist (
'getVRDisplays' in navigator). Sonst kommt es zu einemTypeError. - Der Wert kann sich für linkes und rechtes Auge unterscheiden. Nehmen Sie für die Canvas-Höhe daher
Math.max()beider Werte. - Der Wert ist eine Empfehlung. Auf schwacher Hardware können Sie ihn mit einem Faktor (z. B. 0,75) verkleinern und so Qualität gegen eine flüssigere Bildrate tauschen.
- Die API erfordert einen sicheren Kontext (HTTPS), und in eingebetteten Frames kann sie durch Berechtigungsrichtlinien gesperrt sein.