2010-04-30 20 views
11

Estoy intentando visualizar el búfer de profundidad para depurarlo, dibujándolo sobre la representación real cuando se presiona una tecla. Funciona principalmente, pero la imagen resultante parece estar ampliada (no es solo la imagen original, en una escala de grises impar) ¿Por qué no tiene el mismo tamaño que el búfer de color?Visualizar el búfer de profundidad

Esto es lo que estoy utilizando la vista del buffer de profundidad:

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; 
} 

Respuesta

0

Ese código se debe trabajar. ¿Por casualidad tiene algo más, llame al glPixelZoom? Vale la pena restablecerlo para comprobar que en realidad no estás pidiendo un zoom.

1

No estoy seguro de si este es su error real, pero hay algunas cosas que le recomiendo que revise. Sería bueno si realmente proporcionó una captura de pantalla de cómo se amplió exactamente.

En primer lugar, asegúrese de que las matrices de proyección/modelo son exactamente las mismas que su representación. No puedo ver cómo lo afectaría, pero sería algo para investigar.

En segundo lugar, el spec especifica que glPixelStore, glPixelTransfer, y glPixelMap pueden afectar los resultados, asegúrese de que estos se establezcan correctamente.

Si terminas haciendo que esto funcione, por favor comparte lo que salió mal - parece una pregunta interesante. :)

0

Una cosa más para comprobar es que su posición de trama es correcta. ver glRasterPos. el código tal como se publicó debería funcionar, pero puedo ver cómo el estado se estropea en otro lugar (si dibujas algo antes de visualizar la profundidad ...) dicho eso, probablemente estés en un área de controladores gl que no se ha probado bien porque es inusual lo que debe hacer a continuación: - prueba con un proveedor diferente (ATI/nv ..) - escribir los datos de lectura a un archivo para ver si el dibujo o la lectura no está funcionando como se esperaba

-4

1) Volcado de la prima datos de la memoria intermedia de profundidad en un archivo.

2) abrirlo con IrfanView (Abrir como -> archivo RAW)

3) Ajuste los parámetros (ancho, alto) y el formato de píxel de acuerdo a su buffer de profundidad BPP (8 bits, 16 bits, ...) Asegúrese de que la escala de grises esté marcada.

4) Consigue una cerveza.

0

el modelo y las matrices de proyección no tendrán ningún efecto sobre esto.

quizás intente establecer la posición de extracción en 0,0 con glRasterPos o glWindowPos. aparentemente también hay glPixelZoom.

Cuestiones relacionadas