【问题标题】:Mapping Onscreen Points to 3D Real Location将屏幕上的点映射到 3D 真实位置
【发布时间】:2012-03-31 19:07:03
【问题描述】:

我正在尝试做的具体名称是“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);

但是我没有成功(数学上不可能)。

任何帮助将不胜感激!

谢谢!

【问题讨论】:

  • 这在一般情况下是不可能的(投影是不可逆的)。但在简单的情况下,您可以使用光线追踪来确定哪些对象投射到给定像素上。或者您可以在生成 2D 图像时预先生成信息。
  • 所以你是说使用光线追踪我可以,给定: - 相机坐标 - 屏幕平面的方程 - 3D 世界地图中某个平面 (xz) 平面的方程从屏幕指向3D世界中的飞机?当我将鼠标悬停在 xz 平面上时,我只是想让它们亮起来。
  • 我找到了我的问题的答案:stackoverflow.com/questions/9971701/…

标签: 3d mapping 2d projection perspective


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2012-05-07
    • 1970-01-01
    相关资源
    最近更新 更多