Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
3d 将屏幕上的点映射到三维真实位置_3d_Mapping_2d_Projection_Perspective - Fatal编程技术网

3d 将屏幕上的点映射到三维真实位置

3d 将屏幕上的点映射到三维真实位置,3d,mapping,2d,projection,perspective,3d,Mapping,2d,Projection,Perspective,我尝试做的具体名称是“unproject”=将屏幕点映射到3D世界 所以我找到了这个网站,它有简单的方程式,可以将3D坐标映射到2D屏幕: 我已经广泛地使用了这些方程,但现在我希望能够通过悬停在屏幕上与3D世界交互 我不想让2D坐标链接到3D对象,而是想找到一个方程式,将屏幕上的点映射到真实点。我尝试对以下两个方程式进行反向工程,试图找到答案: screenPoint.x = (int) ((eye.z * (realPoint.x-eye.x)) / (eye.z + realPoint.z

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

所以我找到了这个网站,它有简单的方程式,可以将3D坐标映射到2D屏幕:

我已经广泛地使用了这些方程,但现在我希望能够通过悬停在屏幕上与3D世界交互

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

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);
但是我没有成功(在数学上不可能)

任何帮助都将不胜感激


谢谢

我曾经有过类似的问题。我所做的是找出opengl中使用的视野,并计算出屏幕上1个像素=opengl中1个单位的Z距离。现在,每当我指向屏幕上的任何地方,我就有屏幕上鼠标的X和Y坐标,以及我之前根据FOV计算的Z坐标。我现在有一个明确的三维坐标。然后我“画”了一条从相机到那个点的假想线,看看它击中了什么。我知道这不是一个直截了当的答案,但你所问的是不可能的。这里有一种方法可以通过一些技巧来实现这一点

这在一般情况下是不可能的(投影是不可逆的)。但在简单的情况下,可以使用光线跟踪来确定哪些对象投影到给定的像素上。或者你可以在生成2D图像时预先生成信息。那么你是说通过光线跟踪我可以,给定:-摄像机坐标-屏幕平面方程-3D世界地图中某个平面(xz)的方程从屏幕指向3D世界中的平面?我只是想让xz平面上的点在我悬停在它们上方时亮起来。我找到了我问题的答案: