4

在使用 openGL 透视图时,我不太确定如何从 fovy 计算 fovx。我在不同的地方阅读了不同的东西,并且使用我发现的任何一种方法都没有得到正确的行为。那么有人可以告诉我,鉴于相机的fovy和纵横比,我如何计算相机的fovx?如果需要任何其他数据也没关系,请告诉我我需要什么。非常感谢您!

4

4 回答 4

11

正确的:

fieldOfViewX = 2 * atan(tan(fieldOfViewY * 0.5) * aspect)

错了,尤其是对于大方面,请参阅下面的@gman 评论:

Aspect ratio === width/height
fovy ~= "height" 
==> fovx = fovy * aspect

测试:

Fovy = 60 degs
Aspect = 4:3 ~= 1.33
Fovx = 60*1.33 = 80
80/60 = 4:3 (fovs match, yay)

对于“合理”的 fovs/aspects,简单的方法是“合理地”接近事实,但如果你有极端的方面,你会得到 fovx > 180 度,这是你不想要的。

于 2011-03-31T18:46:55.807 回答
3

这是一个很好的链接:

http://wiki.panotools.org/Field_of_View

请注意,纵横比与视场比不是一回事,应使用本页给出的适当关系来关联视场角。

于 2013-01-02T02:50:50.003 回答
1

爪哇:

double d = (viewportHeight * 0.5) / Math.tan(Math.toRadians(fovY * 0.5));

fovX = (float) (2 * Math.toDegrees(Math.atan((viewportWidth * 0.5) / d)));
于 2011-11-04T11:12:45.773 回答
-1

你看过这里的公式吗?:

http://en.wikipedia.org/wiki/Angle_of_view

于 2011-03-31T18:46:32.440 回答