2010-10-03 1 views
5

Ich habe einen Satz koplanarer, verbundener Dreiecke, d. H. Ein 2D-Mesh. Jetzt muss ich ein paar Einheiten in der Z-Achse extrudieren. Das Netz wird durch eine Gruppe von Vertices definiert, die der Renderer durch Abgleich mit einem Array von Dreiecken sinnvoll findet.So extrudieren Sie ein flaches 2D-Mesh und geben ihm Tiefe

Beispiel Mesh:

Vertices: (0,0,0), (10,0,0), (10,10,0), (0,10,0) < - (x, y, z) Dreiecke: (1, 2, 3) & (3, 4, 1) < - Zahlen beziehen sich hier auf die Position eines oberen Eckpunkts.

Also hier haben wir ein 2D-Quadrat. Jetzt muss ich mehr Punkte und Dreiecke zu dieser Liste hinzufügen, um eine extrudierte Form zu erhalten. Dreiecke müssen im Uhrzeigersinn sein, ansonsten sind sie rückseitig gesägt.

Gibt es dafür einen einfachen Algorithmus? Vielen Dank.

Antwort

10

Angenommen, Sie um einen Abstand z extrudieren wollen, müssen Sie die folgenden Schritte ausführen:

0) n sei die ursprüngliche Anzahl der Ecken (4 in Ihrem Beispiel)

1) Für jede Ecke Fügen Sie in Ihrem Vertex-Array (0,0, z) hinzu und fügen Sie das Ergebnis zu Ihrem Vertex-Array für insgesamt 2 * n Vertices hinzu. Für Ihr Beispiel werden Sie die Scheitelpunkte (0,0, z), (10,0, z), (10,10, z), (0,10, z) zu Ihrem Vertex-Array für eine Summe hinzufügen von 2 * 4 = 8 Ecken.

2) Erstellen Sie eine Liste von Grenzkanten (im Gegensatz zu internen) für Ihr ursprüngliches Netz. Erstellen Sie dazu eine Liste aller Dreieckskanten (3 Kanten, die im Uhrzeigersinn für jedes Dreieck verlaufen). Dann entfernen Sie Paare von gleichen, aber gegenüberliegenden Kanten (das sind die inneren Kanten). In diesem Beispiel beginnen Sie mit 6 Kanten und enden mit 4 Kanten, nachdem Sie die Kantenpaare (3,1) und (1,3) entfernt haben.

3) Erstellen Sie für jedes Dreieck (a, b, c) in Ihrer Dreiecksliste ein entsprechendes Dreieck (a + n, b + n, c + n). Dies sind die extrudierten Flächen

4) Schließlich möchten Sie die Seiten Ihrer extrudierten Form erstellen. Fügen Sie für jede Kante (a, b) in der in Schritt 2 erstellten Boundary-Edge-Liste die Dreiecke (a, b, b + n) und (b + n, a + n, a) hinzu:

Das war's. Nehmen Sie keine Tippfehler meinerseits und keine Tippfehler von Ihrer Seite, sollten Sie jetzt Ihr gewünschtes Mesh haben.

+0

Worauf bezieht sich n in dieser Antwort? – Skylion

+0

Oh wait is n Schritt 3 und 3 das gleiche n wie in einem? – Skylion

+0

@Skyion - n ist überall gleich, d. H. Die ursprüngliche Anzahl von Scheitelpunkten. – brainjam

Verwandte Themen