glShadeModel: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Fehlermeldungen)
K (Bot: konvertiere/korrigiere HTML)
Zeile 64: Zeile 64:
 
=== Farbfestlegung bei GL_FLAT ===
 
=== Farbfestlegung bei GL_FLAT ===
 
==== Dreiecke ====
 
==== Dreiecke ====
  glShadeModel<b>(</b>GL_FLAT<b>)</b>;
+
  glShadeModel'''('''GL_FLAT''')''';
  <font color="#000080"><i>// Zeichne Dreiecke</i></font>
+
  <font color="#000080">''// Zeichne Dreiecke''</font>
  glBegin<b>(</b> GL_TRIANGLES <b>)</b>;
+
  glBegin'''(''' GL_TRIANGLES ''')''';
   <font color="#000080"><i>//Beginn des ersten Dreiecks -> i=1</i></font>
+
   <font color="#000080">''//Beginn des ersten Dreiecks -> i=1''</font>
   glColor3f<b>(</b>1,0,0<b>)</b>; <font color="#000080"><i>//Kein Effekt</i></font>
+
   glColor3f'''('''1,0,0''')'''; <font color="#000080">''//Kein Effekt''</font>
   glVertex3f<b>(</b> 0.0, 1.0, 0.0 <b>)</b>;
+
   glVertex3f'''(''' 0.0, 1.0, 0.0 ''')''';
   glColor3f<b>(</b>0,1,0<b>)</b>; <font color="#000080"><i>//Kein Effekt</i></font>
+
   glColor3f'''('''0,1,0''')'''; <font color="#000080">''//Kein Effekt''</font>
   glVertex3f<b>(</b> 1.0, -1.0, 0.0 <b>)</b>;
+
   glVertex3f'''(''' 1.0, -1.0, 0.0 ''')''';
   glColor3f<b>(</b>0,0,1<b>)</b>;
+
   glColor3f'''('''0,0,1''')''';
   glVertex3f<b>(</b> -1.0, -1.0, 0.0 <b>)</b>;  <font color="#000080"><i>//i=1 -> 1*3=Vetex Nr 3 gibt die Frabe an</i></font>
+
   glVertex3f'''(''' -1.0, -1.0, 0.0 ''')''';  <font color="#000080">''//i=1 -> 1*3=Vetex Nr 3 gibt die Frabe an''</font>
   <font color="#000080"><i>//-> dieses Dreick wird Blau (0,0,1)</i></font>
+
   <font color="#000080">''//-> dieses Dreick wird Blau (0,0,1)''</font>
 
  <br />
 
  <br />
   <font color="#000080"><i>//Beginn des zweiten Dreiecks -> i=2</i></font>
+
   <font color="#000080">''//Beginn des zweiten Dreiecks -> i=2''</font>
   glColor3f<b>(</b>1,0,0<b>)</b>; <font color="#000080"><i>//Kein Effekt</i></font>
+
   glColor3f'''('''1,0,0''')'''; <font color="#000080">''//Kein Effekt''</font>
   glVertex3f<b>(</b> 3.0, 1.0, 0.0 <b>)</b>;
+
   glVertex3f'''(''' 3.0, 1.0, 0.0 ''')''';
   glColor3f<b>(</b>0,1,0<b>)</b>; <font color="#000080"><i>//Kein Effekt</i></font>
+
   glColor3f'''('''0,1,0''')'''; <font color="#000080">''//Kein Effekt''</font>
   glVertex3f<b>(</b> 4.0, -1.0, 0.0 <b>)</b>;
+
   glVertex3f'''(''' 4.0, -1.0, 0.0 ''')''';
   glColor3f<b>(</b>1,1,0<b>)</b>;
+
   glColor3f'''('''1,1,0''')''';
   glVertex3f<b>(</b> 2.0, -1.0, 0.0 <b>)</b>; <font color="#000080"><i>//i=2 -> 2*3=Vetex Nr 6 gibt die Farbe an</i></font>
+
   glVertex3f'''(''' 2.0, -1.0, 0.0 ''')'''; <font color="#000080">''//i=2 -> 2*3=Vetex Nr 6 gibt die Farbe an''</font>
   <font color="#000080"><i>//-> Dieses Dreieck wird Gelb (1,1,0)</i></font>
+
   <font color="#000080">''//-> Dieses Dreieck wird Gelb (1,1,0)''</font>
 
  glEnd;
 
  glEnd;
  
 
==== Polygon mit unbestimmter Anzahl an Eckpunkten ====
 
==== Polygon mit unbestimmter Anzahl an Eckpunkten ====
  glShadeModel<b>(</b>GL_FLAT<b>)</b>;
