Name
    
    NV_texgen_emboss

Name Strings

    GL_NV_texgen_emboss

Contact

    Mark J. Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com)

Notice

    Copyright NVIDIA Corporation, 1999, 2001.

IP Status

    NVIDIA Proprietary.

Status

    Discontinued.

    NVIDIA no longer supports this extension in driver updates
    after November 2002.  Instead, use either ARB_vertex_program &
    NV_vertex_program.

Version

    NVIDIA Date: January 3, 2003
    $Date$ $Revision$
    $Id: //sw/main/docs/OpenGL/specs/old/GL_NV_texgen_emboss.txt#2 $

Number

    193

Dependencies

    ARB_multitexture.

    Written based on the wording of the OpenGL 1.2 specification and the
    ARB_multitexture extension.

Overview

    This extension provides a new texture coordinate generation mode
    suitable for multitexture-based embossing (or bump mapping) effects.

    Given two texture units, this extension generates the texture
    coordinates of a second texture unit (an odd-numbered texture unit)
    as a perturbation of a first texture unit (an even-numbered texture
    unit one less than the second texture unit).  The perturbation is
    based on the normal, tangent, and light vectors.  The normal vector
    is supplied by glNormal; the light vector is supplied as a direction
    vector to a specified OpenGL light's position; and the tanget
    vector is supplied by the second texture unit's current texture
    coordinate.  The perturbation is also scaled by program-supplied
    scaling constants.

    If both texture units are bound to the same texture representing a
    height field, by subtracting the difference between the resulting two
    filtered texels, programs can achieve a per-pixel embossing effect.

Issues

    Can you do embossing on any texture unit?

      NO.  Just odd numbered units.  This meets a constraint of the
      proposed hardware implementation, and because embossing takes two
      texture units anyway, it shouldn't be a real limitation.

    Can you just enable one coordinate of a texture unit for embossing?

      Yes but NOT REALLY.  The texture coordinate generation formula
      is specified such that only when ALL the coordinates are enabled
      and are using embossing, do you get the embossing computation.
      Otherwise, you get undefined values for texture coordinates enabled
      for texture coordinate generation and setup for embossing.

    Does the light specified have to be enabled for embossing to work?

      Yes, currently.  But perhaps we could require implementations to
      enable a phantom light (the light colors would be black).

    Could the emboss constant just be the reciprocal of the width and
    height of the texture units texture if that's what the programmer
    will have it be most of the time?

      NO.  Too much work and there may be reasons for the programmer to
      control this.

    OpenGL's base texture environment functionality isn't powerful enough
    to do the subtraction needed for embossing.  Where would you get
    powerful enough texture environment functionality.

      Another extension.  Try NV_register_combiners.

    What is the interpretation of CT?

      For the purposes of embossing, CT should be thought of as the
      vertex's tangent vector.  This tangent vector indicates the direction
      on the "surface" where PCTs is not changing and PCTt is increasing.

    Are the CT and PCT variables the user-supplied current texture
    coordinates?

      YES.  Except when the texture unit's texture coordinate evaluator
      is enabled, then CT and PCT use the respective evaluated texture
      coordinates.

      This extension specification's language "Denote as CT the texture
      unit's current texture coordinates" and "Denote as PCT the previous
      texture unit's current texture coordinates" refers to the "current
      texture coordinates" OpenGL state which is the state specified
      via glTexCoord.  Plus the exception for evaluators.

      To be explicit, PCT is NOT the result of texgen or the texture
      matrix.  Likewise, CT is NOT the result of texgen or the
      texture matrix.  PCT and CT are the respective texture unit's
      evaluated texture coordinate if the vertex is evaluated with
      texture coordinate evaluation enabled, otherwise if the vertex is
      generated via vertex arrays with the respective texture coordinate
      array enabled, the texture coordinate from the texture coordinate
      array, otherwise the respective current texture coordinate is used.

New Procedures and Functions

    None

