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,该功能的背后是啥?的主要内容,如果未能解决你的问题,请参考以下文章