可视化深度缓冲

12
我试图通过在按键时将深度缓冲区绘制在实际渲染的顶部来可视化深度缓冲区,以进行调试。这在大多数情况下都起作用了,但是生成的图像似乎被放大了。(不仅是原始图像,而且呈现出怪异的灰度)为什么它的大小与颜色缓冲区不同?
这是我用于查看深度缓冲区的内容:
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;
}
5个回答

1

我不确定这是否是您实际遇到的错误,但有一些建议可以提供给您检查。如果您能提供一个截图,展示它具体是如何缩放的,那就更好了。

首先,请确保投影/模型视图矩阵与您的渲染完全相同。我无法看出它会如何影响它,但这是需要考虑的事情。

其次,spec 指定 glPixelStore、glPixelTransfer 和 glPixelMap 可以影响结果,您需要确保这些设置正确。

如果您最终成功解决了问题,请分享一下出了什么问题 - 这似乎是一个有趣的问题。 :)


0

那段代码应该可以工作。你有没有可能调用了其他的东西glPixelZoom?最好重置一下它,以确保你实际上没有要求缩放。


0

还有一件要检查的事情是您的光栅位置是否正确。请参见glRasterPos。 按照发布的代码应该可以工作,但我可以看到状态在其他地方出现了问题(在可视化深度之前绘制了某些内容...) 话虽如此,您可能处于未经充分测试的gl驱动程序区域,因为它很不寻常。 接下来您应该做什么: - 使用不同的供应商进行测试(ati / nv..) - 将读取的数据写入文件以查看绘图或读取是否按预期工作


0

这与模型和投影矩阵无关。

也许尝试使用glRasterPos或glWindowPos将绘制位置设置为0,0。 显然还有glPixelZoom可用。


-4

1) 将原始深度缓冲区数据转储到文件中。

2) 使用IrfanView打开它(打开方式 -> 原始文件)

3) 根据您的深度缓冲区BPP(8位,16位等)调整参数(宽度,高度)和像素格式。确保灰度已选中。

4) 喝一杯啤酒。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接