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