按功能读取的深度数据的含义是什么:glReadPixels的过剩?

时间:2012-10-06 08:56:34

标签: opengl glut

我使用过剩来显示我的3D场景

glReadPixels(300,//xPos
             300,//yPos
             1,1,//size
             GL_DEPTH_COMPONENT,//type is depth
             GL_FLOAT,//return type is  float
             &point);

我想用这个函数来获取像素的深度。 但返回的数据始终在[0,1]范围内,例如0.999872, 0.999921..... 如何将其转换为真实深度(从对象到相机)

2 个答案:

答案 0 :(得分:0)

glReadPixels手册:

                    Depth values are read from the depth buffer.
                    Each component is converted to floating point such that the minimum depth
                    value maps to 0 and the maximum value maps to 1.
                    Each component is then multiplied by GL_DEPTH_SCALE,
                    added to GL_DEPTH_BIAS,
                    and finally clamped to the range [0, 1]

答案 1 :(得分:0)

  

我想用这个函数来获取像素的深度。但返回的数据总是在[0,1]范围内,例如0.999872,0.999921 .....

值在glDepthRange设置的范围内。默认值为[0,1]。

  

如何将其转换为真实深度(从对象到相机)

将屏幕空间坐标(你拥有的)投射回世界空间。您可以使用gluUnProject。它接受的model矩阵取决于您想要的空间。 OpenGL没有摄像头所以这一切都取决于您定义的查看矩阵。您没有显示您的绘图代码,因此我无法告诉您在哪个位置采用模型视图矩阵的副本来保存您需要的视图矩阵。