Signatur
Beschreibung
Die Eigenschaft downDegrees gehört zur Schnittstelle VRFieldOfView der veralteten WebVR-API. Sie liefert als number den Winkel in Grad, um den sich das Sichtfeld (Field of View) eines Auges vom Blickmittelpunkt aus nach unten erstreckt. Zusammen mit upDegrees, leftDegrees und rightDegrees beschreibt sie das meist asymmetrische Sichtfrustum eines Head-Mounted-Displays.
Ein VRFieldOfView-Objekt bekommt man über VREyeParameters.fieldOfView, das wiederum mit VRDisplay.getEyeParameters('left') bzw. 'right' abgerufen wird. Die vier Winkelwerte dienten dazu, eine eigene Projektionsmatrix zu berechnen, etwa für WebGL-Renderer, die die von VRFrameData gelieferten Matrizen nicht verwenden wollten.
In der Praxis ist die Eigenschaft nur noch für die Wartung alter WebVR-Anwendungen von Bedeutung. Neue Projekte sollten die WebXR Device API verwenden, in der die Projektion direkt als XRView.projectionMatrix bereitsteht.
Rückgabewert
Beispiele
Sichtfeldwinkel des linken Auges auslesen
// Nur in Browsern mit WebVR 1.1 (z. B. altes Firefox mit Flag)
const zeigeSichtfeld = async () => {
if (!navigator.getVRDisplays) {
console.log('WebVR wird nicht unterstützt');
return;
}
const displays = await navigator.getVRDisplays();
if (displays.length === 0) return;
const fov = displays[0].getEyeParameters('left').fieldOfView;
console.log(`Nach unten: ${fov.downDegrees}°`);
console.log(`Nach oben: ${fov.upDegrees}°`);
};
zeigeSichtfeld();
Projektionsmatrix aus den vier Winkeln berechnen
// Erzeugt eine WebGL-kompatible Perspektivmatrix (spaltenweise, Float32Array)
const fovZuProjektion = (fov, near = 0.1, far = 1000) => {
const rad = (grad) => (grad * Math.PI) / 180;
const up = Math.tan(rad(fov.upDegrees));
const down = Math.tan(rad(fov.downDegrees));
const left = Math.tan(rad(fov.leftDegrees));
const right = Math.tan(rad(fov.rightDegrees));
const xScale = 2 / (left + right);
const yScale = 2 / (up + down);
return new Float32Array([
xScale, 0, 0, 0,
0, yScale, 0, 0,
-((left - right) * xScale * 0.5), (up - down) * yScale * 0.5, far / (near - far), -1,
0, 0, (far * near) / (near - far), 0
]);
};
// Test mit einem nachgebildeten VRFieldOfView-Objekt
const fov = { upDegrees: 45, downDegrees: 45, leftDegrees: 45, rightDegrees: 45 };
console.log(fovZuProjektion(fov)[5].toFixed(3));
Vertikales Gesamtsichtfeld mit WebXR-Fallback ermitteln
const vertikalesSichtfeld = async () => {
if ('xr' in navigator) {
console.log('WebXR verfügbar – XRView.projectionMatrix verwenden');
return null;
}
if (navigator.getVRDisplays) {
const [display] = await navigator.getVRDisplays();
if (!display) return null;
const { upDegrees, downDegrees } = display.getEyeParameters('right').fieldOfView;
const gesamt = upDegrees + downDegrees;
console.log(`Vertikal: ${gesamt.toFixed(1)}°`);
return gesamt;
}
return null;
};
vertikalesSichtfeld();
// Wichtig · Fallstricke
- Veraltet: Die WebVR-API wurde nie standardisiert und ist aus allen großen Browsern entfernt worden (Firefox, Chrome/Edge haben sie zugunsten von WebXR entfernt). Für neuen Code die WebXR Device API nutzen.
- Der Wert ist in Grad angegeben – für
Math.tan()vorher ins Bogenmaß umrechnen. - Das Sichtfeld ist meist asymmetrisch:
downDegreesundupDegreesunterscheiden sich oft, daher nicht einfach einen symmetrischen FOV annehmen. - Bereits in WebVR 1.1 galt
VREyeParameters.fieldOfViewals überholt; empfohlen waren die fertigen Matrizen ausVRFrameData(z. B.leftProjectionMatrix). - Vor dem Zugriff immer per Feature-Erkennung (
navigator.getVRDisplays) prüfen, sonst gibt es einenTypeError.