我们正在使用 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,产生 u 和 v。
通过反转该矩阵,您可以将平面上的零点转换为 kinect。