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 函数。
有多种方法可以进行此计算。此版本仅适用于透视相机,但可以修改为适用于正交相机。不幸的是我无法分享代码,但我会尽力解释。
- 在您的相机中,您需要通过反转 Camera.projectionMatrix 乘以 Camera.worldToCameraMatrix 的结果来生成 Matrix4x4。
- 您需要将屏幕 space 像素转换为裁剪平面坐标。在裁剪平面-1,-1相当于0,0,1,1相当于Camera.pixelWidth,Camera.pixelHeight.
- 接下来您将使用Matrix4x4.MultiplyPoint函数来乘以您的剪辑点。
- 光线的方向是第 3 步减去相机位置的结果。
- 使用第 4 步中的方向构造射线,并将相机的位置用作射线原点。
如果您尝试在 Unity API 之外执行此操作,则还需要创建 Matrix4x4.MultiplyPoint 函数。
您可以检查this article,它通过使用 Unity 相机上可用的矩阵为计算着色器中的所有像素创建光线
我想知道背后的代码是什么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 函数。
有多种方法可以进行此计算。此版本仅适用于透视相机,但可以修改为适用于正交相机。不幸的是我无法分享代码,但我会尽力解释。
- 在您的相机中,您需要通过反转 Camera.projectionMatrix 乘以 Camera.worldToCameraMatrix 的结果来生成 Matrix4x4。
- 您需要将屏幕 space 像素转换为裁剪平面坐标。在裁剪平面-1,-1相当于0,0,1,1相当于Camera.pixelWidth,Camera.pixelHeight.
- 接下来您将使用Matrix4x4.MultiplyPoint函数来乘以您的剪辑点。
- 光线的方向是第 3 步减去相机位置的结果。
- 使用第 4 步中的方向构造射线,并将相机的位置用作射线原点。
如果您尝试在 Unity API 之外执行此操作,则还需要创建 Matrix4x4.MultiplyPoint 函数。
您可以检查this article,它通过使用 Unity 相机上可用的矩阵为计算着色器中的所有像素创建光线