我们基本上拥有的是OpenGL对象的modelview矩阵,它为我们提供了旋转和平移向量,使用这些向量,我们通过一些计算得到了真实的位置:
-R*t, where R is [0 4 8; 1 5 9; 2 6 10] matrix and t is [12 13 14] column vector.
在OpenCV中,我们有指尖的屏幕坐标x,y
。
现在我们需要一些方法来将此x,y
屏幕与OpenGL的真实世界坐标进行比较,以查看手指击中了哪个对象。我们尝试了gluUnProject
,但它没有从x,y返回正确的真实世界坐标。
这里尝试的方法是什么,这是一起使用ARToolKit和OpenCV,因此modelview矩阵基于AR的标记而改变。我们也在使用ARToolkit相机模块。
答案 0 :(得分:2)
好吧,让我看看:你已经知道了3个线性独立方程的系统。所以你真的错过了一些信息。你有一个自由参数z,如果你想一想,它给你的不是空间中的位置,而是射入它的光线(从相机到某个方向到无限远)。您可以在z = 0和z = 1的情况下使用gluUnProject,它会在光线上给出两个点。然后,您可以使用该光线来测试它是否穿过您的某些物体。
或者你以其他方式做到:将每个对象的边界体积投影到屏幕空间(x,y),并测试手指坐标与它的联系。我会做的。