When you move the mouse in a 3D game, you are rotating the viewport. This is essentially a circle. When you move the mouse in a 2D environment, you are just moving a pointer anywhere along a flat surface. This is just a flat line. When you disable mouse acceleration, the speed that the pointer moves and the speed that the viewport rotates is linear. Speed is just distance over time. There is misconception that because 2D is not rotational movement, it has no relationship to 3D movement. The speed of mouse movements in 2D and 3D can actually be related which is demonstrated in this analogy with a rack-and-pinion gearset.
Since a monitor is a fixed dimension, when you increase the HFOV of the game, the rendered frame is distorted (pincushion) to fit the image onto the display. Everything becomes zoomed out in the center and stretched along the sides. When you decrease the HFOV, the image is less distorted and more zoomed in. The viewport is essentially a dissected circle. Basically a higher FOV makes everything smaller and a lower FOV makes everything bigger. We can picture the differences in FOV and how their rotational speeds relate to each other in this analogy with a bike chain.
In order to convert between 2D and 3D, you need to know the speed of either the rack or the pinion wheel in the first analogy. If we were to convert from 2D, we would need to know the speed of the rack which is the mouse distance from edge to edge on the desktop. If we were to convert from 3D (to 2D or to another FOV in 3D), we would need to know the speed of the pinion wheel or gear which is the 360 distance at a given HFOV.
In this post we are going to convert from 2D to 3D at 106.26 FOV. In this example I have 2560x1440 resolution, 6/11 WPS, acceleration disabled, and 400 mouse DPI. We need to find the 2D distance, which can be found using this formula
resolution width / DPI = 2D distance (inch)
resolution width / DPI * 2.54 = 2D distance (cm)
2560 / 400 * 2.54 = 16.256 cm
We can use this as the base speed of 106.26 HFOV for now by simply figuring out how many times we need to move from one edge to the other to produce a 360 rotation, which is:
360/fov × 2D distance = cm/360
360/106.26 × 16.256 = 55.074 cm
This is what happens when you do a 100% monitor distance match in the calculator from 2D to 3D. We will use the bike chain analogy above to see how this works. Pretend the large gear is already spinning at the correct speed it needs to be. We are figuring out the speed of the small gear. We have done a 100% monitor distance match as a starting point but the chain is not moving properly along these gears yet because this speed is not correct.
Since smaller gears need to rotate faster and larger gears need to rotate slower, we need to find the size difference between our base measurement (2D edge to edge mouse distance) and the correct distance for 106.26 FOV. To do this, we look at a circular segment which is an area of a circle that is cut off from the rest of the circle by a chord. Think of the chord ( c ) as the desktop measurement, and the arc ( L ) as the game's measurement.
The chord is the width of our resolution. In this example I am using 2560 x 1440 resolution, so the chord is 2560. To find the arc, you need to know the hFOV of the game in radians and substitute them into this formula.
chord + chord * (hfovradians - 2 sin(hfovradians/2))/(2 sin(hfovradians/2)) = arc
2560 + 2560 * (1.85459 - 2 sin(1.85459/2))/(2 sin(1.85459/2)) = 2967.34...
Once we have the arc value, we find the percent increase from the chord to the arc.
100 × ((arc - chord) / chord) = percent increase
100 × ((2967.34 - 2560) / 2560) = 15.91171875%
Now we know the correct speed it needs to rotate at 106.26 FOV is 15.91171875% faster than the base speed (2D distance) we used, so we just take the same formula as before, but reduce the distance to go from one edge to the other by this percentage to find the corrected 360.
360/fov × (2D edge-to-edge distance - percent difference) = cm/360
360/106.26 × (16.256 - 15.91171875%) = 46.3108 cm
With this speed, the chain will move perfectly. On the calculator, this is pretty close to a 65% monitor distance match which is what I said in my first post. But as you can tell by now, the speed is unique for every FOV. You can not just use a fixed monitor distance match % every time. Using the calculator to convert monitor distance or 360 distance will not result in a sensitivity match. Joshua's method of averaging the correct monitor distance across ALL FOVs and using that averaged percent for everything will not work either. The only way to match sensitivity is to match the view speed using this method.
Games that do not allow you to customize the way they scale the sensitivity with the HFOV usually use 0% match (Call of Duty), 100% match 4:3 which is 75% match at 16:9, or simply 100% match at the correct aspect ratio. You can choose to use this method to get an actual sensitivity match between games, or use one of the above distance matches to replicate the above games if you have developed muscle memory with that system.
edit: The above calculation has an error with percentages. The correction is as follows, thanks to Skwuruhl:
360/fovdegrees * desktop distance * chord /(chord + chord (fovradians - 2 sin(fovradians/2))/(2 sin(fovradians/2)))
360/106.26 (2560/400×2.54)×2560/(2560 + 2560×(106.26×π/180 - 2 sin(1/2 (106.26×π/180)))/(2 sin(1/2 (106.26×π/180))))
Simplified down to:
(4 π z sin(x/2))/x^2 where x = fov radians and z = desktop distance
(4 π (2560/400×2.54) sin(1/2 (106.26×π/180)))/(106.26×π/180)^2
The calculator now supports this mode.
Edited by Drimzi, 17 March 2017 - 11:21 AM.