The discussion of reflections so far is solidly based on the principles of geometric optics. Virtual reflected objects are rendered from virtual eye positions and then, through stenciling or reusing the virtual image as a texture, these virtual reflected objects are further transformed to appear as reflections on ``real'' reflective objects within the scene.
There is another approach however. Instead of rendering virtual versions of objects to appear as reflections on reflective surfaces, we can encode the complete panoramic environment surrounding a reflective object in a texture and then look up into the texture based on texture coordinates that are parameterized by the reflection vector as it varies across the reflective surface.
This technique is known as environment mapping and was first proposed by Blinn and Newell [11]. Unlike geometric reflection techniques that render reflected virtual objects to appear as reflections within the actual scene, an environment map may have nothing to do with the actual surroundings of the object. Indeed, a common use of environment mapping is interactively rendering an object free-floating against an empty black background. The point of applying an environment map to such an object is not to give a true sense of the object's surroundings (it has none). Instead, the view-dependent nature of the (fake) reflected environment merely helps highlight the object's surface curvature.
Additionally, the environment map image can be blurred to simulate the appearance of a dull, less shiny surface. An environment map may encode just the light from emissive light sources (instead of the less bright light reflected from non-emissive objects in the environment). This is the basis for the textured phong highlight technique described in Section 10.1.1.
At an abstract level, what an environment map supplies is a fast way to determine the incident irradiance in any direction at a particular fixed point in space. Given a direction, the environment map tells us the irradiance in that direction. Typically, the direction used for querying an environment is the reflection vector on a surface. Using a reflection vector to access an environment map accounts for the illumination due to perfect specular reflection [79].
An environment map is accessed solely based on a 3D orientation. This has important ramifications for the use of environment maps and is fundamental to most of the limitations of environment mapping. An orientation in 3D space ultimately has two degrees of freedom. For example, you can express a 3D orientation as some number of degree of latitude and and some other number of degrees of longitude. As will be seen, the actual parameterization of a 3D orientation into two degrees of freedom varies depending on the particular details of different environment mapping techniques.
The crucial observation is that given the two degrees of freedom used to define a 3D orientation, we can use 2D texture mapping as the basis for implementing environment mapping. By encoding an environment map as a 2D texture, OpenGL applications can use conventional 2D texturing hardware to accelerate environment mapping and render convincing reflective objects at very interactive rates.