将屏幕点映射到3D真实位置

时间:2012-03-31 19:07:03

标签: 3d mapping 2d projection perspective

我要做的具体名称是“unproject”=将屏幕点映射到3D世界。

所以我发现这个网站有简单的方程式,用于将3D坐标映射到2D屏幕:

http://www.petesqbsite.com/sections/tutorials/tuts/perspective.html

我已广泛使用这些方程式,但现在我想通过将鼠标悬停在屏幕上来与3D世界进行交互。

我没有将2D坐标链接到3D对象,而是想找到一个将屏幕上的点映射到真实的方程。我尝试逆向工程以下2个方程式来试图找到答案:

screenPoint.x = (int) ((eye.z * (realPoint.x-eye.x)) / (eye.z + realPoint.z) + eye.x);
screenPoint.y = 480 - (int) ((eye.z * (realPoint.y-eye.y)) / (eye.z + realPoint.z) + eye.y);

然而,我没有成功(在数学上不可能)。

非常感谢任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:0)

我曾经遇到过类似的问题。我做的是我发现了在opengl中使用的视野,并计算出Z距离,其中屏幕上的1个像素= opengl中的1个单位。现在每当我指向屏幕上的任何地方时,我在屏幕上显示鼠标的X和Y坐标,并且我先前根据FOV计算了Z坐标。我现在有一个明确的三维坐标。然后,我从摄像机“画出”了一条想象线到那一点,看看它击中了什么。我知道这不是一个简单的答案,但你所要求的是不可能的。这是一种用一些技巧来做到这一点的方法