Name

    WIN_specular_fog

Name Strings

    GL_WIN_specular_fog

Version

    $Date: 1997/4/3 

Number

    114

Dependencies

    none

Overview

    Specularly lit textures enhance the realism of a scene greatly.
    Using the current OpenGL lighting model, one cannot obtain specularly lit 
    textures. This is because in the current OpenGL lighting model lighting
    is done ahead of texturing and texture-functions such as modulate are 
    inadequate for such a simulation. What needs to be addressed is that, 
    somehow an additional interpolant (specular color of that material) needs 
    to be propagated till that stage of the pipeline where texture-mapping is
    performed. This interpolant is then added on to the fragment's color
    resulting from the texturing process before proceeding with the rest of 
    the pipeline.

    This can be addressed very easily in software, but hardware
    is not so malleable. Currently most hardware does not support such a

    lighting model. However, some current hardware does support fogging,
    which takes place in the pipeline after texturing. This hardware 
    assumes that the fog blend factor f is computed per-vertex and
    interpolates the value across the primitive. The WIN_specular_fog
    extension enables the use of such existing fog circuitry to obtain 
    specularly lit textures without much performance degradation. 

    To use it the programmer simply enables the extension with a call to
    Enable with the appropriate enumerant and sets the fog color to the 
    desired specular color.

Issues

    1) This extension works only if: 
                * Lighting is enabled.
                * Texturing is enabled.
                * Texture function is MODULATE.
                * Two sided lighting is disabled.
                * RenderMode is RENDER.

    2) When both fogging and the extension are enabled, the FOG_HINT bit
       is ignored.

    3) One limitation is that the FOG_COLOR is used as the specular-highlight
       color. 

    4) PushAttrib and PopAttrib calls save and restore the extension related
       state when the FOG_BIT is set, along with the rest of the fog related
       state information. 
    
    5) The highlight computed by this extension is linear-interpolation based 
       and therefore appears similar to the highlights available for untextured 
       Gouraud polygons. If Phong shading (ext #113) is enabled this similarity
       will no longer hold as the Phong highlight is computed per-pixel.  This
       can result in the enabling of texture causing the highlight to move and 
       change shape.

New Procedures and Functions

    None

New Tokens

    Accepted by the <cap> parameter of Enable and IsEnabled:

    FOG_SPECULAR_TEXTURE_WIN                  0x80EC

    Accepted by the <pname> parameter of GetBooleanv, GetDoublev, GetIntegerv
     and GetFloatv
    
    FOG_SPECULAR_TEXTURE_WIN                  0x80EC

Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation)
    In section 2.6 titled "Begin/End Paradigm", add to the paragraph ending
    with "...its assigned color, and its texture coordinates", the following
    line:
    "In addition to these, an implementation may choose to associate a fog
    blend factor f with the processed vertex, which is computed per vertex to 
    speed up fogging calcutaions. This value f is also used to store the
    specular color factor computed in the lighting stage, to be applied after
    texturing by the fog sub-system."

    Modify the line "This may alter the primitive by altering....." to
    "This may alter the primitive by altering vertex coordinates, texture 
    coordinates, fog blend-factor and color".

    Figure 2.2 should be edited so that the "Associated Data" box includes
    Fog value.

    After the last paragraph of Section 2.13, "Colors and Coloring", the
    following paragraph is added:

    "If the WIN_specular_fog extension is enabled the fog value, which 
    represents the specular highlight color for the fragment, is computed 
    when lighting computation takes place."
    
    Add the following to Section 2.13.1 as the last paragraph of subsection
    titled "Lighting":
    "When the WIN_specular_fog extension is enabled, the parameters used for 
    computing the color of the vertex are used to compute the fog value 
    associated with the vertex. This value represents the specular color of 
    the vertex. This value is used by the fog sub-system to add a specular 
    color to the vertex after texturing has taken place. This is a way 
    around one of OpenGL's shortcomings, where lighting is done before 
    texturing resulting in a complete loss of specular highlights."

    Add the following to Section 2.13.1, subsection titled "Lighting 
    Operation", after the set of lighting equations and the line ending
    "... V is zero":
    "If the following conditions are met:
        1) WIN_specular_fog is enabled, 
        2) Texturing is enabled, 
        3) Texture function is MODULATE, 
        4) Two sided lighting is disabled,
        5) RenderMode is RENDER.
    Then the fog value of the vertex is computed to be:
   
                    n-1                        ^  srm
    f = max (0, 1 - Sum [(att )(spot )(f )(n . h )   ])      (2.6)"
                    i=0      i      i   i       i 

      = 1 , if the conditions are not met.

    Renumber eq. 2.6 to 2.7.
    
Additions to Chapter 3 of the 1.1 Specification (Rasterization)

    Modify the first line of the second paragraph to:
    "A grid square along with its parameters of assigned color, z (depth),
    texture coordinates, normal and eye coordinates (for phong shading) 
    and f (fog blend-factor)"

    In Section 3.4.1 "Basic Line Segment Rasterization", modify the line

    "The value of an associated datum f......." after equation 3.1 to:

    "The value of an associated datum f for the fragment, whether it be R, G,
    B, or A (in RGBA mode) or a color index (in color index mode), or normal,
    eye coordinate or material properties (when phong-shaded), or the s, t, or
    r texture coordinate or fog blend factor.......... is found as"

    Change the title of Section 3.9 from "Fog" to "Fog and Specular 
    Highlights"
    
    Change the first line "If enabled..." to 
    "If either fog or WIN_specular_fog are enabled, the fog blends a fog-color
    (which is also the specular highlight color) with a rasterized fragment's
    post-texturing color using a blend-factor f."

    Add the following line to the first paragraph:
    "WIN_specular_fog is enabled and disabled with the Enable and Disable 
    commands using the symbolic constant FOG_SPECULAR_TEXTURE_WIN."

    Change equations 3.16 3.17 and 3.18 to:
         
    f = f' * exp (-d.z)      (3.16)
                        
    f = f' * exp ((-d.z)**2) (3.17)
    f = f' * (e - z)/(e - s) (3.18)

    Modify the following line "(z is the eye-coordinate distance....)" to:
    "(z is the eye-coordinate distance from the eye, (0,0,0,1) in eye 
    coordinates, f' is the specular color factor computed in equation 2.6
    at the time of lighting)"

    Modify the line beginning "Further, f need not ....."
    to the following:
    "Further, if WIN_specular_fog is enabled, f must be computed at each
    vertex after f' has been computed during the lighting stage. f forms a
    part of the data associated with the processed vertex and is interpolated
    as other data are."

    Modify the first line of the last paragraph in section 3.9 beginning

    "The state required ..." to:
    The state required for fog consists of a three valued integer to select
    the fog equation, three .... a single bit to indicate whether or not fog
    is enabled and another bit to indicate whether or not WIN_specular_fog
    is enabled."
    
Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations
and the Frame Buffer)

    None

Additions to Chapter 5 of the 1.1 Specification (Special Functions)

    None

Additions to Chapter 6 of the 1.1 Specification (State and State
Requests)

    None

Dependencies on other extensions

    None

Errors

    None

New State
                                                           Initial
    Get Value                         Get Command   Type    Value 	Attrib
    ---------                         -----------   ----    ------- 	------
    FOG_SPECULAR_TEXTURE_WIN          IsEnabled     B       GL_FALSE 	WIN_specular_fog/enable

New Implementation Dependent State

    None

