可视化深度缓冲区

Posted

技术标签:

【中文标题】可视化深度缓冲区【英文标题】:Visualize the depth buffer 【发布时间】:2010-04-30 16:24:40 【问题描述】:

我正在尝试以进行调试,方法是在按下键时将其绘制在实际渲染之上。它大部分工作正常,但生成的图像似乎被放大了。(不仅仅是原始图像,灰度奇怪)为什么它与颜色缓冲区的大小不同?

这就是我正在使用的视图深度缓冲区:

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;

【问题讨论】:

【参考方案1】:

我不确定这是否是您的实际错误,但我可以建议您检查一些事项。如果您真的提供了放大的屏幕截图,那就太好了。

首先,确保投影/模型视图矩阵与您的渲染完全相同。我看不出它会如何影响它,但值得研究一下。

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

如果你最终得到这个工作,请分享哪里出了问题 - 这似乎是一个有趣的问题。 :)

【讨论】:

【参考方案2】:

该代码应该可以工作。你有什么机会打电话给glPixelZoom吗?值得重置它以检查您实际上不是在要求缩放。

【讨论】:

【参考方案3】:

要检查的另一件事是您的光栅位置是否正确。请参见 glRasterPos。 发布的代码应该可以工作,但我可以看到其他地方的状态是如何搞砸的(你确实在可视化深度之前画了一些东西......) 也就是说,您可能处于未经过良好测试的 gl 驱动程序区域,因为它不寻常。 你接下来应该做什么: - 使用不同的供应商进行测试 (ati/nv..) - 将读取的数据写入文件以查看绘图或读取是否按预期工作

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

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

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

4) 喝杯啤酒。

【讨论】:

以上是关于可视化深度缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

视觉高级篇20 # 如何用WebGL绘制3D物体?

获取系统音频流缓冲区以进行可视化

[十九]深度学习Pytorch-可视化工具TensorBoard

深度学习模型的可视化技术总结

深度学习训练过程可视化(附github源码)

深度神经网络可视化工具集锦