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 parameter of Enable, Disable, and IsEnabled FOG_SCALE_SGIX 0x81FC Accepted by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev, and by the 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 is FOG_DENSITY, FOG_START, FOG_END, or FOG_SCALE_SGIX, then is or 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