2012-11-17 12 views
8

Ich habe Schwierigkeiten zu verstehen, die Bedeutung des ersten Parameters in glPolygonOffset Funktion.Bedeutung und Verwendung des Faktors Parameter in glPolygonOffset

void glPolygonOffset(GLfloat factor, GLfloat units); 

The official documentation sagt, dass Faktor

einen Skalierungsfaktor angibt, die für jedes Polygon eine variable Tiefe zu erzeugen Offset verwendet wird.

und dass

jedes Tiefe Wert Fragment versetzt werden, nachdem es von den Tiefenwerten der entsprechenden Eckpunkten interpoliert wird. Der Wert des Offsets ist Faktor × DZ + r × Einheiten, wobei DZ ein Maß für die Änderung der Tiefe relativ zum Bildschirmbereich des Polygons ist und r der kleinste Wert ist, der garantiert einen auflösbaren Offset für einen gegebenen Wert liefert Implementierung.

Ich verstehe was r und unit sind. Was ich nicht verstehe, ist DZ, dh was ist gemeint mit der "Messung der Änderung der Tiefe Wert auf den Bildschirmbereich des Polygons" und warum würde ich jemals Faktor auf etwas anderes als 0 setzen müssen.

Wenn ich möchte, dass mein Drahtgitter versetzt ist, muss ich nur ein paar Einheiten zum Tiefenwert hinzufügen/substatieren, nicht wahr? Was ist das Sinn-, Zweck- und Verwendungsbeispiel des Faktors (und der im Dokument erwähnten DZ)?

Antwort

8

Ich muss hier einige Ignoranz zugeben, aber ich fand this article, die es erklärt. Sie sagen:

Um ein schönes Rendering des hervorgehobenen festen Objekts ohne visuelle Artefakte zu erzielen, können Sie entweder ein positives Offset zum festen Objekt hinzufügen (von Ihnen wegschieben) oder einen negativen Offset zum Drahtgitter (ziehen es dir gegenüber). Die große Frage ist: "Wie viel Offset ist genug?" Leider hängt der erforderliche Versatz von verschiedenen Faktoren ab, einschließlich der Tiefensteigung jedes Polygons und der Breite der Linien im Drahtmodell.

Sie erklären dann die Tiefe Neigung auf diese Weise:

Die Tiefe Steigung ist die Veränderung in Z (Tiefe) Werte, die durch die Änderung unterteilt in entweder x oder y-Koordinaten, wie sie ein Polygon durchlaufen. Die Tiefenwerte sind in Fensterkoordinaten, fest im Bereich [0, 1]. Verwenden Sie diese Formel, um die maximale Tiefensteigung eines Polygons (m in der Offset-Gleichung) zu schätzen: m = max {| delV/delS |, | delV/delT |}. (Wobei del ist eine partielle Ableitung)

So schließen sie, daß:

für Polygone, die parallel zu den Nah- und Fernabschneideebenen, die Tiefe Steigung Null ist. [...] Für Polygone, die in einem großen Winkel zu den Clipping-Ebenen stehen, kann die Tiefensteigung signifikant größer als Null sein, und ein größerer Offset kann erforderlich sein. Kleine, von null verschiedene Werte für Faktor wie 0,75 oder 1,0 reichen wahrscheinlich aus, um unterschiedliche Tiefenwerte zu erzeugen und die unangenehmen visuellen Artefakte zu eliminieren.