+
  glShadeModel'''('''GL_FLAT''')''';
  <font color="#000080"><i>// Zeichne Dreiecke</i></font>
+
  <font color="#000080">''// Zeichne Dreiecke''</font>
  glBegin<b>(</b> GL_POLYGON <b>)</b>;
+
  glBegin'''(''' GL_POLYGON ''')''';
   glColor3f<b>(</b>1,0,0<b>)</b>; glVertex3f<b>(</b> 0.0, 0.0, 0.0 <b>)</b>; <font color="#000080"><i>// Vertex Nr 1</i></font>
+
   glColor3f'''('''1,0,0''')'''; glVertex3f'''(''' 0.0, 0.0, 0.0 ''')'''; <font color="#000080">''// Vertex Nr 1''</font>
   <font color="#000080"><i>// Ab hier ist die Farbe des Polygons schon festgelegt (Rot)</i></font>
+
   <font color="#000080">''// Ab hier ist die Farbe des Polygons schon festgelegt (Rot)''</font>
   glColor3f<b>(</b>0,1,0<b>)</b>; glVertex3f<b>(</b> 0.0, 1.0, 0.0 <b>)</b>;
+
   glColor3f'''('''0,1,0''')'''; glVertex3f'''(''' 0.0, 1.0, 0.0 ''')''';
   glColor3f<b>(</b>1,1,0<b>)</b>; glVertex3f<b>(</b> 0.5, 1.5, 0.0 <b>)</b>;
+
   glColor3f'''('''1,1,0''')'''; glVertex3f'''(''' 0.5, 1.5, 0.0 ''')''';
   glColor3f<b>(</b>1,0,1<b>)</b>; glVertex3f<b>(</b> 1.0, 1.0, 0.0 <b>)</b>;
+
   glColor3f'''('''1,0,1''')'''; glVertex3f'''(''' 1.0, 1.0, 0.0 ''')''';
   glColor3f<b>(</b>0,1,0<b>)</b>; glVertex3f<b>(</b> 1.0, 0.0, 0.0 <b>)</b>;
+
   glColor3f'''('''0,1,0''')'''; glVertex3f'''(''' 1.0, 0.0, 0.0 ''')''';
 
  glEnd;
 
  glEnd;
  

Version vom 3. Dezember 2005, 18:12 Uhr

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.


Primitive können entweder mittels Flat- oder Smoothshading gefärbt werden. Der Vorgabewert GL_SMOOTH 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 Flat Shading legt ein Eckpunkt die Farbe des Polygons fest. Welcher Vertex das ist, kann der Tabelle entnommen werden. Für gewöhnlich ist dies der letzte Vertex eines Polygons oder Lineabschnittes. Die Ausnahme hierbei bilden einzelne Polygone, bei denen der erste Vertex die Farbe bestimmt. Flat Shading ist im allgemeinen schneller als Smooth Shading, da hierbei keine Farbinterpolation berechnet werden muss.

Die Farbe eines Eckpunktes ist bei deaktiverter Beleuchtung nur von glColor, bei aktivierter Beleuchtung zusätzlich noch von der Lichtberechnung abhängig.

glBegin Parameter farbbestimmender Vertex
für Polygon/Punkt/Linie i
GL_POLYGON 1
GL_POINTS i
GL_LINES 2i
GL_LINE_STRIP i + 1
GL_LINE_LOOP i + 1 ; letzte Linie: 1
GL_TRIANGLES 3i
GL_TRIANGLE_STRIP i + 2
GL_TRIANGLE_FAN i + 2
GL_QUADS 4i
GL_QUAD_STRIP 2i + 2

Beispiel

Farbfestlegung bei GL_FLAT

Dreiecke

glShadeModel(GL_FLAT);
// Zeichne Dreiecke
glBegin( GL_TRIANGLES );
  //Beginn des ersten Dreiecks -> i=1
  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)

//Beginn des zweiten Dreiecks -> i=2 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 vs. GL_SMOOTH

Smooth Shading (GL_SMOOTH)
glShadeModel(GL_SMOOTH); 
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;
Datei:glShadeModel SMOOTH.jpg
Flat Shading (GL_FLAT)
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;
Datei:glShadeModel FLAT.jpg

Fehlermeldungen

GL_INVALID_ENUM wird generiert, wenn ein anderer Wert als GL_FLAT oder GL_SMOOTH übergeben wurde.
GL_INVALID_OPERATION wird generiert, wenn glShadeModel zwischen glBegin und glEnd aufgerufen wird.

Zugehörige Wertrückgaben

glGet mit dem Parameter GL_SHADE_MODEL.

Siehe auch

glColor, glLight, glLightModel, glBegin