| Name |
| |
| SGIX_fog_scale |
| |
| Name Strings |
| |
| GL_SGIX_fog_scale |
| |
| Version |
| |
| $Date: 1999/04/02 22:52:37 $ $Revision: 1.6 $ |
| |
| Number |
| |
| 161 |
| |
| Dependencies |
| |
| OpenGL 1.0 is required. |
| The extension is written against the OpenGL 1.2.1 Specification. |
| SGIX_fog_offset affects the definition of this extension |
| |
| Overview |
| |
| This extension allows fragments to receive more or less fog than the |
| amount specified by the fog environment and the distance to the |
| fragment center, by scaling the fragment eye-coordinate distance |
| prior to fog computation. |
| |
| This is particularly interesting for light point objects that punch |
| even through thick fog. Fog scale value is specified by setting the |
| FOG_SCALE_VALUE_SGIX scale parameter with glFog*. If scale <= 0, the |
| resulting operation is clamped to 0. If 0 < scale < 1, the object |
| appears brighter. If scale > 1, the object receives more fog. A |
| scale of 1 has no effect. Fog scale can be enabled or disabled with |
| the FOG_SCALE_SGIX parameter. |
| |
| Issues |
| |
| * Should specifying FOG_SCALE_VALUE_SGIX < 0 generate an error? |
| |
| * Should the correct combined equation be (z * scale) - offset, or |
| (z - offset) * scale? Performer uses the latter, but the former is |
| more consistent with other OpenGL scale and bias operations. |
| |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <cap> parameter of Enable, Disable, and IsEnabled |
| |
| FOG_SCALE_SGIX 0x81FC |
| |
| Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, |
| GetFloatv, and GetDoublev, and by the <pname> parameter of Fogiv and |
| Fogfv: |
| |
| FOG_SCALE_VALUE_SGIX 0x81FD |
| |
| Additions to Chapter 2 of the 1.2.1 Specification (OpenGL Operation) |
| |
| None |
| |
| Additions to Chapter 3 of the 1.2.1 Specification (Rasterization) |
| |
| - (3.10, p. 139) Change the second paragraph to: |
| |
| "This factor f is computed according to one of three equations: |
| |
| f = exp(-d * f_z), (3.24) |
| |
| f = exp(-(d * f_z)^2), or (3.25) |
| |
| e - f_z |
| f = ------- (3.26) |
| e - s |
| |
| f_z is a function of the eye-coordinate distance z from the eye, |
| (0,0,0,1) in eye coordinates, to the fragment center. If |
| FOG_SCALE_SGIX is enabled, then f_z = z * f_s; otherwise, f_z = |
| z. If f_z < 0, then it is clamped to zero prior to fog |
| computation. |
| |
| "The equation, along with the parameters d, e, s, and f_s, is |
| specified with..." |
| |
| Change the end of the third paragraph to: |
| |
| "...If <pname> is FOG_DENSITY, FOG_START, FOG_END, or |
| FOG_SCALE_SGIX, then <param> is or <params> points to a value |
| that is d, s, e, or f_s, respectively. If d is specified as less |
| than zero, the error INVALID_VALUE is generated." |
| |
| Change the final paragraph on page 140 to: |
| |
| "The state required for fog consists of a three valued integer |
| to select the fog equation, four floating-point values d, e, s, |
| and f_s, an RGBA fog color and a fog color index, a single bit |
| to indicate whether or not fog is enabled, and a single bit to |
| indicate whether or not fog scaling is enabled. In the initial |
| state, fog is disabled, fog scaling is disabled, FOG_MODE is |
| EXP, d = 1.0, e = 1.0, s = 0.0, and f_s = 1.0; C_f = (0,0,0,0) |
| and i_f = 0." |
| |
| Additions to Chapter 4 of the 1.2.1 Specification (Per-Fragment Operations |
| and the Framebuffer) |
| |
| None |
| |
| Additions to Chapter 5 of the 1.2.1 Specification (Special Functions) |
| |
| None |
| |
| Additions to Chapter 6 of the 1.2.1 Specification (State and State Requests) |
| |
| None |
| |
| Additions to the GLX Specification |
| |
| None |
| |
| Dependencies on SGIX_fog_offset |
| |
| If SGIX_fog_offset is supported, then both scale and offset can be |
| applied to z prior to fog computation. Combining the new language of |
| the two specifications is straightforward except at the end of the |
| second paragraph of section 3.10, which should read: |
| |
| "...f_z is a function of the eye-coordinate distance z from the |
| eye, (0,0,0,1) in eye coordinates, to the fragment center. If |
| both FOG_OFFSET_SGIX and FOG_SCALE_SGIX are enabled, then f_z = |
| z * f_s - f_o. If only FOG_OFFSET_SGIX is enabled, then f_z = z |
| - f_o. If only FOG_SCALE_SGIX is enabled, then f_z = z * f_s. |
| Otherwise, f_z = z. If f_z < 0, then it is clamped to zero prior |
| to fog computation." |
| |
| Errors |
| |
| None |
| |
| New State |
| |
| (table 6.8, p. 198) |
| |
| Get Value Type Get Command Initial Value Description Sec. Attribute |
| --------- ---- ----------- ------------- ----------- ---- --------- |
| FOG_SCALE_SGIX B IsEnabled False True if fog scaling is enabled 3.10 fog |
| FOG_SCALE_VALUE_SGIX R GetFloatv 1.0 Fog scaling factor 3.10 fog |
| |
| New Implementation Dependent State |
| |
| None |