Back to the OpenGL extension cross reference

GL_EXT_rescale_normal



Name


    EXT_rescale_normal

Name Strings


    GL_EXT_rescale_normal

Version


    $Date: 1997/07/02 23:38:17 $ $Revision: 1.7 $

Number


    27

Dependencies


    None

Overview


    When normal rescaling is enabled a new operation is added to the
transformation of the normal vector into eye coordinates. The normal vector
is rescaled after it is multiplied by the inverse modelview matrix and
before it is normalized.

The rescale factor is chosen so that in many cases normal vectors with unit
length in object coordinates will not need to be normalized as they
are transformed into eye coordinates.

New Procedures and Functions


    None

New Tokens


    Accepted by the <cap> parameter of Enable, Disable, and IsEnabled,
and by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv,
and GetDoublev:

RESCALE_NORMAL_EXT

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


    Section 2.10.3

Finally, we consider how the ModelView transformation state affects
normals. Normals are of interest only in eye coordinates, so the rules
governing their transformation to other coordinate systems are not
examined.

Normals which have unit length when sent to the GL, have their length
changed by the inverse of the scaling factor after transformation by
the model-view inverse matrix when the model-view matrix represents
a uniform scale. If rescaling is enabled, then normals specified with
the Normal command are rescaled after transformation by the ModelView
Inverse.

Normals sent to the GL may or may not have unit length. In addition,
the length of the normals after transformation might be altered due
to transformation by the model-view inverse matrix. If normalization
is enabled, then normals specified with the Normal3 command are
normalized after transformation by the model-view inverse matrix and
after rescaling if rescaling is enabled. Normalization and rescaling
are controlled with

void Enable( enum target);

and

void Disable( enum target);

with target equal to NORMALIZE or RESCALE_NORMAL. This requires two
bits of state. The initial state is for normals not to be normalized or
rescaled.
.
.
.

Therefore, if the modelview matrix is M, then the transformed plane equation
is

(n_x' n_y' n_z' q') = ((n_x n_y n_z q) * (M^-1)),

the rescaled normal is

(n_x" n_y" n_z") = f * (n_x' n_y' n_z'),

and the fully transformed normal is

1 (n_x")
____________ (n_y") (2.1)
__________________________________ (n_z")
V (n_x")^2 + (n_y")^2 + (n_z")^2

If rescaling is disabled then f is 1, otherwise f is computed
as follows:

Let m_ij denote the matrix element in row i and column j of M^-1,
numbering the topmost row of the matrix as row 1, and the leftmost
column as column 1. Then

1
__________
f = ________________________________
V (m_31)^2 + (m_32)^2 + (m_33)^2

Alternatively, an implementation my chose to normalize the normal
instead of rescaling the normal. Then

1
__________
f = ________________________________
V (n_x')^2 + (n_y')^2 + (n_z')^2


If normalization is disabled, then the square root in equation 2.1 is
replaced with 1, otherwise . . . .


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 Framebuffer)


    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

Additions to the GLX Specification


    None

GLX Protocol


        None

Errors


    None

New State


    Get Value           Get Command     Type    Initial Value    Attribute
--------- ----------- ---- ------------- ---------
RESCALE_NORMAL_EXT IsEnabled B FALSE transform/enable


New Implementation Dependent State


    None

Implementation Support


   List of OpenGL implementations supporting the GL_EXT_rescale_normal extension

Original File


   Original text file for the GL_EXT_rescale_normal extension


Page generated on Sun Nov 20 18:37:29 2005