Backface Culling
Was ist Backface-Culling?
Culling-Verfahren dienen zur Auslese, es sind Selektionsverfahren. Beim Backface-Culling geht es darum, die Rückseiten von Polygonen vom Zeichnen auszuschließen, um Rechenzeit zu sparen. Dazu muss das Culling mit glEnable (GL_CULL_FACE) aktiviert werden. Umgekehrt wird mit glDisable (GL_CULL_FACE) OpenGl angewiesen, im folgenden die Rückseiten wieder zu zeichnen.
Vorder- und Rückseite von Polygonen
Jedes Polygon hat eine eindeutig festgelegte Vorder- und Rückseite, unabhängig vom Standort des Betrachters. Wenn man mit der Kamera um ein Polygon herumfährt, um es von der Rückseite zu betrachten, wird es bei aktiviertem Backface-Culling auf einmal unsichtbar.
Es gibt zwei Merkmale zur Unterscheidung der beiden Seiten:
- Reihenfolge der Vertices. Die Seite, bei der die Vertices entgegen dem Uhrzeigersinn zum Zeichnen übergeben werden, ist die Vorderseite.
- Richtung der Normalen. Die Normale eines Polygons steht immer auf der Vorderseite. Kann der Betrachter das Polygon sehen, zeigt die Normale in seine Richtung.

Beide Merkmale hängen jedoch voneinander ab und basieren auf einem gemeinsamen Zusammenhang. Das Vektorprodukt, mit dem die Normale berechnet wird, ist nicht kommutativ. Vertauscht man die Reihenfolge der beiden Vektoren, aus denen das Vektorprodukt berechnet wird, so zeigt der resultierende Vektor genau in die andere Richtung. Um die Normale auf die Vorderseite zu setzen, müssen die Vektoren entgegen dem Uhrzeigersinn angegeben werden.
Anwendungsmöglichkeiten
Dass Backface-Culling zum Performancegewinn eingesetzt wird, wurde eingangs bereits erwähnt. Damit keine störenden Löcher in der Szenerie entstehen, ist Backface-Culling nur sinnvoll, wenn der Blick auf die Rückseiten von Polygonen nicht möglich ist. Das ist vor allem bei geschlossenen Objekten der Fall, die lückenlos von Polygonen begrenzt werden. Ebenso bilden die Dreiecke des Terrains in der Regel eine geschlossene Polygondecke.
In der Entwicklungsphase eines Progamms sollte Backface-Culling nach Möglichkeit aktiviert sein. Damit merkt man sofort, wenn bei der Übergabe der Vertices die Reihenfolge nicht stimmt.
Variationen
Das bisher beschriebene Verhalten ist das Default-Verhalten von OpenGL. Durch entsprechende Einstellungen lässt sich das Verhalten ändern und anpassen.
Anderung der Vertexreihenfolge:
- glFrontFace (GL_CW). Vorderseite wird durch Eingabe im Uhrzeigersinn definiert (cw = clockwise).
- glFrontFace (GL_CCW). Default: Vorderseite wird durch Eingabe entgegen dem Uhrzeigersinn definiert (counter clockwise).
Frontface- oder Backface-Culling:
- glCullFace (GL_FRONT). Schließt Vorderseite vom Zeichen aus.
- glCullFace (GL_BACK). Default: Schließt Rückseite vom Zeichnen aus.