2014-10-19 11 views
5

Sto leggendo una heightmap da un file e lo sto riproducendo con strisce triangolari.Perché la mia scena di opengl ha problemi con il buffer di profondità?

Il heightmap:

enter image description here

Funziona bene, questo è come appare:

enter image description here

Sembra a posto, ma solo da questa direzione. Se mi rivolgo la macchina fotografica un po ', questo inizia accadendo:

enter image description here

Sembra come se il mio depth buffer è danneggiato. L'ho abilitato e funziona bene con altre geometrie.

Qualcuno ha avuto un problema come questo prima? Non so nemmeno cosa cercare. Grazie!

Edit:

La mia configurazione matrice di proiezione:

1,2062851 0,0 0,0 0,0

0,0 2,1445069 0,0 0,0

0,0 0,0 -1,0 -1,0

0,0 0,0 -0,2 0,0

_fieldOfView(50.0f), 
_nearPlane(0.1f), 
_farPlane(10000.0f), 
_viewportAspectRatio(16.0f/9.0f) 
+0

Potresti mostrare la configurazione della matrice di proiezione e anche il contenuto del file heightmap? :) – Iggy

+0

Potrebbe anche essere utile attivare la modalità wireframe per ispezionare visivamente gli artefatti. 'glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);' – Iggy

+0

Ehi, grazie per aver risposto. Ho aggiornato la domanda. L'attivazione di wireframe è stata la prima che ho fatto, e sembra a posto - http://i.snag.gy/fKpx1.jpg – qwertzguy

risposta

0

Grazie a tutti per i vostri utili commenti. Ho trovato il problema, e spero che altri che hanno questo problema troveranno la soluzione utile. Ho dovuto riattivare il buffer di profondità prima di ogni frame (glEnable (GL_DEPTH_TEST)), invece di una volta alla creazione del renderer. Avevo l'impressione che si trattasse di uno stato globale e quindi non avrebbe bisogno di essere reimpostato ogni volta che eseguo il rendering.

prodotto La fine si presenta così, senza problemi di buffer di profondità:

enter image description here

In ogni caso, spero che questo aiuta qualcuno.

+6

In realtà 'glEnable (GL_DEPTH_TEST)' è uno stato globale. – concept3d

+7

Si potrebbe aggiornare lo stato di 'GL_DEPTH_TEST' da qualche parte nel programma, accertarsi di cercare tutte le istanze di' GL_DEPTH_TEST' per sanitizzare il modo in cui lo si gestisce. –

+0

Grazie per le vostre risposte, controlleremo per quello. – qwertzguy

Problemi correlati