glShadeModel
(Mehr Informationen/weitere Artikel) {{{1}}} |
Inhaltsverzeichnis
glShadeModel
Syntax
procedure glShadeModel(mode: GLenum);
Parameter
mode | Bestimmt einen symbolischen Wert der eine Färbetechnik (Shadingtechnique) repräsentiert. Akzeptierte Werte sind GL_FLAT und GL_SMOOTH. Der Vorgabewert ist GL_SMOOTH. |
---|
Beschreibung
GL_SMOOTH
- Es bilden sich Farbverläufe zwischen den Eckpunkten eines Primitiven.
GL_FLAT
- Das gesamte Primitiv erhält die Farbe die als letztes dem Polygon zugewiesen wurde.
GL Primitive können entweder mittels Flat- oder Smoothshading gefärbt werden. Der Vorgabewert "Smoothshading" sogt dafür, dass ein Farbverlauf über die Polygonfläche bei der Rasterisierung berechnet wird. Dies wird angewendet, wenn die Eckpunkte eines Polygons unterschiedlich gefärbt sein sollen.
Beim sogenannten Flatshading wird nur die Farbe eines Eckpunkts für das gesamt Polygon genutzt. (Welcher Vertex die Farbe festlegt, kann der Tabelle entnommen werden.)
Die Farbe eines Eckpunktes ist bei deaktiverter Beleuchtung nur von glColor, bei aktivierter Beleuchtung zusätzlich noch von der Lichtberechnung abhängig.
Beginnend beim Aufruf von glBegin, gibt die GL jedem flat-geshadetem Linien-Segment i (wobei das Zählen bei 1 beginnt) die Farbe des Vertex i+1, also des 2. Vertex der Linie. Gleichermaßen gezählt wird bei den Polygonen. Jedem flat-geshadetem Polygon wird die berechnete Farbe eines Vertices entsprechend der nachfolgenden Tabelle zugewiesen. Normalerweiße ist dies der letzt spezifizierte Vertex des Polygons. Eine Ausnahme sind einzelne Polygone, wo der erste Vertex die flat-geshadete Farbe definiert.
Orginal:
Starting when glBegin is issued and counting vertices and primitives from 1, the GL gives each flat-shaded line segment i the computed color of vertex i + 1, its second vertex. Counting similarly from 1, the GL gives each flat-shaded polygon the computed color of the vertex listed in the following table. This is the last vertex to specify the polygon in all cases except single polygons, where the first vertex specifies the flat-shaded color.
glBegin Aufruf | Vertex für Polygon i |
---|---|
GL_POLYGON | 1 |
GL_TRIANGLE_STRIP | i + 2 |
GL_TRIANGLE_FAN | i + 2 |
GL_TRIANGLES | 3i |
GL_QUAD_STRIP | 2i + 2 |
GL_QUADS | 4i |
Beispiel
Farbfestlegung bei GL_FLAT
Dreiecke
glShadeModel(GL_FLAT); // Zeichne Dreiecke glBegin( GL_TRIANGLES ); glColor3f(1,0,0); //Kein Effekt glVertex3f( 0.0, 1.0, 0.0 ); glColor3f(0,1,0); //Kein Effekt glVertex3f( 1.0, -1.0, 0.0 ); glColor3f(0,0,1); glVertex3f( -1.0, -1.0, 0.0 ); //i=1 -> 1*3=Vetex Nr 3 gibt die Frabe an //-> dieses Dreick wird Blau (0,0,1)
glColor3f(1,0,0); //Kein Effekt glVertex3f( 3.0, 1.0, 0.0 ); glColor3f(0,1,0); //Kein Effekt glVertex3f( 4.0, -1.0, 0.0 ); glColor3f(1,1,0); glVertex3f( 2.0, -1.0, 0.0 ); //i=2 -> 2*3=Vetex Nr 6 gibt die Farbe an //-> Dieses Dreieck wird Gelb (1,1,0) glEnd;
Polygon mit unbestimmter Anzahl an Eckpunkten
glShadeModel(GL_FLAT); // Zeichne Dreiecke glBegin( GL_POLYGON ); glColor3f(1,0,0); glVertex3f( 0.0, 0.0, 0.0 ); // Vertex Nr 1 // Ab hier ist die Farbe des Polygons schon festgelegt (Rot) glColor3f(0,1,0); glVertex3f( 0.0, 1.0, 0.0 ); glColor3f(1,1,0); glVertex3f( 0.5, 1.5, 0.0 ); glColor3f(1,0,1); glVertex3f( 1.0, 1.0, 0.0 ); glColor3f(0,1,0); glVertex3f( 1.0, 0.0, 0.0 ); glEnd;
GL_FLAT und GL_QUADS
Für beide Beispiele wird der folgende Code benutzt. Einzigste Änderung: Der Parameter bei glShadeModel.
glShadeModel(GL_FLAT); glBegin(GL_QUADS); glColor3f(1, 0, 0); glVertex3f(0, 0, 0); glColor3f(0, 1, 0); glVertex3f(1, 0, 0); glColor3f(0, 0, 1); glVertex3f(1, 1, 0); glColor3f(1, 1, 0); glVertex3f(0, 1, 0); glEnd;
Smooth Shading (GL_SMOOTH) | Flat Shading (GL_FLAT) |
---|---|
Datei:glShadeModel SMOOTH.jpg | Datei:glShadeModel FLAT.jpg |
Fehlermeldungen
GL_INVALID_ENUM Wird erstellt wenn ein anderer Wert als GL_FLAT oder GL_SMOOTH übergeben wurde.
GL_INVLID_OPERATION Wird erzeugt wenn glShadeModel zwischen glBegin und glEnd aufgerufen wird.
Zugehörige Wertrückgaben
glGet mit dem Parameter GL_SHADE_MODEL.