Start · Sprachen · JavaScript · Referenz · VRDisplay.depthFar

VRDisplay.depthFar

Eigenschaft

Liest oder setzt die z-Tiefe der fernen Clipping-Ebene des Sicht-Frustums eines <code>VRDisplay</code>, also die größte Entfernung, bis zu der gerendert wird.

seit JavaScript WebVR 1.1 (veraltet, nie Standard; ersetzt durch W deprecated seit ja Kategorie: webapi

Signatur

VRDisplay.depthFar

Beschreibung

Die Eigenschaft depthFar des veralteten WebVR-Interfaces VRDisplay legt fest, wie weit die ferne Clipping-Ebene (Far Plane) des Sicht-Frustums vom Auge entfernt ist. Alles, was weiter weg liegt, wird nicht gerendert. Der Wert wird in Metern angegeben. Der Standardwert ist 10000.0.

Gemeinsam mit depthNear bestimmt depthFar die Projektionsmatrizen, die über VRDisplay.getFrameData() in VRFrameData.leftProjectionMatrix und rightProjectionMatrix geliefert werden. Nach einer Änderung verwenden die nächsten Frame-Daten automatisch die neuen Werte.

Wähle den Wert passend zur Szene: Ist er zu groß, verschlechtert sich die Genauigkeit des Tiefenpuffers und es kommt zu Z-Fighting (flackernde, sich überlagernde Flächen). Ist er zu klein, werden entfernte Objekte abgeschnitten. Als Faustregel gilt, das Verhältnis depthFar / depthNear so klein wie möglich zu halten.

Die WebVR-API ist veraltet und wurde durch die WebXR Device API ersetzt. Dort übernimmt XRRenderState.depthFar diese Aufgabe, gesetzt über XRSession.updateRenderState().

Parameter

Name Typ Default Beschreibung
$value number 10000.0 Beim Setzen: neue Entfernung der fernen Clipping-Ebene in Metern. Muss größer als depthNear sein.

Rückgabewert

Typ
number
Beschreibung
Die aktuelle Entfernung der fernen Clipping-Ebene in Metern (Gleitkommazahl doppelter Genauigkeit).

Beispiele

Aktuellen Wert auslesen

if (navigator.getVRDisplays) {
  const displays = await navigator.getVRDisplays();
  if (displays.length > 0) {
    const vrDisplay = displays[0];
    console.log(`Near: ${vrDisplay.depthNear} m, Far: ${vrDisplay.depthFar} m`);
  }
} else {
  console.log('WebVR wird nicht unterstützt.');
}
Near: 0.01 m, Far: 10000 m

Clipping-Ebenen für eine Innenraum-Szene anpassen

const setupDisplay = async () => {
  const [vrDisplay] = await navigator.getVRDisplays();
  if (!vrDisplay) return null;

  // Raum ist max. 50 m groß – kleinerer Bereich = genauerer Tiefenpuffer
  vrDisplay.depthNear = 0.1;
  vrDisplay.depthFar = 50;

  const frameData = new VRFrameData();
  vrDisplay.getFrameData(frameData);
  // Die Projektionsmatrix berücksichtigt jetzt die neuen Werte
  console.log(frameData.leftProjectionMatrix);
  return vrDisplay;
};

setupDisplay();
Float32Array(16) [...]

Modernes Äquivalent mit WebXR

const startXR = async (gl) => {
  const session = await navigator.xr.requestSession('immersive-vr');
  session.updateRenderState({
    baseLayer: new XRWebGLLayer(session, gl),
    depthNear: 0.1,
    depthFar: 50
  });
  // Der Wert wird ab dem nächsten Frame übernommen
  session.requestAnimationFrame(() => {
    console.log(session.renderState.depthFar);
  });
};
50

// Wichtig · Fallstricke

  • Veraltet: WebVR wurde nie standardisiert und ist aus allen aktuellen Browsern entfernt (früher: Firefox, Chrome hinter Flag, Samsung Internet, Oculus Browser). Für neuen Code die WebXR Device API mit XRRenderState.depthFar verwenden.
  • Vor dem Zugriff immer mit 'getVRDisplays' in navigator prüfen, ob WebVR verfügbar ist.
  • Ein sehr großes Verhältnis zwischen depthFar und depthNear verringert die Genauigkeit des Tiefenpuffers und führt zu Z-Fighting. Meistens bringt es mehr, depthNear zu erhöhen, als depthFar zu verkleinern.
  • Eigene Projektionsmatrizen, die man selbst aus getEyeParameters() berechnet, müssen dieselben Werte verwenden, sonst passen Tiefenpuffer und Geometrie nicht zusammen.