New Tokens

    Accepted by the <param> parameters of TexGend, TexGenf, and TexGeni
    when <pname> parameter is TEXTURE_GEN_MODE:

        EMBOSS_MAP_NV                      0x855F

    When the <pname> parameter of TexGendv, TexGenfv, and TexGeniv is
    TEXTURE_GEN_MODE, then the array <params> may also contain
    EMBOSS_MAP_NV.

    Accepted by the <pname> parameters of GetTexGendv, GetTexGenfv,
    GetTexGeniv, TexGend, TexGendv, TexGenf, TexGenfv, TexGeni, and
    TexGeniv:

        EMBOSS_LIGHT_NV                    0x855D
        EMBOSS_CONSTANT_NV                 0x855E

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

--  Section 2.10.4 "Generating Texture Coordinates"

    Change the last sentence in the 1st paragraph to:

    "If <pname> is TEXTURE_GEN_MODE, then either <params> points to
    or <param> is an integer that is one of the symbolic constants
    OBJECT_LINEAR, EYE_LINEAR, SPHERE_MAP, or EMBOSS_MAP_NV."

    Add these paragraphs after the 4th paragraph:

    "When used with a suitable texture, suitable explicit texture
    coordinates, a suitable (extended) texture environment,
    suitable lighting parameters, and suitable embossing parameters,
    calling TexGen with TEXTURE_GEN_MODE indicating EMBOSS_MAP_NV
    can simulate the lighting effect of embossing on a polygon.
    The error INVALID_ENUM occurs when the active texture unit has an
    even number.

    The emboss constant and emboss light parameters for controlling
    the EMBOSS_MAP_NV mode are specified by calling TexGen with pname
    set to EMBOSS_CONSTANT_NV and EMBOSS_LIGHT_NV respectively.

    When pname is EMBOSS_CONSTANT_NV, param or what params points
    to is a scalar value.  An error INVALID_ENUM occurs if pname is
    EMBOSS_CONSTANT_NV and coord is R or Q. An error INVALID_ENUM
    also occurs if pname is EMBOSS_CONSTANT_NV and the active texture
    unit number is even.

    When pname is EMBOSS_LIGHT_NV, param or what params points to is
    a symbolic constant of the form LIGHTi, indicating that light i
    is to have the specified parameter set.  An error INVALID_ENUM
    occurs if pname is EMBOSS_LIGHT_NV and coord is R or Q.  An error
    INVALID_ENUM occurs if pname is EMBOSS_LIGHT_NV and the active
    texture unit number is even.  An error INVALID_ENUM occurs if
    pname is EMBOSS_LIGHT_NV and the value i for LIGHTi is negative
    or is greater than or equal to the value of MAX_LIGHTS.

    If TEXTURE_GEN_MODE indicates EMBOSS_MAP_NV, the generation function
    for the coordinates S, T, R, and Q is computed as follows.

    Denote as L the light direction vector from the vertex's eye
    position to the position of the light specified by the coordinate's
    EMBOSS_LIGHT_NV state (the direction vector is computed as described
    in Section 3.13.1).

    Denote as N the current normal after transformation to eye
    coordinates.

    Denote as CT the texture unit's current texture coordinates
    transformed to eye coordinates by normal transformation (as
    described in Section 3.10.3) and normalized.

    However, if the vertex is evaluated (as described in Section 5.1)
    and the texture unit's texture coordinate map is enabled, use the
    texture unit's evaluated texture coordinate to compute CT.

    Denote as B the cross product of N and the <s,t,r> vector of CT.

        Bx = Ny*CTr - CTt*Nz
        By = Nz*CTs - CTr*Nx
        Bz = Nx*CTt - CTs*Ny

    Denote as BN the normalized version of the vector B.

        BNx = Bx / sqrt(Bx*Bx + By*By + Bz*Bz);
        BNy = By / sqrt(Bx*Bx + By*By + Bz*Bz);
        BNz = Bz / sqrt(Bx*Bx + By*By + Bz*Bz);

    Denote as T the cross product of B and N.

        Tx = BNy*Nz - Ny*BNz
        Ty = BNz*Nx - Nz*BNx
        Tz = BNx*Ny - Nx*BNy

    Observe that BN and T are orthonormal.

    Denote as PCT the previous texture unit's current texture
    coordinates.  If the number of the texture unit for the texture
    coordinates being generated is n, then the previous texture unit
    is texture unit number n-1.  Note that n is restricted to be odd.

    However, if the vertex is evaluated (as described in Section 5.1)
    and the previous texture unit's texture coordinate map is enabled,
    use the previous texture unit's evaluated texture coordinate to
    compute PCT.

    Denote Ks as the S coordinate's EMBOSS_CONSTANT_NV state.  Denote Kt
    as the T coordinate's EMBOSS_CONSTANT_NV state.  These constants
    should typically be set to the reciprocal of the width and height
    respectively of the texture map used for embossing.

    Denote E as follows:

        Es = PCTs + Ks * (Lx*BNx + Ly*BNy + Lz*BNz) * PCTq
        Et = PCTt - Kt * (Lx*Tx + Ly*Ty + Lz*Tz) * PCTq
        Er = PCTr
        Eq = PCTq

    Then the value assigned to an s, t, r, and q coordinates are Es,
    Et, Er, and Eq respectively.  However, for this assignment to
    occur, the following three conditions must be met.  First, all the
    texture coordinate generation modes of all the texture coordinates
    (S, T, R, and Q) of the texture unit must be set to EMBOSS_MAP_NV.
    Second, all the texture coordinate generation modes of the texture
    unit must be enabled.  Third, the EMBOSS_LIGHT_NV parameters of
    coordinates S and T must be identical and the light and lighting
    must be enabled.  If these conditions are not met, the values of
    all coordinates in the texture unit with the EMBOSS_MAP_NV mode
    are undefined."

    The last paragraph's first sentence should be changed to:

    "The state required for texture coordinate generation comprises
    a five-valued integer for each coordinate indicating coordinate
    generation mode, and a bit for each coordinate to indicate whether
    texture coordinate generation is enabled or disabled.  In addition,
    four coefficients are required for the four coordinates for each
    of EYE_LINEAR and OBJECT_LINEAR; also, an emboss constant and
    emboss light are required for each of the four coordinates....
    The initial values for emboss constants and emboss lights are 1.0
    and LIGHT0 respectively."

