2

背景:

此问题与对象的 3D 跟踪有关。

我的系统将已知参数(X、Y、Z)的对象/样本投影到 OpenGL,并尝试与从 Kinect 传感器获得的图像和深度信息相匹配,以推断对象的 3D 位置。

问题:

Kinect 深度-> 进程-> 以毫米为单位的值

OpenGL->depth buffer-> 0-1之间的值(在near和far之间非线性映射)

虽然我可以使用http://www.songho.ca/opengl/gl_projectionmatrix.html中提到的方法从 OpenGL 中恢复 Z 值,但这会产生非常缓慢的性能。

我确信这是常见的问题,所以我希望一定有一些解决方案存在。

问题:

从OpenGL恢复眼睛Z坐标的有效方法?

或者有没有其他方法可以解决上述问题?

4

1 回答 1

2

现在我的问题是 Kinect 深度以毫米为单位

不它不是。Kinect 将其深度报告为任意单位的 11 位范围内的值。只有在应用了一些校准之后,深度值才能被解释为一个物理单位。到目前为止,您是对的,OpenGL 透视投影深度值是非线性的。

因此,如果我理解正确,您想通过检索深度缓冲区的内容来模拟 Kinect,对吧?然后最简单的解决方案是使用顶点和片段着色器的组合,其中顶点着色器将线性深度作为附加变量传递给片段着色器,然后片段着色器用传递的值覆盖片段的深度值。(您也可以为此使用额外的渲染目标)。

另一种方法是使用一维纹理,投影到场景的深度范围内,其中纹理值对深度值进行编码。然后所需的值将在颜色缓冲区中。

于 2011-11-25T17:57:45.817 回答