Backface Culling: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
()
K (Sprache verbessert, Layout vereinheitlicht)
 
(5 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
{{Bildwunsch|Ein Würfel bei dem nur die Innenseiten gezeichnet werden und die Außenseiten gecullt sind. Am besten hübsch mit Beleuchtung damit der Räumliche Eindruck gut rüber kommt.}}
 
= Backface Culling =
 
= Backface Culling =
 
<br>
 
 
== Was ist das? ==
 
== Was ist das? ==
''Backface Culling'' ist eine Technik mit der man gezielt Polygone bzw. deren Seiten vom Zeichnen ausschließt.
+
''Backface Culling'' ist eine Technik, mit der man gezielt Polygone bzw. deren Seiten vom Zeichnen ausschließt.
  
<br>
 
 
== Vorbetrachtung ==
 
== Vorbetrachtung ==
Wie man sich leicht vorstellen kann, ist die Geschwindigkeit beim Rendern zu einem großen Teil von der Anzahl der zu Zeichnenden Flächen ab. <br>
+
Wie man sich leicht vorstellen kann, hängt die Geschwindigkeit beim Rendern zu einem großen Teil von der Anzahl der zu zeichnenden Flächen ab.<br>
Je mehr Flächen gezeichnet werden müssen desto länger dauert der Zeichenvorgang. <br>
+
Je mehr Flächen gezeichnet werden müssen, desto länger dauert der Zeichenvorgang.<br>
Es ist deshalb naheliegend einfach den Zeichenvorgang dadurch zu beschleunigen, dass man Flächen, die eh keiner sieht, nicht zeichnet.
+
Es ist deshalb naheliegend einfach, den Zeichenvorgang dadurch zu beschleunigen, dass man Flächen, die eh keiner sieht, nicht zu zeichnen.
  
<br>
+
== Wie gehe ich vor? ==
 +
# Backfaceculling einschalten (''glEnable(GL_CULL_FACE)'')
 +
# zeichnen der Polygone
 +
Durch diese Einstellungen werden nun alle Seiten, deren Eckpunkte (aus Betrachtersicht) im Uhrzeigersinn übergeben wurden, nicht(!) gezeichnet und alle Seiten, deren Eckpunkte entgegen dem Uhrzeigersinn übergeben wurden, werden gezeichnet.<br>
  
== Wie geh ich vor? ==
+
Das war's!? - Eigentlich schon.<br>
 +
Allerdings gibt es da noch ein paar Funktionen, die ihr im Zusammenhang mit Backfaceculling anschauen solltet.
  
# Backfaceculling einschalten (''glEnable(GL_CULL_FACE)'') <br>
+
== Wieso wird gerade die Seite entfernt? ==
# zeichnen der Polygone <br>
+
Ganz einfach. Wie der Name schon sagt, werden die Rückseiten der Polygone nicht gezeichnet. Standardmäßig gehören die Polygone zur Rückseite, deren Eckpunkte in Uhrzeigerrichtung übergeben wurden. Das kann man natürlich auch ändern. Und zwar mit [[glFrontFace]].<br><br>
 
+
Durch diese Einstellungen werden nun alle Seiten deren Eckpunkte im Uhrzeigersinn übergeben wurden nicht(!) gezeichnet und alle Seiten deren Eckpunkte entgegen dem Uhrzeigersinn übergeben wurden werden gezeichnet. <br>
+
'''Aber wieso sollte ich die Rückseiten nicht sehen wollen?'''
 
 
Das wars!? - Eigentlich schon.  <br>
 
Allerdings gibt es da noch ein paar Funktionen die ihr im Zusammenhang mit Backfaceculling anschauen solltet.
 
  
<br>
+
Am Anfang arbeiten viele noch mit einzelnen Polygonen. Wenn man ein Polygon herumdreht (z.B. durch [[glRotate]]), dann sieht man die Rückseite. Später werden Polygone aber benutzt, um komplexe Körper zu konstruieren. Nehmen wir z.B. eine Kugel, dann kann man nur die Außenseite sehen. Es wäre also völlig sinnlos, die Rückseiten der Polygone (welche nach innen zeigen) auch zu rendern, da sie im nächsten Moment von den Vorderseiten verdeckt werden würden.
  
== Wieso wird gerade die Seite entfernt? ==
+
Solange man also einzelne Polygone benutzt, macht Backface Culling meistens keinen Sinn. Sobald aber die Polygone zu Körpern zusammengesetzt werden, ist Backface Culling eine sehr einfache Methode den Rendervorgang zu beschleunigen.
  
Ganz einfach. Wie der Name schon sagt werden die Rückseiten der Polygone nicht gezeichnet. Standardmäßig gehören die Polygone zur Rückseite, deren Eckpunkte in Uhrzeigerrichtung übergeben wurden. Das kann man natürlich auch ändern. Und zwar mit [[glFrontFace]].
 
 
<br>
 
 
== Mathematischer Hintergrund ==
 
== Mathematischer Hintergrund ==
Mathematisch kann man Backface Culling wie folgt betrachten: <br>
+
Mathematisch kann man Backface Culling so betrachten, dass Flächen entfernt werden, deren Normalenvektoren vom Betrachter weg zeigen.  
Es werden die Flächen entfernt, deren Normalenvektoren vom Betrachter weg zeigen. <br>
+
Dazu wird das Skalarprodukt zwischen Oberflächennormale und Verbindungsvektor von irgendeinem Punkt der Fläche zum Projektionszentum (P<sub>cop</sub>; cop: center of projection) bestimmt.
Dazu wird das Skalarprodukt zwischen Oberflächennormale und Verbindungsvektor von irgendeinem Punkt der Fläche zum Projektionszentum (Pcop;cop: center of projection) bestimmt. <br> <br>
 
  
N*Pcop=|N|*|Pcop|*cos alpha <br>
+
N*P<sub>cop</sub>=|N|*|P<sub>cop</sub>|*cos ''alpha''
Fallunterscheidung: <br>
 
Wenn cos alpha>=0    =>Fläche ist sichtbar und wird gezeichnet <br>
 
Wenn cos alpha<0    =>Fläche wird nicht gezeichnet <br>
 
  
Die Länge von N,Pcop wird mithilfe einer Normierung auf 1 gesetzt. <br>
+
'''Fallunterscheidung:'''
=> N*Pcop=cos alpha <br>
+
{|
 +
| Wenn cos ''alpha'' >= 0    || Fläche ist sichtbar und wird gezeichnet
 +
|-
 +
| Wenn cos ''alpha'' < 0    || Fläche wird nicht gezeichnet
 +
|}
  
Probleme treten bei komplexen Objekten und Objekten, die sich verdecken auf. <br>
+
Die Länge von N,P<sub>cop</sub> wird mit Hilfe einer Normierung auf 1 gesetzt. => N*P<sub>cop</sub>=cos ''alpha''
Backface Culling ist jedoch sicherlich als Vorbearbeitungschritt geegnet. <br>
 
  
 +
Probleme treten bei komplexen Objekten und Objekten, die sich verdecken auf. Backface Culling ist jedoch als Vorbearbeitungsschritt geeignet.
  
 
== Siehe auch ==
 
== Siehe auch ==
[[glFrontFace]], [[glCullFace]]
+
[[glFrontFace]], [[glCullFace]]<br>
 
 
 
[[Frustum Culling]]
 
[[Frustum Culling]]

Aktuelle Version vom 22. Januar 2014, 20:13 Uhr

Hinweis: Diesem Artikel sollten folgende Bilder beigefügt werden:

(Mehr Informationen/weitere Artikel)
Bildwunsch.jpg
Ein Würfel bei dem nur die Innenseiten gezeichnet werden und die Außenseiten gecullt sind. Am besten hübsch mit Beleuchtung damit der Räumliche Eindruck gut rüber kommt.

Backface Culling

Was ist das?

Backface Culling ist eine Technik, mit der man gezielt Polygone bzw. deren Seiten vom Zeichnen ausschließt.

Vorbetrachtung

Wie man sich leicht vorstellen kann, hängt die Geschwindigkeit beim Rendern zu einem großen Teil von der Anzahl der zu zeichnenden Flächen ab.
Je mehr Flächen gezeichnet werden müssen, desto länger dauert der Zeichenvorgang.
Es ist deshalb naheliegend einfach, den Zeichenvorgang dadurch zu beschleunigen, dass man Flächen, die eh keiner sieht, nicht zu zeichnen.

Wie gehe ich vor?

  1. Backfaceculling einschalten (glEnable(GL_CULL_FACE))
  2. zeichnen der Polygone

Durch diese Einstellungen werden nun alle Seiten, deren Eckpunkte (aus Betrachtersicht) im Uhrzeigersinn übergeben wurden, nicht(!) gezeichnet und alle Seiten, deren Eckpunkte entgegen dem Uhrzeigersinn übergeben wurden, werden gezeichnet.

Das war's!? - Eigentlich schon.
Allerdings gibt es da noch ein paar Funktionen, die ihr im Zusammenhang mit Backfaceculling anschauen solltet.

Wieso wird gerade die Seite entfernt?

Ganz einfach. Wie der Name schon sagt, werden die Rückseiten der Polygone nicht gezeichnet. Standardmäßig gehören die Polygone zur Rückseite, deren Eckpunkte in Uhrzeigerrichtung übergeben wurden. Das kann man natürlich auch ändern. Und zwar mit glFrontFace.

Aber wieso sollte ich die Rückseiten nicht sehen wollen?

Am Anfang arbeiten viele noch mit einzelnen Polygonen. Wenn man ein Polygon herumdreht (z.B. durch glRotate), dann sieht man die Rückseite. Später werden Polygone aber benutzt, um komplexe Körper zu konstruieren. Nehmen wir z.B. eine Kugel, dann kann man nur die Außenseite sehen. Es wäre also völlig sinnlos, die Rückseiten der Polygone (welche nach innen zeigen) auch zu rendern, da sie im nächsten Moment von den Vorderseiten verdeckt werden würden.

Solange man also einzelne Polygone benutzt, macht Backface Culling meistens keinen Sinn. Sobald aber die Polygone zu Körpern zusammengesetzt werden, ist Backface Culling eine sehr einfache Methode den Rendervorgang zu beschleunigen.

Mathematischer Hintergrund

Mathematisch kann man Backface Culling so betrachten, dass Flächen entfernt werden, deren Normalenvektoren vom Betrachter weg zeigen. Dazu wird das Skalarprodukt zwischen Oberflächennormale und Verbindungsvektor von irgendeinem Punkt der Fläche zum Projektionszentum (Pcop; cop: center of projection) bestimmt.

N*Pcop=|N|*|Pcop|*cos alpha

Fallunterscheidung:

Wenn cos alpha >= 0 Fläche ist sichtbar und wird gezeichnet
Wenn cos alpha < 0 Fläche wird nicht gezeichnet

Die Länge von N,Pcop wird mit Hilfe einer Normierung auf 1 gesetzt. => N*Pcop=cos alpha

Probleme treten bei komplexen Objekten und Objekten, die sich verdecken auf. Backface Culling ist jedoch als Vorbearbeitungsschritt geeignet.

Siehe auch

glFrontFace, glCullFace
Frustum Culling