【问题标题】:How to remove "Fish Eye" effect on SceneKit camera?如何去除 SceneKit 相机上的“鱼眼”效果?
【发布时间】:2016-05-10 12:33:13
【问题描述】:

我正在使用 SceneKit。我创建了自己的相机并将其分配给场景,并调整了它的 xFov 和 yFov。当我设置一个高于 50 的值时,开始出现一些失真。屏幕边缘附近的一切都被拉伸了——就像相机突然变成了“鱼眼”一样。

我需要 xFov 和 yFov 高于 50(我实际上需要它是 100),但我不能有那种失真。我该怎么办?

【问题讨论】:

  • 您如何提出适合窄视口的宽视场而不失真?
  • @rickster 你是说理论上不可能吗?
  • 使用正交投影显然会消除这种失真,但我不确定这是否是您真正想要的。

标签: ios swift scenekit distortion fieldofview


【解决方案1】:

您所问的问题本身在理论上并不是不可能的,但至少在理论上很有趣。

当您扩大视野时,物理相机会发生什么变化?它越宽,看起来就越“鱼眼”。像 SceneKit 这样的 3D 图形管道的投影矩阵和透视分割以类似的方式工作。它看起来有点不同,因为它是直线变换而不是球面透镜的效果,但它是相同的一般概念——它将相机“看到”的 3D 空间的体积(称为平截头体)映射到观察平面上。这是 3D 图形的一般方面,不是 SceneKit 特有的,所以你可以找到很多 good tutorials 很好地覆盖了 underlying math

平截头体投影固定了某物占据的视角量与其在观察平面上的宽度之间的某种关系。您不能真正改变这种关系,并且仍然具有 3D 硬件可以通过单个矩阵乘法(和透视除法)应用的线性(嗯,合理的,但主要是线性的)变换。

理论上,您可以定义一种不同的关系——例如,较大的角尺寸对应于视图中心附近的观察平面的较大部分,但对应于远离中心的较小部分.但是你不能在相机变换中这样做......你必须在some kind of post-processing shader 中逐个像素地进行这样的计算。 (事实上​​,rendering for the lenses of a VR headset 的工作原理大致如此。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2016-01-06
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多