【发布时间】:2020-12-06 23:25:58
【问题描述】:
我试图在 Three.js 中复制一个真实世界的相机,我将相机的失真指定为“铅锤”模型的参数。特别是我有P,K,R和D指定here:
如果我对所有内容都理解正确,我想设置 3 来进行从右侧的“X”到左上角的“输入图像”的翻译。我正在考虑的一种方法是制作我自己的 Three.js Camera,将projectionMatrix 设置为...涉及K 和D 的东西。这有意义吗?考虑到 K 和 D 被指定为一维数组,长度分别为 9 和 5,我究竟会将它设置为什么。我有点迷失如何组合所有数字:(
我在this answer 中注意到,将直线渲染为弯曲需要一些复杂的事情,它们会在某些相机失真下(如鱼眼镜头)。如果这更复杂,我不需要它来达到我的目的。简单地渲染每个顶点就是正确的点就足够了。
【问题讨论】:
-
什么是铅锤?
-
在这种情况下,它是“失真模型”的名称。这里有一些解释:calib.io/blogs/knowledge-base/camera-models
-
是的,创建自己的 Camera 类很有意义,而且工作量也不大。您可以考虑的另一件事是使用仅执行径向失真部分的后处理效果来处理您正在谈论的失真,因为它似乎只需要图像坐标(而不是需要 xyz 坐标)
-
@MicheleLambertucci 谢谢。我不熟悉后期处理效果,但我在寻找选项时确实注意到了它们。我开始认为我可能需要编写一些webgl代码来实现径向失真,我认为这意味着它会在这样的后处理效果吗?你知道这是否属实,还是可以用投影矩阵表示?还是有其他选择?
-
后处理效果是应用于渲染图像的附加着色器通道。这在这种情况下特别有用,因为您想要实现的失真在“渲染空间”中起作用(它不需要任何有关深度的信息)。是的,我认为您可以使用简单的 GLSL 着色器在渲染图像上应用径向失真
标签: three.js