【问题标题】:How can I convert 3D space coordinates to 2D space coordinates?如何将 3D 空间坐标转换为 2D 空间坐标?
【发布时间】:2011-09-02 15:00:08
【问题描述】:

我正在使用 Lua API。我正在尝试将 3D 空间坐标转换为 2D 空间坐标。我问过谷歌,但除了使用 OpenGL 函数的 sn-ps 之外我找不到任何东西。我不需要源代码或任何简单的方法就可以做到这一点?如果有帮助,我可以获取相机的视角、要转换的原始位置、窗口大小和纵横比?提前感谢您的任何建议:)

【问题讨论】:

  • 到2D坐标在哪个空间?
  • 抱歉,我的意思是输入屏幕坐标。

标签: vector 3d 2d transform space


【解决方案1】:

如果您正在谈论将世界空间 (x,y,z) 坐标转换为屏幕空间 (u,v) 坐标,那么基本方法是:

u = x / z;
v = y / z;

如果相机不在原点,则在投影矩阵之前通过视图矩阵变换 (x,y,z)。您可能还想调整相机视角、纵横比等,在这种情况下,我会参考this Wikipedia article。

如果您正在寻找我不熟悉的特定于 Lua API 的内容,我深表歉意。

【讨论】:

  • 需要注意的是,这不是真正的透视投影,而是所谓的“弱透视投影”,是正交投影和透视的混合体
  • 这对我来说毫无意义。随着 z 接近 0,x 和 y 接近无穷大。因此,给定适当的相机设置,世界空间中的向量 (1,1,0) 应该是屏幕空间中的 (1,1),最终将是(无穷大,无穷大)。
  • @DavidCoombes 为什么没有意义?如果相机在原点,朝 z 方向看,它永远无法看到上面的东西,或者在相机的右侧,所以 x 和 y 应该无穷大。当我想想象它时,我总是使用这个例子:youtube.com/watch?v=_P00jYB81ZQ 当标志离你更近(并且 z 更接近零)时,x 和 y 变大,并且标志飞出屏幕。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2015-01-01
  • 2015-06-29
相关资源
最近更新 更多