OpenGL glDepthRange y plano de recorte lejano: Configuración correcta del mapeo de profundidad

Mapeo de rango de profundidad

El comando glDepthRange(near, far) define el mapeo de coordenadas de dispositivo normalizadas (NDC) z ∈ [-1, 1] a valores de profundidad en espacio de ventana.

Uso estándar

glDepthRange(0.0, 1.0); // Por defecto: near=0, far=1

glZMax 999 no es una función estándar OpenGL. Puede referirse a:

  • Establecer la distancia del plano de recorte lejano en la matriz de proyección (p. ej., glFrustum, gluPerspective, glm::perspective), donde far = 999 unidades.
  • Convención de命名 de wrapper motor personalizado.

Plano lejano en matriz de proyección

En gluPerspective(fov, aspect, near, far), far define la distancia máxima de visión. Objetos más allá de far se recortan.

  • far demasiado grande (p. ej., 999999) → z-fighting (pérdida precisión profundidad) por distribución no lineal profundidad (precisión concentrada cerca de near).
  • Mejor práctica: Establece near lo más grande posible, far lo más pequeño posible para la escena.

Precisión buffer de profundidad

Buffer profundidad 24-bit: precisión ≈ near * far / (far - near) a distancia. Reverse-z (profundidad punto flotante, glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE) + glDepthFunc(GL_GREATER)) mejora dramáticamente precisión para rangos grandes.