| Name |
| |
| NV_texgen_reflection |
| |
| Name Strings |
| |
| GL_NV_texgen_reflection |
| |
| Contact |
| |
| Mark J. Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com) |
| |
| Notice |
| |
| Copyright NVIDIA Corporation, 1999. |
| |
| Status |
| |
| Shipping (version 1.0) |
| NVIDIA, Mesa 3.1, and ATI support this. |
| |
| This extension's texture coordinate generation functionality is |
| incoporated into the ARB_texture_cube_map extension. The same |
| enumerant values are used. |
| |
| The ARB_texture_cube_map functionality, including this texgen |
| reflection functionality, is part of OpenGL 1.3 and subsequent |
| revisions of the core OpenGL standard. |
| |
| Version |
| |
| June 17, 2003 (version 1.0) |
| |
| Number |
| |
| 179 |
| |
| Dependencies |
| |
| Written based on the wording of the OpenGL 1.2 specification but |
| not dependent on it. |
| |
| Overview |
| |
| This extension provides two new texture coordinate generation modes |
| that are useful texture-based lighting and environment mapping. |
| The reflection map mode generates texture coordinates (s,t,r) |
| matching the vertex's eye-space reflection vector. The reflection |
| map mode is useful for environment mapping without the singularity |
| inherent in sphere mapping. The normal map mode generates texture |
| coordinates (s,t,r) matching the vertex's transformed eye-space |
| normal. The normal map mode is useful for sophisticated cube map |
| texturing-based diffuse lighting models. |
| |
| Issues |
| |
| Should we place the normal/reflection vector in the (s,t,r) texture |
| coordinates or (s,t,q) coordinates? |
| |
| RESOLUTION: (s,t,r). Even if the proposed hardware uses "q" for |
| the third component, the API should claim to support generation of |
| (s,t,r) and let the texture matrix (through a concatenation with |
| the user-supplied texture matrix) move "r" into "q". |
| |
| Should you be able to have some texture coordinates computing |
| REFLECTION_MAP_NV and others not? Same question with NORMAL_MAP_NV. |
| |
| RESOLUTION: YES. This is the way that SPHERE_MAP works. It is |
| not clear that this would ever be useful though. |
| |
| Should something special be said about the handling of the q |
| texture coordinate for this spec? |
| |
| RESOLUTION: NO. But the following paragraph is useful for |
| implementors concerned about the handling of q. |
| |
| The REFLECTION_MAP_NV and NORMAL_MAP_NV modes are intended to supply |
| reflection and normal vectors for cube map texturing hardware. |
| When these modes are used for cube map texturing, the generated |
| texture coordinates can be thought of as a reflection vector. |
| The value of the q texture coordinate then simply scales the |
| vector but does not change its direction. Because only the vector |
| direction (not the vector magnitude) matters for cube map texturing, |
| implementations are free to leave q undefined when any of the s, |
| t, or r texture coordinates are generated using REFLECTION_MAP_NV |
| or NORMAL_MAP_NV. |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <param> parameters of TexGend, TexGenf, and TexGeni |
| when <pname> parameter is TEXTURE_GEN_MODE: |
| |
| NORMAL_MAP_NV 0x8511 |
| REFLECTION_MAP_NV 0x8512 |
| |
| When the <pname> parameter of TexGendv, TexGenfv, and TexGeniv is |
| TEXTURE_GEN_MODE, then the array <params> may also contain |
| NORMAL_MAP_NV or REFLECTION_MAP_NV. |
| |
| 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, REFLECTION_MAP_NV, or |
| NORMAL_MAP_NV." |
| |
| Add these paragraphs after the 4th paragraph: |
| |
| "If TEXTURE_GEN_MODE indicates REFLECTION_MAP_NV, compute the |
| reflection vector r as described for the SPHERE_MAP mode. Then the |
| value assigned to an s coordinate (the first TexGen argument value |
| is S) is s = rx; the value assigned to a t coordinate is t = ry; |
| and the value assigned to a r coordinate is r = rz. Calling TexGen |
| with a <coord> of Q when <pname> indicates REFLECTION_MAP_NV |
| generates the error INVALID_ENUM. |
| |
| If TEXTURE_GEN_MODE indicates NORMAL_MAP_NV, compute the normal |
| vector n' as described in section 2.10.3. Then the value assigned |
| to an s coordinate (the first TexGen argument value is S) is s = |
| nfx; the value assigned to a t coordinate is t = nfy; and the |
| value assigned to a r coordinate is r = nfz. (The values nfx, nfy, |
| and nfz are the components of nf.) Calling TexGen with a <coord> |
| of Q when <pname> indicates REFLECTION_MAP_NV generates the error |
| INVALID_ENUM. |
| |
| 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, ..." |
| |
| 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 GLX Specification |
| |
| None |
| |
| Errors |
| |
| INVALID_ENUM is generated when TexGen is called with a <coord> of Q |
| when <pname> indicates REFLECTION_MAP_NV or NORMAL_MAP_NV. |
| |
| 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) |
| |
| (the type changes from 4xZ3 to 4xZ5) |
| |
| New Implementation State |
| |
| None |
| |
| Revision History |
| |
| None |