9 Nebel und Blending

Jede Farbe besteht in OpenGL nicht nur aus R-,G- und B- Werten, sondern auch aus einem A ( Alpha ) - Wert. Dieser A-Wert bestimmt prinzipiell den Grad der Transparenz ( 0..vollständig transparent - 255..undurchsichtig ), er kann aber auch für Maskierungen herhalten.

9.1 Transparenz

A-Werte können Eckpunkten im Zuge der glColor- Befehle gesetzt werden. Erhalten Eckpunkte in einen Polygon unter-schiedliche Alpha-Werte, so werden die Zwischenpunkte interpoliert.

Zusätzlich kann jeder Texel in einer Textur mit Alpha-Werten versehen werden. Im Gegensatz zu RGB-Images enthalten RGBA-Images ein Byte pro Pixel mehr.
Wird ein texturiertes Polygon gezeichnet, so werden die interpolierten Alpha-Werte mit den Werten des entsprechenden Texels multipliziert.

Bsp.
glEnable ( GL_BLEND );
glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

glBegin(GL_TRIANGLES);	// rotes, nicht-transparentes Dreieck
  glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
  glVertex2f(100.0f, 50.0f);
  glVertex2f(450.0f, 400.0f);
  glVertex2f(450.0f, 50.0f);	// blaues, halb-transparentes Dreieck
  glColor4f(0.0f, 0.0f, 1.0f, 0.5f);
  glVertex2f(100.0f, 400.0f);
  glVertex2f(450.0f, 400.0f);
  glVertex2f(450.0f, 50.0f);
glEnd();

Die Art und Weise, wie transparenter Bildpunkt mit dem Hintergrund verknüpft wird, läßt sich auf folgende Weise fest-legen:

glBlendFunc  ( sourceFactor, DestinationFactor )
definiert in welcher Art und Weise Source ( Polygon ) mit Destina-tion ( Hintergrund ) verknüpft werden.

9.2 Nebel

Ein Element, das wesentlich zur Atmosphäre einer Szene beiträgt, ist Nebel (= Depthcueing).

OpenGL ermöglicht die Nutzung auf eine einfache Art und Weise. Prinzipiell gibt es zwei Methoden, Nebel zu berech-nen: Entweder man berechnet den Nebeleinfluß für jeden Bildpunkt oder man berechnet den Einfluß für jede Vertex und interpoliert dann, genau wie die Farbe, dazwischen. Die per Pixel Methode ist natürlich langsamer, biete jedoch ein rich-tiges Ergebnis, während bei der zweiten Methode zum Teil sehr störende Fehler auftreten können.

Ausgewählt wird die Methode mittels glHint ( GL_FOG_HINT, GL_NICEST ) für die Berechnung pro Bildpunkt, bzw. glHint ( GL_FOG_HINT, GL_FASTEST ) für die schnellere Methode. glHint ( GL_FOG_HINT, GL_DONT_CARE ) wählt die Methode, die von der Hardware am besten unterstützt wird.

Mit glFog() können weitere Nebeleinstellungen, wie z.B. die Nebelfarbe, Nebelintensität oder die Nebelgleichung, ge-troffen werden.