Additions to Chapter 3 of the 1.2 Specification (Rasterization)

    None

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

    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 AGL/GLX/WGL Specifications

    None

GLX Protocol

    None

Errors

    INVALID_ENUM is generated when TexGen is called with a <pname>
    of TEXTURE_GEN_MODE, a <param> value or value of what <params>
    points to of EMBOSS_MAP_NV, and the active texture unit is even.

    INVALID_ENUM is generated when TexGen is called with a <pname>
    of EMBOSS_CONSTANT_NV and the active texture unit is even.

    INVALID_ENUM is generated when TexGen is called with a <pname>
    of EMBOSS_LIGHT_NV and the active texture unit is even.

    INVALID_ENUM is generated when TexGen is called with a <coord>
    of R or Q when <pname> indicates EMBOSS_CONSTANT_NV.

    INVALID_ENUM is generated when TexGen is called with a <coord>
    of R or Q when <pname> indicates EMBOSS_LIGHT_NV.

    INVALID_ENUM is generated when TexGen is called with a <pname>
    of EMBOSS_LIGHT_NV and the value of i for the parameter LIGHTi is
    negative or is greater than or equal to the value of MAX_LIGHTS.

New State

(table 6.14, p204) change the entry for TEXTURE_GEN_MODE to:

    Get Value            Type    Get Command     Initial Value   Description        Sec    Attribute
    ---------            ----    -----------     -------------   -----------        ------ ---------
    TEXTURE_GEN_MODE     4xZ5    GetTexGeniv     EYE_LINEAR      Function used for  2.10.4 texture
                                                                 texgen (for s,t,r,
                                                                 and q)
    EMBOSS_CONSTANT_NV   4xR     GetTexGenfv     1.0             Scaling constant   2.10.4 texture
                                                                 for emboss texgen
    EMBOSS_LIGHT_NV      4xZ8*   GetTexGeniv     LIGHT0          Light used for     2.10.4 texture
                                                                 embossing.

When ARB_multitexture is supported, the Type column is per-texture unit.

(the TEXTURE_GEN_MODE type changes from 4xZ3 to 4xZ5)

New Implementation State

    None

Revision History

    2001/02/20 - Status changed to deprecated.
    1/3/2003 changed status to "discontinued"
