In both rendering and interactive computer graphics, substantial effort has been devoted to the modeling of reflected and refracted light. This is not surprising - almost all the light perceived in the world is reflected. In this section, we will describe several ways to create the effects of reflection and refraction using OpenGL. We will begin with a very brief review of the relevant physics and give pointers to more detailed descriptions.
From elementary physics, we know that the angle of reflection of a ray is equal to the angle of incidence of the ray (Figure 23). This property is known as the Law of Reflection.[10]. The reflected ray lies in the plane defined by the incident ray and the surface normal.
Refraction is defined as the ``change in the direction of travel as light passes from one medium to another.''[10]. This change in direction is caused by the difference in the speed of light traveling through the two mediums. The refractivity of a material is characterized by the index of refraction of the material, or the ratio of the speed of light in the material to the speed of light in a vacuum.[10].
The direction of a light ray after it passes from one medium to
another is computed from the direction of the incident ray, the normal
of the surface at the intersection of the incident ray, and the indices
of refraction of the two materials. The behavior is shown in Figure
23. The first medium through which the ray passes has
an index of refraction and the second has an index of
refraction
. The angle of incidence
is the angle
between the incident ray and the surface normal. The refracted ray
forms the angle
with the normal. The incident and
refracted rays are coplanar. The relationship between the angle of
incidence and the angle of refraction is stated as Snell's
Law[10]:
If (light is passing from a more refractive material to a
less refractive material), past some critical angle the incident ray
will be bent so far that it will not cross the boundary. This
phenomenon is known as total internal reflection and is
illustrated in Figure 24.[10]
When a ray hits a surface, some light is reflected off the surface and some is transmitted. The weighting of the transmitted and reflected light is determined by the Fresnel equations.
More details about reflection and refraction can be gleaned from most college physics books. For more details on the reflection and transmission of light from a computer graphics perspective, the reader may consult one of several general computer graphics books or books on radiosity or ray tracing. The following books may prove helpful: