ScreenPointToRay,函数背后是什么?

ScreenPointToRay, What's behind the function?

我想知道背后的代码是什么Camera:ScreenPointToRay可能是Unity还是ROBLOX。

我的情况是我在WorldSpace中有一个位置和camera的ViewportSize, 我想要一个执行 ScreenPointToRay 的函数, 我假设您只需要这两个参数来创建此函数,但我不知道如何创建。

有人可以用勺子喂我吗?

Roblox API has a section on the function you're looking for: ScreenPointToRay.

Unity Scripting Reference also has a section their own ScreenPointToRay 函数。

有多种方法可以进行此计算。此版本仅适用于透视相机,但可以修改为适用于正交相机。不幸的是我无法分享代码,但我会尽力解释。

  1. 在您的相机中,您需要通过反转 Camera.projectionMatrix 乘以 Camera.worldToCameraMatrix 的结果来生成 Matrix4x4。
  2. 您需要将屏幕 space 像素转换为裁剪平面坐标。在裁剪平面-1,-1相当于0,0,1,1相当于Camera.pixelWidth,Camera.pixelHeight.
  3. 接下来您将使用Matrix4x4.MultiplyPoint函数来乘以您的剪辑点。
  4. 光线的方向是第 3 步减去相机位置的结果。
  5. 使用第 4 步中的方向构造射线,并将相机的位置用作射线原点。

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

您可以检查this article,它通过使用 Unity 相机上可用的矩阵为计算着色器中的所有像素创建光线