PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Triangle Strip Indices für Terrain erstellen


Corrail
2005-04-20, 00:54:39
Hallo!

Ich habe folgendes Problem: Ich will aus einer Hightmap ein Terrain erstellen. Soweit so gut, die Vertices und Texturkoordinaten berechnen ist kein Problem. Nur würd ich das Terrain gern wegen Performance in einem Triangle Strip rendern. Dafür brauch ich aber die Indices.
eine Reihe ist ja kein Problem:

die folgende Skizze soll ein eine Reihe repräsentieren. Die nummern sind die Vertices die nach der Reihe nach gerendert werden.
1 3 5 7
2 4 6 8

Meine Indices sind dann trivialer Weise: 1, 2, 3, 4, 5, 6, 7, 8, ...

Ein Problem hab ich allerdings, wenn ich zur zweiten Reihe komme. Und zwar bei der Orientierung der Dreiecke. Bei Triangle Strips ändert sich die Orientierung ja bei jedem zusaätzlich Dreieck.

wenn ich angenommen bei dem obrigen Beispiel fortsetzen will und eine neue Reihe (unten) anhängen will:

01 03 05 07
02 04 06 08
12 11 10 09

Die letzte Linie beim vorigen Beispiel wäre dann 7-8
ich hab mir überlegt jetzt 2 pseudo Dreieck hinzu zufügen. Also mit den Eckpuntken 7,8,8 und 8,8,6. Und dann einfach mit 8,6,9 weitermachen. das sollte dann gleich Orientiert sein wie das Dreieck 6,7,8 udn da ich 2 (Pseudo-)Dreiecke eingeschoben habe sollte es dann wieder passen.
Die Indices für das wären dann: 1, 2, 3, 4, 5, 6, 7, 8, 8, 6, 9, 10, ...

Stimmt das soweit? Gibt es eine andere (bessere) Möglichkeit das zu machen?

ScottManDeath
2005-04-20, 03:43:56
Die Pseudodreiecke werden üblicherweise als degenerierte Dreiecke bezeichnet, da Fläche == 0.

Ich habe das so gemacht:

nach rechts,dann umschalten,dann nach links

1,2,3,4,5,6,7,8,9,6,10,4,11,2,12

Man braucht dabei nur ein degeneriertes Dreieck (7,8,9)

Günstiger für den GPU cache der transformierten Vertices wäre eine mäandrierende Reihenfolge, bei der zuerst alle Vertices die nahe beieinander liegen genommen werden.

Hast Du Dir schon mal einen TriStripper wie z.B. nvTristrip angesehen. Diese nutzen im Allgemeinen auch den GPU Cache optimal aus.

Corrail
2005-04-20, 22:58:10
Ah, sehr gut, danke dir!

ScottManDeath
2005-04-23, 00:46:21
jetzt ist es mir wieder eingefallen, Hilbert kurven sind flächenfüllende Kurven, sie mäandrieren sich durch die Fläche und haben dabei eine hohe Lokalität, sind damit günstig für den Post T&L cache.

Dies machen etwas ähnliches:
http://www.cs.technion.ac.il/~gotsman/AmendedPubl/UniversalRender/UniversalRender.pdf