RAY-CASTING STEP 4: FINDING DISTANCE TO WALLS There are several ways to find the distance from the viewpoint (player)
to the wall slice. They are illustrated below. Figure 17: Finding distance to a wall slice. The sine or cosine functions are cheaper to implement because they can be pre-computed and put into tables. This can be done because ALPHA (player's POV) has to be between 0 to 360 degrees, so the number of possibilities are limited (the square root method has a virtually unlimited possible values for the x's and y's).
Before drawing the wall, there is one problem that must be taken care
of. This problem is known as the "fishbowl effect." Fishbowl
effect happens because ray-casting implementation mixes polar coordinate
and Cartesian coordinate together. Therefore, using the above formula
on wall slices that are not directly in front of the viewer will gives
a longer distance. This is not what we want because it will cause a
viewing distortion such as illustrated below. Figure 18 Thus to remove the viewing distortion, the resulting distance
obtained from equations in Figure 17 must be
multiplied by cos(BETA); where BETA is the angle of the ray that is being
cast relative to the viewing angle. On the figure above, the viewing angle
(ALPHA) is 90 degrees because the player is facing straight upward. Because
we have 60 degrees field of view, BETA is 30 degrees for the leftmost
ray and it is -30 degrees for the rightmost ray.
|
||