Start · Sprachen · JavaScript · Referenz · VRFieldOfView.downDegrees

VRFieldOfView.downDegrees

Eigenschaft

Schreibgeschützte Eigenschaft, die angibt, um wie viele Grad sich das Sichtfeld eines Auges vom Mittelpunkt aus nach unten erstreckt.

seit JavaScript Veraltet (WebVR 1.1, nicht standardisiert) – erset deprecated seit ja Kategorie: webapi

Signatur

VRFieldOfView.downDegrees

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

Typ
number
Beschreibung
Winkel in Grad (Gleitkommazahl, positiv), um den sich das Sichtfeld vom Mittelpunkt nach unten erstreckt. Schreibgeschützt.

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();
Nach unten: 55.8° Nach oben: 53.1°

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));
1.000

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();
WebXR verfügbar – XRView.projectionMatrix verwenden

// 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: downDegrees und upDegrees unterscheiden sich oft, daher nicht einfach einen symmetrischen FOV annehmen.
  • Bereits in WebVR 1.1 galt VREyeParameters.fieldOfView als überholt; empfohlen waren die fertigen Matrizen aus VRFrameData (z. B. leftProjectionMatrix).
  • Vor dem Zugriff immer per Feature-Erkennung (navigator.getVRDisplays) prüfen, sonst gibt es einen TypeError.