>> Tecnologia Eletrônica >  >> Rádio via Satélite >> XM

OpenGL glDepthRange e Far Clipping Plane: Configurando Mapeamento de Profundidade Corretamente

Mapeamento de Range de Profundidade

O comando glDepthRange(near, far) define o mapeamento de coordenadas de dispositivo normalizadas (NDC) z ∈ [-1, 1] para valores de profundidade no espaço da janela.

Uso Padrão

glDepthRange(0.0, 1.0); // Padrão: near=0, far=1

glZMax 999 não é uma função OpenGL padrão. Pode referir-se a:

  • Definir a distância do far clipping plane na matriz de projeção (ex.: glFrustum, gluPerspective, glm::perspective), onde far = 999 unidades.
  • Convenção de nomenclatura de wrapper de engine customizado.

Far Plane da Matriz de Projeção

Em gluPerspective(fov, aspect, near, far), far define a distância máxima de visualização. Objetos além de far são clippados.

  • far muito grande (ex.: 999999) → z-fighting (perda de precisão de profundidade) devido à distribuição não-linear de profundidade (precisão concentrada perto de near).
  • Melhor prática: Defina near o maior possível, far o menor possível para a cena.

Precisão do Depth Buffer

Depth buffer 24-bit: precisão ≈ near * far / (far - near) à distância. Reverse-z (depth floating-point, glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE) + glDepthFunc(GL_GREATER)) melhora dramaticamente precisão para ranges grandes.