| |
| 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 0x803A |
| |
| 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 |