通过
glReadPixels(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT,GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, tmpPixelsBuffer);
从帧缓冲区中读取深度信息,深度值竟然是负值。
设置
glDepthRange(0,1);
也不起作用。
原因分析:
(1)不使用glDepthRange(0,1);时深度为负值的原因:这是因为规范化的深度范围为-1.0~+1.0,近处的为-1.0(背景的深度值不受此影响,只针对进行渲染管线的内容),远处的为+1.0。使用glReadPixels获取的深度类型是GL_UNSIGNED_BYTE类型的,就会将-1.0映射到0,+1.0映射到255。这样的话在用int类型从tmpPixelsBuffer中读取值的话远处的深度255就会变为-1,254变为-2...。如果用uchar类型从tmpPixelsBuffer中读取值就会都是正值255,254...。
(2)使用glDepthRange(0,1);时深度为负值的原因:其实做这个并没有太大影响,只不过将规范化的深度范围为-1.0~+1.0映射到了0~1(背景的深度值不受此影响,只针对进行渲染管线的内容),使用glReadPixels获取的深度类型是GL_UNSIGNED_BYTE类型的,就会将0映射到0,+1.0映射到255。这样的话