Opengl 为增强现实应用程序找出Kinect在3D空间中的位置

Opengl 为增强现实应用程序找出Kinect在3D空间中的位置,opengl,camera,kinect,algebra,Opengl,Camera,Kinect,Algebra,我们正在用kinect做一个增强现实应用程序 这有一些挑战: 我们将有一堆物体停在飞机上。幸运的是,Kinect可以给我们平面的法向量。我们需要知道在哪里设置OpenGL摄像头(理想情况下,这将是Kinect所在的位置)。为此,我们需要知道Kinect在3D空间中的位置,因为这两个位置应该重合 如果你需要更多的澄清,请告诉我。我意识到我的解释可能没有必要那么清楚。假设Kinect位于原点。您还知道点(平面上)与Kinect的距离–这就是Kinect给出的该点的距离。你也知道正常情况。所以你所要

我们正在用kinect做一个增强现实应用程序

这有一些挑战:

我们将有一堆物体停在飞机上。幸运的是,Kinect可以给我们平面的法向量。我们需要知道在哪里设置OpenGL摄像头(理想情况下,这将是Kinect所在的位置)。为此,我们需要知道Kinect在3D空间中的位置,因为这两个位置应该重合


如果你需要更多的澄清,请告诉我。我意识到我的解释可能没有必要那么清楚。

假设Kinect位于原点。您还知道点(平面上)与Kinect的距离–这就是Kinect给出的该点的距离。你也知道正常情况。所以你所要做的就是找到平面方程,把它转换成矩阵,然后求逆

给定点和法向量的平面方程为

n·(r-r_0) = 0 ; r_0 = 0
n·r = 0
我们知道r是

r = (0, 0, -distance_at(kinect_depth_image_width/2, kinect_depth_image_height/2))
现在请记住,平面可以表示为

p(s,t) = r + u * s + v * t
其中u,v是平面的基向量。所以我们可以把它改写成矩阵

u_x v_x n_x r_x
u_y v_y n_y r_y
u_z v_z n_z r_z
  0   0   0   1
可以通过选择任意的“向上”和“右”向量来确定u和v,我建议您使用Y=(0,1,0)和X=(1,0,0),并对已知的法线n执行Ortogonalization,得到u和v


通过反转该矩阵,可以将平面上的零点转换为kinect。

假设kinect位于原点。您还知道点(平面上)与Kinect的距离–这就是Kinect给出的该点的距离。你也知道正常情况。所以你所要做的就是找到平面方程,把它转换成矩阵,然后求逆

给定点和法向量的平面方程为

n·(r-r_0) = 0 ; r_0 = 0
n·r = 0
我们知道r是

r = (0, 0, -distance_at(kinect_depth_image_width/2, kinect_depth_image_height/2))
现在请记住,平面可以表示为

p(s,t) = r + u * s + v * t
其中u,v是平面的基向量。所以我们可以把它改写成矩阵

u_x v_x n_x r_x
u_y v_y n_y r_y
u_z v_z n_z r_z
  0   0   0   1
可以通过选择任意的“向上”和“右”向量来确定u和v,我建议您使用Y=(0,1,0)和X=(1,0,0),并对已知的法线n执行Ortogonalization,得到u和v

通过反转该矩阵,可以得到从平面上的零点到kinect的变换