“视野”和“镜头长度”之间的关系是什么

时间:2010-12-13 10:01:20

标签: opengl graphics directx

想知道它们是否相互关联

3 个答案:

答案 0 :(得分:8)

我意识到这个问题已经问了很长时间(至少可以说),但我有一个很好的图表,因为我觉得它在这里很有用,所以发布它似乎很遗憾。如图所示,视野(theta)与图像平面距离(d)之间的关系为:

tan(theta/2) = ymax/d

FOV and distance to image plane

答案 1 :(得分:3)

“镜头长度”没有意义。 OpenGL和DirectX中的“镜头”是针孔相机,因此没有尺寸(即它是无限小的)。

如果你正在谈论焦距,那么这个没有关系,因为焦距意味着镜头和景深。

然而,您可以以您喜欢的任何单位计算相对于屏幕的相机位置(这被称为“透视参考点”)。

让我们说屏幕宽1米,视野为90度(PI / 2弧度)。使用基本的三角学你知道吗

tan( fov / 2 ) = opposite/adjacent.  

你知道相反(因为它是半米,即屏幕的一半)

因此,要计算相邻(即从屏幕到相机位置的距离),您只需执行以下操作:

adjacent = opposite / tan( fov / 2 )

上面的简单数字就是:

adjacent = 0.5 / tan( PI / 4 )
=> 0.5 / 1.0 
=> 0.5

即在那种情况下,相机距离屏幕半米(当您考虑90度视野时,这是相当合乎逻辑的)。

所涉及的单位当然有点武断......

如果你再调查一下。相机位置越靠近屏幕,FOV越宽,相机位置越远,FOV越窄。如果你画出这些,你会明白为什么。

在此基础上,您可以计算出距离屏幕“n”米的人的完美视野......

答案 2 :(得分:2)

考虑距离相机距离为d的单位长度的水平线,其中设置了视野(即开角),使得距离d处的单位长线完全覆盖图像宽度(或高度,取决于你测量场的数量,然后d是镜头长度。当然,您也可以进行逆向计算。

tan(0.5fov)= 0.5d

相关问题