I am having difficulties converting from horizontal to vertical view angles. I have to convert a program to OpenGL that passes its field of view as a horizontal angle but OpenGL requires a vertical angle. Is there any reliable way to convert between those 2 that takes the current aspect ratio into account? I’ve got something that works for 4:3 but it is more or less random messing around with the values and doesn’t help with other aspect ratios.
A little trigonometry solves this:
fovy = 2 * atan((h/w) * tan(fovx / 2))
or
fovy = 2 * atan(tan(fovx / 2) / aspect)
Here fovx and fovy are the opening angles in x and y respectively, and w and h are the width and height.
Note that this is only correct for gluPerspective-style (ie non-oblique frustums).