1

基本上我们拥有的是 OpenGL 对象的模型视图矩阵,它为我们提供了旋转和平移向量,使用这些我们通过一些计算得到真实位置:

-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,因此模型视图矩阵会根据 AR 的标记而变化。我们也在使用 ARToolkit 相机模块。

4

1 回答 1

2

好吧,让我看看:对于一个由 3 个线性独立方程组成的系统,您有两个已知值。所以你真的错过了一些信息。你有一个自由参数 z,如果你仔细想想,它给你的不是空间中的位置,而是进入它的光线(从相机到某个方向到无限远)。您可以为 z=0 和 z=1 使用 gluUnProject,这会在射线上为您提供两个点。然后,您可以使用该射线来测试它是否穿过您的某些对象。

或者你反过来做:你将每个对象的边界体积投影到屏幕空间 (x,y) 并测试你的手指坐标与它取得联系。我会做后者。

于 2011-11-12T19:07:02.200 回答