1

我使用 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..... How can I convert it to real depth (from an object to camera)

4

2 回答 2

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]
于 2012-10-06T09:06:54.530 回答
0

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

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

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

通过将屏幕空间坐标(您拥有的)投影回世界空间。您可以为此使用gluUnProject。它接受的model矩阵取决于您想要 ptoject 的空间。OpenGL 没有摄像头,因此这完全取决于您定义的查看矩阵。你没有显示你的绘图代码,所以我不能告诉你在什么时候复制模型视图矩阵来保存你需要的视图矩阵。

于 2012-10-06T09:55:45.887 回答