| Name |
| |
| EXT_separate_specular_color |
| |
| Name Strings |
| |
| GL_EXT_separate_specular_color |
| |
| Version |
| |
| $Date: 1997/10/05 00:16:23 $ $Revision: 1.3 $ |
| |
| Number |
| |
| 144 |
| |
| Dependencies |
| |
| None |
| |
| Overview |
| |
| This extension adds a second color to rasterization when lighting is |
| enabled. Its purpose is to produce textured objects with specular |
| highlights which are the color of the lights. It applies only to |
| rgba lighting. |
| |
| The two colors are computed at the vertexes. They are both clamped, |
| flat-shaded, clipped, and converted to fixed-point just like the |
| current rgba color (see Figure 2.8). Rasterization interpolates |
| both colors to fragments. If texture is enabled, the first (or |
| primary) color is the input to the texture environment; the fragment |
| color is the sum of the second color and the color resulting from |
| texture application. If texture is not enabled, the fragment color |
| is the sum of the two colors. |
| |
| A new control to LightModel*, LIGHT_MODEL_COLOR_CONTROL_EXT, manages |
| the values of the two colors. It takes values: SINGLE_COLOR_EXT, a |
| compatibility mode, and SEPARATE_SPECULAR_COLOR_EXT, the object of |
| this extension. In single color mode, the primary color is the |
| current final color and the secondary color is 0.0. In separate |
| specular mode, the primary color is the sum of the ambient, diffuse, |
| and emissive terms of final color and the secondary color is the |
| specular term. |
| |
| There is much concern that this extension may not be compatible with |
| the future direction of OpenGL with regards to better lighting and |
| shading models. Until those impacts are resolved, serious |
| consideration should be given before adding to the interface |
| specified herein (for example, allowing the user to specify a |
| second input color). |
| |
| Issues |
| |
| * Where is emissive included? |
| |
| RESOLVED - Emissive is included with the ambient and diffuse |
| terms. Grouping emissive with specular (the "proper" thing) could |
| be implemented with a new value for the color control. |
| |
| * Should there be two colors when not lighting or with index |
| lighting? |
| |
| RESOLVED - The answer is probably yes--there should be two colors |
| when lighting is disabled and there could be an incorporation of |
| two colors with index lighting; but these are beyond the scope of |
| this extension. Further, attempts to accomplish these may not be |
| compatible with the future direction of OpenGL with respect to |
| high quality lighting and shading models. |
| |
| * What happens when texture is disabled? |
| |
| RESOLVED - The extension specifies to add the two colors when |
| texture is disabled. This is compatible with the philosophy of |
| "if texture is disabled, this mode does not apply". |
| |
| New Procedures and Functions |
| |
| None. |
| |
| New Tokens |
| |
| Accepted by the <pname> parameter of LightModel*, and also by the |
| <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and |
| GetDoublev: |
| |
| LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 |
| |
| Accepted by the <param> parameter of LightModel* when <pname> is |
| LIGHT_MODEL_COLOR_CONTROL_EXT: |
| |
| SINGLE_COLOR_EXT 0x81F9 |
| SEPARATE_SPECULAR_COLOR_EXT 0x81FA |
| |
| Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) |
| |
| - (2.13, p. 40) Rework the second paragraph to acknowledge two |
| colors: |
| |
| "Next, lighting, if enabled, produces either a color index or |
| primary and secondary colors. If lighting is disabled, the |
| current color index or color is used in further processing (the |
| current color is the primary color and the secondary color is 0). |
| After lighting, colors are clamped..." |
| |
| - (Figure 2.8, p. 41) Change RGBA to primary RGBA and secondary RGB: |
| |
| Ideally, there might be an RGB2 underneath RGBA (both places). |
| Alternatively, a note in the caption could clarify that RGBA |
| referred to the primary RGBA and a secondary RGB. (Speaking of |
| the caption, the part about "m is the number of bits an R, G, B, |
| or A component" could be removed as m doesn't appear in the |
| diagram.) |
| |
| - (2.13.1, p. 42) Rework the opening of this section to not imply a |
| single color: |
| |
| In the first sentence, change "a color" to "colors". Rephrase the |
| itemization of the two lighting states to: |
| |
| "1. Lighting Off. In this state, the current color is assigned to |
| the vertex primary color. The vertex secondary color is 0. |
| |
| 2. Lighting On. In this state, the vertex primary and secondary |
| colors are computed from the current lighting parameters." |
| |
| - (Table 2.7, p.44) Add new entry (at the bottom): |
| |
| Parameter Type Default Value Description |
| --------- ---- ---------------- ------------------------------ |
| c_es enum SINGLE_COLOR_EXT controls computation of colors |
| |
| - (p. 45, top of page) Rephrase the first line and equation: |
| |
| "Lighting produces two colors at a vertex: a primary color c_1 and |
| a secondary color c_2. The values of c_1 and c_2 depend on the |
| light model color control, c_es (note: c_es should be in italics |
| and c_1 and c_2 in bold, so this really won't be as confusing as |
| it seems). If c_es = SINGLE_COLOR_EXT, then the equations to |
| compute c_1 and c_2 are (note: the equation for c_1 is the current |
| equation for c): |
| |
| c_1 = e_cm |
| + a_cm * a_cs |
| + SUM(att_i * spot_i * (a_cm * a_cli |
| + dot(n, VP_pli) * d_cm * d_cli |
| + f_i * dot(n, h_i)^s_rm * s_cm * s_cli) |
| c_2 = 0 |
| |
| If c_es = SEPARATE_SPECULAR_COLOR_EXT, then: |
| |
| c_1 = e_cm |
| + a_cm * a_cs |
| + SUM (att_i * spot_i * (a_cm * a_cli |
| + (n dot VP_pli) * d_cm * d_cli) |
| |
| c_2 = SUM(att_i * spot_i * (f_i * (n dot h_i)^s_rm * s_cm * s_cli) |
| |
| - (p. 45, second paragraph from bottom) Clarify that A is in the |
| primary color: |
| |
| After the sentence "The value of A produced by lighting is the |
| alpha value associated with d_cm", add "A is always associated |
| with the primary color c_1; c_2 has no alpha component." |
| |
| - (Table 2.8, p. 48) Add a new entry (at the bottom): |
| |
| Parameter Name Number of values |
| --------- ----------------------------- ---------------- |
| c_es LIGHT_MODEL_COLOR_CONTROL_EXT 1 |
| |
| - (2.13.6, p. 51) Clarify that both primary and secondary colors are |
| clamped: |
| |
| Replace "RGBA" in the first line of the section with "both primary |
| and secondary". |
| |
| - (2.13.7, p. 52) Clarify what happens to primary and secondary |
| colors when flat shading--reword the first paragraph: |
| |
| "A primitive may be flatshaded, meaning that all vertices of the |
| primitive are assigned the same color index or primary and |
| secondary colors. These come from the vertex that spawned the |
| primitive. For a point, these are the colors associated with the |
| point. For a line segment, they are the colors of the second |
| (final) vertex of the segment. For a polygon, they come from a |
| selected vertex depending on how the polygon was generated. Table |
| 2.9 summarizes the possibilities." |
| |
| - (2.13.8, p. 52) Rework to not imply a single color: |
| |
| In the second sentence, change "If the color is" to "Those" and ", |
| it is" to "are". In the first sentence of the next paragraph, |
| change "the color" to "two colors". |
| |
| Additions to Chapter 3 of the 1.0 Specification (Rasterization) |
| |
| - (Figure 3.1, p. 55) Add a box between texturing and fog called |
| "color sum". |
| |
| - (3.8, p. 85) In the first paragraph, second sentence, insert |
| "primary" before RGBA. Insert after this sentence "Texturing does |
| not affect the secondary color." |
| |
| - (new section before 3.9) Insert new section titled "Color Sum": |
| |
| "At the beginning of this stage in RGBA mode, a fragment has two |
| colors: a primary RGBA color (which texture, if enabled, may have |
| modified) and a secondary RGB color. This stage sums the R, G, |
| and B components of these two colors to produce a single RGBA |
| color. If the resulting RGB values exceed 1.0, they are clamped |
| to 1.0. |
| |
| In color index mode, a fragment only has a single color index and |
| this stage does nothing." |
| |
| Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations |
| and the Frame Buffer) |
| |
| None. |
| |
| Additions to Chapter 5 of the 1.0 Specification (Special Functions) |
| |
| - (5.3, p. 137) Specify that feedback returns the primary color by |
| changing the last sentence of the large paragraph in the middle |
| of the page to: |
| |
| "The colors returned are the primary colors. These colors and the |
| texture coordinates are those resulting from the clipping operations |
| as described in section 2.13.8." |
| |
| Additions to Chapter 6 of the 1.0 Specification (State and State Requests) |
| |
| - (Table 6.9, p. 157) Add: |
| |
| Get Value - LIGHT_MODEL_COLOR_CONTROL_EXT |
| Type - Z2 |
| Get Cmnd - GetIntegerv |
| Initial Value - SINGLE_COLOR_EXT |
| Description - color control |
| Sec. - (whatever it ends up as) |
| Attribute - lighting |
| |
| Additions to the GLX Specification |
| |
| None. |
| |
| GLX Protocol |
| |
| None. |
| |
| Errors |
| |
| None. |
| |
| New State |
| |
| (see changes to table 6.9) |