【问题标题】:ScreenPointToRay, What's behind the function?ScreenPointToRay,该功能的背后是什么?
【发布时间】:2018-12-24 19:35:21
【问题描述】:

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

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

有人可以用勺子喂我吗?

【问题讨论】:

    标签: c# unity3d lua roblox


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        Roblox API 有一个关于您要查找的函数的部分:ScreenPointToRay

        Unity Scripting Reference 也有一个部分自己的ScreenPointToRay 功能。

        【讨论】:

          猜你喜欢
          • 2019-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-23
          • 2011-03-09
          • 2021-11-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多