ScreenPointToRay函数背后的代码是什么?

我想知道Camera:ScreenPointToRay背后的代码,无论是Unity还是ROBLOX。

我的情况是我有一个在世界空间中的位置和相机的ViewportSize, 我想要一个执行ScreenPointToRay函数的函数, 我假设你只需要这两个参数来创建这个函数,但我不知道如何。

有人可以给我解释一下吗?

点赞
用户10018042
用户10018042

Roblox API有一个关于你正在寻找的函数的部分:ScreenPointToRay

Unity Scripting Reference也有一个关于ScreenPointToRay函数的部分。

2018-07-17 21:33:56
用户11772062
用户11772062

以下是几种可以进行这种计算的方法。这个版本只适用于透视相机,但可以改为适用于正交相机。不幸的是,我无法共享代码,但我会尽力做出解释。

  1. 从相机中,您需要通过将 Camera.projectionMatrix 乘以 Camera.worldToCameraMatrix 的结果取倒数来生成 Matrix4x4
  2. 您需要将屏幕空间像素转换为裁剪平面坐标。在裁剪平面上,(-1,-1) 等于 (0,0),而 (1,1) 等于 (Camera.pixelWidth, Camera.pixelHeight)。
  3. 接下来,您将使用 Matrix4x4.MultiplyPoint 函数来乘以您的裁剪点。
  4. 您的射线方向是步骤 3 的结果减去相机位置。
  5. 使用步骤 4 中的方向构建射线,并将相机位置用作射线起点。

如果您正在尝试在 Unity API 外进行此操作,则需要创建 Matrix4x4.MultiplyPoint 函数。

2020-08-15 00:21:25
用户10706842
用户10706842

你可以查看这篇文章,它介绍了如何在Unity相机中使用可用矩阵创建计算着色器中所有像素的光线。

2021-02-11 21:17:44