1 | initial version |
consider a 3x3 camera matrix. it contains fx, fy, cx, cy, some zeros, and a 1.
fx and fy are usually equal or close, if you want square pixels. they are independent of image aspect ratio (more on that below). you scale them both equally if you have more resolution.
you can calculate fx given a field of view and desired resolution (in each axis, horizontally/vertically).
consider a point right on the edge of the FoV. it's at an angle of fov/2. you want that to go on the edge of the image, so it goes to cx + width/2 (same for y/height, the cx component comes from the third column of the matrix).
so now we have tan(fov/2) * fx = width/2. rearrange, fx = (width/2) / tan(fov/2)
then, fx = fy if you want square pixels. if you have diagonal field of view, the calculation uses hypot(width/2,height/2) instead of just width/2.
now, for the same fx,fy you can have a larger resolution picture (recalculate cx,cy to keep things centered). that merely affects the field of view.
if you want twice the resolution (or any factor), you'd multiply fx,fy,cx,cy,width,height by that factor and everything is okay.