背景
此问题与对象的3D跟踪有关。
我的系统将对象/样本从已知参数(X,Y,Z)投影到OpenGL和 尝试匹配从Kinect传感器获得的图像和深度信息,以推断物体的3D位置。
问题:
Kinect depth-> process->以毫米为单位的值
OpenGL->深度缓冲区 - > 0-1之间的值(在近和远之间非线性映射)
虽然我可以使用http://www.songho.ca/opengl/gl_projectionmatrix.html中提到的方法从OpenGL中恢复Z值,但这会产生非常慢的性能。
我确信这是常见问题,所以我希望必须有一些切割器解决方案。
问题:
从OpenGL中恢复眼睛Z坐标的有效方法?
或者还有其他方法可以解决上述问题吗?
答案 0 :(得分:2)
现在我的问题是Kinect深度是mm
不,不是。 Kinect将其深度报告为11位任意单位范围内的值。只有在应用了一些校准后,深度值才能被解释为物理单位。你是正确的,OpenGL透视投影深度值是非线性的。
因此,如果我理解正确,你想通过检索深度缓冲区的内容来模拟Kinect,对吧?然后最简单的解决方案是使用顶点和片段着色器的组合,其中顶点着色器将线性深度作为片段着色器的附加变化传递,然后片段着色器使用传递的值覆盖片段的深度值。 (你也可以使用额外的渲染目标)。
另一种方法是使用一维纹理,投影到场景的深度范围,其中纹理值编码深度值。然后所需的值将在颜色缓冲区中。