Name

    SGIX_fog_patchy

Name Strings

    GL_SGIX_fog_patchy

Version

    $Date: 1999/03/30 23:13:46 $ $Revision: 1.3 $

Number

    XXX

Dependencies

    OpenGL 1.2 is required

Overview

    Patchy fog is a fog in which intermittent areas of dense fog may
    be encoutered. This extension explains how the patchy fog
    extension is supported. Patchy fog is needed because both 
    uniform fog density and fog layers can only specify a constant
    density at a given elevation. The SGIX_fog_texture openGL
    extension gives a mean to specify a patchy fog texture that will 
    modulate the fog density at a given elevation. The goal of this
    document is to describe the modulation fuction and the fog
    equation when patchy fog is enabled. No tokens, states, or 
    procedures are introduced in this extension.

New Procedures and Functions

    None

Issues

    - Since there is no API introduction is this extension the
    good way to present things?

    - Should we introduce a glEnable for patchy fog?

    - We should move the description of the patchy fog equation
    up to the overview but we do not want to disclose it for the
    moment.

New Tokens

    None

Additions to Chapter 2 of the 1.2 Specification (OpenGL Operation)

    None

Additions to Chapter 3 of the 1.2 Specification (Rasterization)

    3.10 Fog

    In addition to uniform fog density and fog layers, patchy fog can
    be specified. The patchy fog extension gives a mean to modulate
    the fog density with a texture.

                                  _____      _____
                density (d)   ___|     |    |     | 
                                 |  *  |____|  *  |__ To fog equation
                               __|     |  __|     |   (d*p*r)
                              |  |_____| |  |_____|
                              |          |
                              |          |
                              |          |
    patchy fog texture (p)  __|          |
                                         |
                                         |
    range (r) ---------------------------|

    
    The product (d*p*r) is used in the computation of the fog blending
    factor (f). If the patchy fog texture is not enabled in SGIX_fog_texture, 
    then the patchy fog texture has no effect (p = 1.0).

    The computation of the fog equation when patchy fog is enabled
    requires multiple passes. It is hereby described as a 2-pass
    approach. If there are more than one patchy fog layer or more
    than one patchy fog color, the second pass will be repeated
    multiple times.

    1) In the first pass: compute an intermediate color at a given
    fragment using the fog blending equation. In this first pass,
    the fog patchiness is ignored (p=1).

	[RGBl] = f1 x [RGBs] + (1-f1) x  [RGBfog]

    where,
      - [RGBl] is the intermediate color stored in the frame buffer.
      - f1 is the fog blending factor. It is a function of the fog
        density (d) and the distance between the viewpoint and the
        fragment in eye space (r).
      - [RGBs] is the input fragment that is coming out from fragment
        lighting in the rasterization pipeline.
      - [RGBfog] is the fog color.

    2) In the second pass: compute the final fragment color using the 
    result of the previous pass. In the second pass, the fog
    patchiness is taken into account (p=patchy fog texture)
 
	Destination = f2 * [RGBl] + (1-f2) * [RGBcloud],

    where,
      - Destination is the final fragment color
      - f2 is the fog blending factor. It is a function of the fog
	density (d), the distance between the viewpoint and the fragment in eye
	space (r), and the patchy fog texture (p). In the hardware, the density
	is first multiplied by the patchy fog texture and then
	multiplied by the range r.
      - [RGBl] is the intermediate color. Color that we would get
	without patchy fog.
      - [RGBcloud] is the patchy fog color.
  

Additions to Chapter 4 of the 1.2 Specification (Per-Fragment Operations
and the Framebuffer)

    None

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

    None

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

    None

Additions to the GLX Specification

    None

Errors

    None

New State

    None

New Implementation Dependent State

    None
