Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可视化深度缓冲区_C++_Opengl - Fatal编程技术网

C++ 可视化深度缓冲区

C++ 可视化深度缓冲区,c++,opengl,C++,Opengl,我试图可视化深度缓冲区,以便进行调试,方法是在按下一个键时在实际渲染的顶部绘制深度缓冲区。它大部分工作正常,但生成的图像似乎被放大了。(这不仅仅是原始图像,在奇数灰度中)为什么它的大小与颜色缓冲区的大小不同 这就是我正在使用的视图深度缓冲区: void get_gl_size(int &width, int &height) { int iv[4]; glGetIntegerv(GL_VIEWPORT, iv); width = iv[2]; he

我试图可视化深度缓冲区,以便进行调试,方法是在按下一个键时在实际渲染的顶部绘制深度缓冲区。它大部分工作正常,但生成的图像似乎被放大了。(这不仅仅是原始图像,在奇数灰度中)为什么它的大小与颜色缓冲区的大小不同

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

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可以影响结果,您需要确保这些设置正确


如果你最终成功了,请分享出哪里出了问题——这似乎是一个有趣的问题。:)

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

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

2) 使用(打开为->原始文件)打开它

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


4) 喝杯啤酒。

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

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