想知道它们是否相互关联
答案 0 :(得分:8)
我意识到这个问题已经问了很长时间(至少可以说),但我有一个很好的图表,因为我觉得它在这里很有用,所以发布它似乎很遗憾。如图所示,视野(theta
)与图像平面距离(d
)之间的关系为:
tan(theta/2) = ymax/d
答案 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