ScreenPointToRay,该函数的背后是什么?

时间:2018-07-17 07:31:06

标签: c# unity3d lua roblox

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

我的情况是我在WorldSpace和摄像机的ViewportSize中有位置, 我想要一个执行ScreenPointToRay的功能, 我假设您只需要使用这两个参数即可创建此函数,但是我不知道该怎么做。

有人可以为此喂我吗?

3 个答案:

答案 0 :(得分:1)

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

  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函数。

答案 1 :(得分:0)

Roblox API中有您要查找的功能部分:ScreenPointToRay

Unity Scripting Reference也有一个属于自己的ScreenPointToRay函数。

希望对您有帮助!

答案 2 :(得分:0)

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