2010-12-16 6 views
3

In OpenGL können Sie nur rückwärts gerichtete Polygone zeichnen, nur Polygone auf der Vorderseite oder beides. Wenn Sie ein Mehrfachdreiecknetz rendern, löschen Sie den Rahmenpuffer, nicht aber den Tiefenpuffer, und rendern Sie dann nur die nach hinten gerichteten Polygone. Was erwarten Sie zu sehen?Rückseitige Polygone in opengl

Ich denke, die folgende Antwort, die mir gegeben ist falsch:

Sie sollten die Rückseite nach Dreiecke sehen. Der erste Render-Durchlauf wird ergeben, wobei der Tiefenpuffer die Tiefenwerte der Dreiecke aufweist, die gegenüberliegen. Der zweite Render-Durchlauf Sie Rendern die Rückseite Dreiecke, also diejenigen, die die größten Tiefenwert haben. Jedes Dreieck , das gerastert ist, hat seine Tiefe Wert im Vergleich zur aktuellen Tiefe Wert für dieses Pixel. Da die Tiefe Puffer für alle am nächsten Tiefe Werte (kleine Werte) gesetzt ist, aber ist auf der hintersten Tiefe Scheidungs ​​ Werte (hohe Werte) der Rücken Dreiecke mit Blick auf gerendert wird.“

Aber ich denke, die Antwort ist:

Da der Tiefenpuffer nicht gelöscht wird, und immer noch die Tiefenwerte der vorderen enthält Dreiecke zugewandt ist, wäre es die Rückseite gerichteten Dreiecke, und nichts angezeigt

werfen.

Welche Antwort ist richtig?

Antwort

0

Ich denke, der zweite Absatz ist falsch.

Stellen Sie sich ein Moebiusband vor, das eine geschlossene Mannigfaltigkeit ist. Sie können deutlich nach hinten zeigende Dreiecke (in Weiß, Vorderseiten sind in Schwarz) sehen, die näher am Auge sind. Im zweiten Durchlauf werden sie den Tiefen Test bestehen und wiedergegeben werden:

alt text

+0

Wenn Ihr Objekt ein einseitiges Netz ist (dh Sie stellen nur ein Dreieck für jeweils drei Eckpunkte zur Verfügung und sie werden nur einmal mit einer einzigen Normalen dargestellt), werden die nach hinten zeigenden Dreiecke so wiedergegeben, wie Sie es sagen Objekt ist keine Mannigfaltigkeit (es wird einen Punkt geben müssen, an dem die Normalen "kippen". Wenn Sie es doppelseitig rendern, dann gibt es an jedem Pixel ein nach vorne und nach hinten gerichtetes Dreieck mit der gleichen Tiefe und die Rückseiten werden nur im zweiten Durchgang gerendert, wenn die Tiefenfunktionen GL_LEQUAL, GL_EQUAL, GL_GEQUAL oder GL_ALWAYS sind. –

1

Es hängt davon ab! Angenommen, das Netz ist ein Objekt, das eine 2-dimensionale Mannigfaltigkeit ist (dh topologisch äquivalent zu einer Ebene über ausreichend kleinen Flächen um einen beliebigen Punkt auf der Oberfläche) und der erste Durchgang die nach vorne und nach hinten gerichteten Dreiecke oder nur nach vorne gerichtete Dreiecke darstellt und die Tiefenfunktion ist GL_LESS oder GL_LEQUAL, dann ist der zweite Absatz richtig, da die nach vorne zeigenden Dreiecke immer vor den nach hinten weisenden Dreiecken liegen und daher immer zum Versagen des Tiefentests führen.

Natürlich, wenn Sie GL_GREATER oder GL_GEQUAL als Ihre Tiefenfunktion verwenden, ist das Gegenteil der Fall, so dass der erste Absatz korrekt ist.