XXX - Not complete yet!!!

Name

    APPLE_specular_vector

Name Strings

    GL_APPLE_specular_vector

Version

    $Date: 1999/02/13 08:11:19 $ $Revision: 1.1 $

Number

    159

Dependencies

    None

Overview

    An alternative specular lighting model is enabled by passing
    the LIGHT_MODEL_SPECULAR_VECTOR token as the <pname> parameter
    to LightModel, and TRUE as the <param> parameter.  The specular
    vector lighting model calculates the specular intensity as the
    dot product of the true reflection vector of the light source
    and the vector from the vertex to the viewpoint.  This yields
    results that are visually similar to but often more realistic
    than the existing lighting model.  

    Mathematically, the specular component s.n in the existing
    lighting model calculation is replaced with the following
    alternative calculation.

    Given three vectors, n, l, and p, where n is the unit normal
    vector at the vertex, l is the unit vector from the vertex to
    the light position, and p is the unit vector from the vertex
    to the viewpoint (or the vector {0,0,1} if
    LIGHT_MODEL_LOCAL_VIEWER is false), the specular component is
    given by

      (2 * cross(n, cross(n, l)) + l) . p

    All other lighting model and material parameters (shininess,
    spotlight, attenuation, local viewer, and direction/positional
    sources) operate normally.  The specular vector lighting model
    affects both rgba and index modes.   

New Procedures and Functions

    None

New Tokens

    Accepted by the <pname> parameters of LightModelf, LightModeli,
    LightModelfv, LightModeliv, GetBooleanv, GetDoublev, GetFloatv
    and GetIntegerv :

    LIGHT_MODEL_SPECULAR_VECTOR_APPLE		0x85B0

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

    XXX - Not complete yet!!!

   Section 2.13.1, Lighting
	  Table 2.7 should be appended to include:
	  "S_bs   boolean   FALSE   use specular vector lighting model"

      Equations 2.2 and 2.3 should be updated to reflect the modified
      h_i terms in the specular component, as described above.

    Section 2.13.2, Lighting Parameter Specification
	  Table 2.8 should be appended to include:
	  "S_bs   LIGHT_MODEL_SPECULAR_VECTOR   1"

Additions to Chapter 3 of the 1.1 Specification (Rasterization)

    None

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)

    Not done

Additions to the GLX Specification

GLX Protocol

    None

Errors

    None

New State

    Get Value	                      Get Command Type Initial Value  Attrib
    --------------------------------- ----------- ---- ------------- --------
    LIGHT_MODEL_SPECULAR_VECTOR_APPLE GetBooleanv  B    False        lighting

New Implementation Dependent State

    None
