OpenGL glDepthRange e piano di taglio lontano: Impostare correttamente il mapping della profondità
Mapping dell'intervallo di profondità
Il comando glDepthRange(near, far) definisce il mapping delle coordinate normalizzate del dispositivo (NDC) z ∈ [-1, 1] ai valori di profondità nello spazio finestra.
Utilizzo standard
glDepthRange(0.0, 1.0); // Predefinito: near=0, far=1glZMax 999 non è una funzione OpenGL standard. Può riferirsi a:
- Impostare la distanza del piano di taglio lontano nella matrice di proiezione (es.
glFrustum,gluPerspective,glm::perspective), dovefar = 999unità. - Una convenzione di命名 di wrapper motore personalizzato.
Piano lontano della matrice di proiezione
In gluPerspective(fov, aspect, near, far), far definisce la distanza massima di visualizzazione. Gli oggetti oltre far vengono tagliati.
fartroppo grande (es. 999999) → z-fighting (perdita precisione profondità) a causa della distribuzione non lineare della profondità (precisione concentrata vicino anear).- Best practice: imposta
nearil più grande possibile,faril più piccolo possibile per la scena.
Precisione buffer di profondità
Buffer di profondità 24-bit: precisione ≈ near * far / (far - near) alla distanza. Reverse-z (profondità floating-point, glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE) + glDepthFunc(GL_GREATER)) migliora drasticamente la precisione per grandi intervalli.