OpenGl 中的焦距到 Fov 公式
FocalLength to Fov formula in OpenGl
我正在写一个 FBX reader,相机给了我 FocalLength(从相机到兴趣点的距离)。
在 opengl 中,我使用 Field of View(视角)初始化视口。
在网上进行一些研究后,我在几个地方看到了这个公式:
FOV=2.0f*atanf((pixelwidth/2.0f)/focalLength);
但是,这个公式的结果给了我一个小值。
PD:我认为它可能是弧度,但将它从弧度转换为度数结果太大了。
- 对于 35mm 的 FocalLength,我应该得到 54.432 度的 FOV
- 对于 50mm 的 FocalLength,我应该得到 39.598 度的 FOV
- 对于 85mm 的 FocalLength,我应该得到 23.913 度的 FOV
但公式不起作用。我在这里做错了什么?
FOV=ANGLE * ((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 或 30
正常 70 毫米 - ~42 毫米 -> -> 角度=34 或 46 或 52
广角 ~40 mm - 23.2 mm - > ANGLE=rangle[60..83]
极广角 24 毫米 - 14 毫米 -> 角度=范围[84..114]
如果您小于 14 毫米,则使用极广角 -> ANGLE=range[115..178]
鱼眼 ~8 毫米 -> 角度=范围[178..179]
CreatePerspectiveFieldOfView(FOV, m_AspectRatio, 0.1f, 100.0f);
很快就这样了。
我正在写一个 FBX reader,相机给了我 FocalLength(从相机到兴趣点的距离)。
在 opengl 中,我使用 Field of View(视角)初始化视口。
在网上进行一些研究后,我在几个地方看到了这个公式:
FOV=2.0f*atanf((pixelwidth/2.0f)/focalLength);
但是,这个公式的结果给了我一个小值。 PD:我认为它可能是弧度,但将它从弧度转换为度数结果太大了。
- 对于 35mm 的 FocalLength,我应该得到 54.432 度的 FOV
- 对于 50mm 的 FocalLength,我应该得到 39.598 度的 FOV
- 对于 85mm 的 FocalLength,我应该得到 23.913 度的 FOV
但公式不起作用。我在这里做错了什么?
FOV=ANGLE * ((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 或 30
正常 70 毫米 - ~42 毫米 -> -> 角度=34 或 46 或 52
广角 ~40 mm - 23.2 mm - > ANGLE=rangle[60..83]
极广角 24 毫米 - 14 毫米 -> 角度=范围[84..114]
如果您小于 14 毫米,则使用极广角 -> ANGLE=range[115..178]
鱼眼 ~8 毫米 -> 角度=范围[178..179]
CreatePerspectiveFieldOfView(FOV, m_AspectRatio, 0.1f, 100.0f);
很快就这样了。