Signatur
Beschreibung
Die schreibgeschützte Eigenschaft upDegrees eines VRFieldOfView-Objekts gibt als Gleitkommazahl an, um wie viel Grad sich das Sichtfeld von der zentralen Blickachse aus nach oben erstreckt. Zusammen mit downDegrees, leftDegrees und rightDegrees ergibt sich daraus ein (oft asymmetrischer) Sichtkegel für ein einzelnes Auge.
Ein VRFieldOfView-Objekt erhält man in der alten WebVR-API über VRDisplay.getEyeParameters("left" | "right").fieldOfView. Die vier Winkel verwendet man, um für jedes Auge eine passende Projektionsmatrix zu berechnen – etwa wenn man keine Bibliothek einsetzt und VRFrameData.leftProjectionMatrix nicht verwenden möchte.
Da Headsets meist asymmetrische Linsen haben, sind upDegrees und downDegrees häufig nicht gleich groß. Das vertikale Gesamtsichtfeld ist die Summe upDegrees + downDegrees.
Rückgabewert
45.Beispiele
Oberen Sichtfeldwinkel des linken Auges auslesen
const displays = await navigator.getVRDisplays();
if (displays.length > 0) {
const vrDisplay = displays[0];
const { fieldOfView } = vrDisplay.getEyeParameters('left');
console.log(`Sichtfeld nach oben: ${fieldOfView.upDegrees}°`);
}
Vertikales Gesamtsichtfeld berechnen
const verticalFov = (fov) => fov.upDegrees + fov.downDegrees;
const [vrDisplay] = await navigator.getVRDisplays();
const left = vrDisplay.getEyeParameters('left').fieldOfView;
console.log(`Vertikal: ${verticalFov(left).toFixed(1)}°`);
Asymmetrische Projektionsmatrix aus dem Sichtfeld erzeugen
const toRad = (deg) => (deg * Math.PI) / 180;
const projectionFromFov = (fov, near = 0.1, far = 1000) => {
const up = Math.tan(toRad(fov.upDegrees));
const down = Math.tan(toRad(fov.downDegrees));
const left = Math.tan(toRad(fov.leftDegrees));
const right = Math.tan(toRad(fov.rightDegrees));
const xScale = 2 / (left + right);
const yScale = 2 / (up + down);
// Spaltenweise (WebGL-Konvention)
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
]);
};
// Auch ohne Headset testbar mit einem Beispielobjekt:
const fov = { upDegrees: 45, downDegrees: 45, leftDegrees: 45, rightDegrees: 45 };
console.log(projectionFromFov(fov)[5]);
// Wichtig · Fallstricke
Veraltet: Die gesamte WebVR-API (inkl. VRFieldOfView) ist nie standardisiert worden und wurde durch die WebXR Device API ersetzt. Aktuelle Browser unterstützen sie praktisch nicht mehr; sie war nur in älteren Firefox-Versionen, Edge (Legacy) und Chrome hinter Flags verfügbar. Für neue Projekte XRView.projectionMatrix verwenden.
- Der Wert ist in Grad angegeben – vor
Math.tan()ins Bogenmaß umrechnen. - Die Eigenschaft ist schreibgeschützt; Zuweisungen werden ignoriert (im strikten Modus ggf.
TypeError). - Nicht davon ausgehen, dass
upDegrees === downDegreesgilt – Sichtfelder sind häufig asymmetrisch. - Immer per Feature-Erkennung prüfen:
if ('getVRDisplays' in navigator).