2010-04-30 15 views
11

Sto tentando di visualizzare il buffer di profondità per scopi di debug, disegnandolo sopra il rendering effettivo quando viene premuto un tasto. Funziona principalmente, ma l'immagine risultante sembra essere ingrandita. (Non è solo l'immagine originale, in una scala di grigi dispari) Perché non ha le stesse dimensioni del buffer dei colori?Visualizzare il buffer di profondità

Questo è quello che sto utilizzando la vista del buffer di profondità:

void get_gl_size(int &width, int &height) 
{ 
    int iv[4]; 
    glGetIntegerv(GL_VIEWPORT, iv); 
    width = iv[2]; 
    height = iv[3]; 
} 

void visualize_depth_buffer() 
{ 
    int width, height; 

    get_gl_size(width, height); 

    float *data = new float[width * height]; 

    glReadPixels(0, 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT, data); 
    glDrawPixels(width, height, GL_LUMINANCE, GL_FLOAT, data); 

    delete [] data; 
} 

risposta

0

Tale codice dovrebbe funzionare. Per caso hai qualcos'altro chiamato glPixelZoom? Vale la pena di reimpostarlo per verificare che non stai effettivamente chiedendo uno zoom.

1

Non sono sicuro se questo è il tuo errore attuale, ma ci sono alcune cose che posso consigliare di controllare. Sarebbe bello se tu in effetti avessi fornito uno screenshot di come è esattamente ingrandito.

Prima di tutto, assicurati che le matrici di proiezione/modelview siano esattamente uguali al tuo rendering. Non riesco a vedere come potrebbe influenzarlo, ma sarebbe qualcosa da esaminare.

In secondo luogo, lo spec specifica che glPixelStore, glPixelTransfer e glPixelMap possono influenzare i risultati, è necessario assicurarsi che questi siano impostati correttamente.

Se si finisce per farlo funzionare, si prega di condividere ciò che è andato storto - sembra una domanda interessante. :)

0

un'altra cosa da verificare è che la posizione del vostro raster è corretta. vedi glRasterPos. il codice come pubblicato dovrebbe funzionare, ma posso vedere come lo stato è rovinato altrove (si disegna qualcosa prima di visualizzare la profondità ...) che dice, si è probabilmente in una zona di driver gl che non è ben collaudata perché è insolito ciò che si dovrebbe fare dopo: - test con un diverso fornitore (ATI/NV ..) - scrivono i dati letti in un file per vedere se il disegno o la lettura non funziona come previsto

-4

1) Dump grezzo dati del buffer di profondità in un file.

2) Aprire usando IrfanView (Apri come -> file RAW)

3) Regolare i parametri (larghezza, altezza) e il formato pixel in base al buffer di profondità BPP (8bits, 16 bit, ...). Assicurati che la scala di grigi sia selezionata.

4) Prendi una birra.

0

il modello e le matrici di proiezione non avranno alcun effetto su questo.

forse prova a impostare la posizione di disegno su 0,0 con glRasterPos o glWindowPos. a quanto pare c'è anche glPixelZoom.

Problemi correlati