2010-12-13 105 views

回答

1

思考在距离d,其中场的的视角(即开口角度)被设置为使距离d处的单位长线正好覆盖图像宽度(或高度,取决于您测量的视野),则d是镜头长度。你当然也可以进行逆向计算。

tan(0.5 fov)= 0.5 d

2

“镜头长度”没有意义。 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越窄。如果你画出这些,你会明白为什么。

从这个基础上,你可以计算出完美的FOV一个人坐在“N”米远离屏幕...

6

我意识到这是一个很长的时间,因为这个问题被要求(至少可以这样说) ,但是我有一个很好的图表,我觉得它在这里很有帮助,所以不要发布它。如由图中,现场的视图(theta)和图像平面(d)的距离之间的关系是:

tan(theta/2) = ymax/d 

FOV and distance to image plane

相关问题