比较屏幕和 OpenGL 的真实世界坐标以获得成功
基本上我们拥有的是 OpenGL 对象的模型视图矩阵,它为我们提供旋转和平移向量,使用这些向量我们通过一些计算得到真实位置:
-R*t,其中 R 是 [0 4 8; 1 5 9; 2 6 10] 矩阵,t 是 [12 13 14] 列向量。
在 OpenCV 中,我们有指尖的屏幕坐标 x,y
。
现在我们需要一些方法来将屏幕的 x,y 与 OpenGL 的真实世界坐标进行比较,以查看手指击中了哪个对象。我们已尝试 gluUnProject
但它没有从 x,y 返回正确的现实世界坐标。
这里尝试什么方法,这是一起使用ARToolKit和OpenCV,因此模型视图矩阵根据AR的标记而变化。我们还使用 ARToolkit 相机模块。
What basically we have is modelview matrix of an OpenGL object,which gives us Rotation and Translation vectors,using these we get the real position with some calculations:
-R*t, where R is [0 4 8; 1 5 9; 2 6 10] matrix and t is [12 13 14] column vector.
In OpenCV we have screen coordinates x,y
of the fingertip.
Now we need some method to compare this x,y
of screen with OpenGL's real world coordinates to see which object did finger hit. We have tried gluUnProject
but it did not return correct real world coordinates from the x,y.
What is the method to try here,this is using ARToolKit and OpenCV together,so modelview matrices change based on markers of AR. Also we are using ARToolkit camera module.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧,让我想想:您已经获得了 3 个线性独立方程组的两个已知值。所以你确实丢失了一些信息。你有一个自由参数 z,如果你仔细想想,这给你的不是空间中的位置,而是进入其中的光线(从相机到某个方向到无穷远)。您可以对 z=0 和 z=1 进行 gluUnProject,这会在射线上给出两个点。然后您可以使用该光线来测试它是否穿过您的某些对象。
或者您也可以采用其他方式:将每个对象的边界体积投影到屏幕空间 (x,y) 并测试您的手指坐标与其接触。我会做后者。
Well, let me see: You've got two knowns for a system of 3 linear independent equations. So you're literally missing some information. You have a free parameter z, and if you think about it, what this gives you is not a position in space, but a ray into it (from the camera into some direction to infinity). You can gluUnProject for z=0 and z=1, which gives you two points on the ray. Then you can use that ray to test if it crosses some of your objects.
Or you do it other way round: You project each object's bounding volume to screen space (x,y) and test of your finger coordinates get in touch with it. I'd do the later.