blob: e3b06c13d9b2d4c4663de5f3c70a4393e7466d72 [file] [log] [blame]
Name
WIN_phong_shading
Name Strings
GL_WIN_phong_shading
Version
$Date: 1997/4/3
Number
113
Dependencies
None
Overview
WIN_phong_shading enables rendering Phong shaded primitives using OpenGL.
Phong shading is a well known shading technique documented
in most graphics texts.
As opposed to Gouraud (or smooth) shading, which simply calculates the
normals at the vertices and then interpolates the colors of the pixels,
Phong shading involves interpolating an individual normal for every pixel,
and then applying the shading model to each pixel based on its normal
component.
While Phong shading requires substantially more computation than does
Gouraud shading, the resulting images are more realistic, especially if the
primitives are large.
Issues
None
New Procedures and Functions
None
New Tokens
Accepted by the <mode> parameter of ShadeModel:
PHONG_WIN 0x80EA
May be returned by GetBooleanv, GetDoublev, GetIntegerv, and GetFloatv
when their <pname> parameter is SHADE_MODEL:
PHONG_WIN 0x80EA
Accepted by the <target> parameter of Hint, and <pname> parameter of
GetBooleanv, GetDoublev, GetFloatv and GetIntegerv:
PHONG_HINT_WIN 0x80EB
Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation)
First sentence in Section 2.13, "Colors and Coloring", 'Figure 2.8
diagrams..' should be modified as below:
"Figure 2.8 diagrams the processing of colors before rasterization when
the primitives are not phong-shaded."
After the last paragraph of Section 2.13, "Colors and Coloring", the
following paragraph is added:
"The WIN_phong_shading extension is used to indicate that the primitives
should be phong shaded. In which case, the lighting, if enabled, is
applied at the time of rasterization to each pixel to obtain a color for
that pixel. The lighting computation used is consistant with the GL
lighting model described in Section 2.13.1. If the primitive is clipped,
then normals (and eye coordinates) must be computed for the vertices
introduced or modified by clipping."
Rename Section 2.13.7 to "Shading Models" and. Keep the first paragraph as
it is. Add the following new paragraph after the one ending in
"...Table 2.9 summarizes the possibilities":
"A primitive may be phong-shaded, meaning that instead of the the color
being interpolated, the normal (and the eye coordinate) are interpolated
across the primitive, and the lighting (if enabled) is applied per pixel
at the time of rasterization. If the other material properties change
within a primitive, either by ColorMaterial or explicitly changing the
material property using the Material command, they must be also be
interpolated along with the normal (and eye coordinate). However, for
efficiency's sake, an implementation may choose to ignore the effects of
the changes in material properties across a primitive.
If the lighting is disabled, or if the primitive is a point, it is
equivalent to regular smooth shading.
Implementations may also choose to approximate phong-shading by smart
interpolation techniques (some of which are described in graphics
literature). Using such algorithms, they may choose to tradeoff visual
fidelity for speed of rendering. For such a case a phong hint state,
discussed in section 5.6, can be used."
Modify the paragraph beginning with "Flatshading is controlled by....."
to the following:
"Phong-shading and flatshading are controlled by
void ShadeModel( enum mode);
mode value must be one of the symbolic constant SMOOTH, FLAT or
PHONG_WIN. If mode is SMOOTH (the initial state), vertex colors are
treated individually. If mode is FLAT, flatshading is turned on. If mode
is PHONG_WIN phong-shading is turned on. ShadeModel thus requires 2 bits
of state."
Rename Section 2.13.8 to "Color, Texture, Normal and Eye-Coordinate
Clipping". Add the following line after "The method is exactly...":
"If phong-shading is turned on, the normals and eye coordinates must be
computed for the newly generated vertices. The normals and the
eye-coordinates for these vertices are computed in exactly the manner
described for color clipping. In addition, unless the implementation
chooses to ignore changes in material properties within the primitive,
they should be computed for the new vertices analogously."
Additions to Chapter 3 of the 1.1 Specification (Rasterization)
After the sentence "The second ...." in the first paragraph, add the
sentence:
"If phong-shading is enabled, the color for the square is also computed
in this stage."
Modify the first line of the second paragraph to:
"A grid square along with its parameters of assigned color, z (depth),
texture coordinates, normal and eye coordinates (for phong shading)"
In Section 3.4.1 "Basic Line Segment Rasterization", modify the line
"The value of an associated datum f......." after equation 3.1 to:
"The value of an associated datum f for the fragment, whether it be R, G,
B, or A (in RGBA mode) or a color index (in color index mode), or normal,
eye coordinate or material properties (when phong-shaded), or the s, t, or
r texture coordinate .......... is found as"
Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations
and the Frame Buffer)
None
Additions to Chapter 5 of the 1.1 Specification (Special Functions)
In Section 5.6, "Hints", add the following phrase to the line beginning
"target may be one of .......":
"and PHONG_HINT_WIN, indicating the desired quality of phong shading."
Additions to Chapter 6 of the 1.0 Specification (State and State Requests)
None
Dependencies on other extensions
None
Errors
None
New State
Initial
Get Value Get Command Type Value Attrib
--------- ----------- ---- ------- ------
PHONG_HINT_WIN GetIntegerv Z3 DONT_CARE hint
New Implementation Dependent State
None