ScreenPointToRay,该功能的背后是啥?

Posted

技术标签:

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

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

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

有人可以用勺子喂我吗?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于ScreenPointToRay,该功能的背后是啥?的主要内容,如果未能解决你的问题,请参考以下文章

catboost算法中对称树背后的直觉是啥?

2010年德国银行卡问题背后的技术原因是啥?

csharp ScreenPointToRayテスト

主动降噪背后的理论是啥?

色轮背后的数学是啥

设计的背后