【问题标题】:FocalLength to Fov formula in OpenGlOpenGL中的焦距到Fov公式
【发布时间】:2015-05-21 09:20:48
【问题描述】:

我正在编写一个 FBX 阅读器,相机给了我 FocalLength(从相机到兴趣点的距离)。

在 opengl 中,我使用 Field of View(视角)初始化视口。

在网上做了一些研究后,我在几个地方看到了这个公式:

FOV=2.0f*atanf((pixelwidth/2.0f)/focalLength);

但是,这个公式的结果给了我一个小值。 PD:我认为它可能是弧度,但将它从弧度转换为度数结果太大了。

  • 对于 35 毫米的焦距,我应该得到 54.432 度的 FOV
  • 对于 50 毫米的焦距,我应该得到 39.598 度的 FOV
  • 对于 85 毫米的焦距,我应该得到 23.913 度的 FOV

但公式不起作用。我在这里做错了什么?

【问题讨论】:

  • 确保您对 pixelHeight 和 focusLength (mm) 使用相同的单位
  • 这很奇怪,为了得到像素高度的比例,因为focalLength是mm,我使用了一个自动方程求解器,比例结果从一个焦距到另一个不同。对吗?

标签: opengl graphics viewport


【解决方案1】:

FOV=角度 * ((float)Math.PI / 180f);

有一个角度值给出度数,例如,如果你使用 一个 35 毫米的相机,那么你需要在 FOV 中给出 63 度。 这就是 ANGLE 等于 63

以下是相机视角的主要角度:

超长焦 600 mm - 400 mm -> ANGLE=4 or 5 or 6

长焦 300 mm - 100 mm -> ANGLE=8 or 12 or 18 or 24

中长焦 85 mm- 80 mm -> ANGLE=28 or 30

正常 70 mm - ~42 mm -> -> ANGLE=34 or 46 or 52

广角~40 mm - 23.2 mm -> ANGLE=rangle[60..83]

极广角 24 mm - 14 mm -> ANGLE=range[84..114]

极广角,如果你小于 14 毫米,那么 -> ANGLE=range[115..178]

鱼眼 ~8 mm -> ANGLE=range[178..179]

CreatePerspectiveFieldOfView(FOV, m_AspectRatio, 0.1f, 100.0f);

差不多就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多