2010-04-30 135 views
11

我试图通过在按下按键时在实际呈现的顶部绘制深度缓冲区来进行调试目的。它主要工作,但生成的图像似乎放大。(它不只是原始图像,在一个奇怪的灰度)为什么它不是颜色缓冲区大小相同?可视化深度缓冲区

这是我使用的是什么样的看法的深度缓冲

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

回答

0

该代码应该工作。你有没有机会有其他的东西叫glPixelZoom?值得重新设置,以检查你是否确实没有要求缩放。

1

我不知道这是否是你真正的错误,但有我可以建议你检查的几件事情。如果你实际提供的它究竟如何在放大截图这将是很好。

首先,确保投影/模型视图矩阵是完全一样的渲染。我看不出它会如何影响它,但这是需要研究的。

其次,spec指定glPixelStore,glPixelTransfer和glPixelMap可能会影响结果,因此您需要确保这些设置已正确设置。

如果最终得到这方面的工作,请您分享什么地方出错了 - 似乎一个有趣的问题。 :)

0

一件事是检查你的光栅位置是正确的。请参阅glRasterPos。 作为发布的代码应该工作,但我可以看到状态是如何搞砸了在其他地方(你做深入可视化之前画点什么...) 这么说,你很可能在没有好,因为它测试的GL驱动的区域是不寻常的。 你应该做的未来: - 测试与不同的供应商(ATI/NV ..) - 写读取数据到一个文件,看看图纸或阅读预期

-4

1不工作)转储原始将深度缓冲区数据转换为文件。

2)使用IrfanView其打开(开启为 - > RAW文件)

3)调整参数(宽度,高度),并根据自己的深度缓冲器BPP的像素格式(8位,16位,... )。确保检查灰度。

4)拿一杯啤酒。

0

模型和投影矩阵对此没有影响。

也许尝试抽签位置glRasterPos或glWindowPos设置为0,0。显然还有glPixelZoom。