繁体   English   中英

可视化深度缓冲区

[英]Visualize the depth buffer

我正在尝试将深度缓冲区可视化以进行调试,方法是在按下某个键时将其绘制在实际渲染的顶部。 它主要是工作,但结果图像似乎放大了。(它不仅仅是原始图像,在一个奇怪的灰度级)为什么它与颜色缓冲区的大小不同?

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

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

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

首先,确保投影/模型视图矩阵与渲染完全相同。 我看不出它会对它产生什么影响,但这是值得研究的。

其次, 规范指定glPixelStore,glPixelTransfer和glPixelMap可以影响结果,您可能希望确保正确设置它们。

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

该代码应该有效。 你有没有其他的东西叫glPixelZoom 值得重新设置以检查您是否实际上没有要求缩放。

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

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

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

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

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

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

4)喝啤酒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM