Signatur
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
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.');
}
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();
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);
});
};
// 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.depthFarverwenden. - Vor dem Zugriff immer mit
'getVRDisplays' in navigatorprüfen, ob WebVR verfügbar ist. - Ein sehr großes Verhältnis zwischen
depthFarunddepthNearverringert die Genauigkeit des Tiefenpuffers und führt zu Z-Fighting. Meistens bringt es mehr,depthNearzu erhöhen, alsdepthFarzu verkleinern. - Eigene Projektionsmatrizen, die man selbst aus
getEyeParameters()berechnet, müssen dieselben Werte verwenden, sonst passen Tiefenpuffer und Geometrie nicht zusammen.