Ich habe eine Liste von Scheitelpunktkoordinaten, die mehrere 2D-Bereiche umfassen. Nur orthogonale Linien, aber nicht unbedingt konvexe Bereiche ... ähnlich wie Leiterplattenspuren von leitenden Kupferbereichen. Ich möchte sie mit OpenGL wie feste Objekte in 3D zeichnen, aber ich bin noch sehr neu in 3D und habe Probleme.
Bitte zeigen Sie mir, wie das geht. Ich habe es geschafft, den Umriss nur mit zu zeichnen GL_LINE_STRIP
, aber wenn ich es versuche GL_QUAD_STRIP
oder GL_TRIANGLE_STRIP
, ist die Liste der Koordinaten für Dreiecksstreifen nicht richtig geordnet, und die Tatsache, dass die Bereiche nicht konvex sind, hindert mich daran, eine einfache dreieckige Tessellation durchzuführen.
Dies sind die 2D-Formen:
Ich möchte sie so rendern:
Antworten:
Es gibt drei Teile, um dies zu lösen;
Tessellieren der konkaven Polygone in Dreiecke (opengl kann keine konkaven Polys zeichnen). Dies wird die "obere" Oberfläche sein
Wenn Sie den Satz von Dreiecken entlang eines geeigneten Vektors verschieben (extrudieren), wird dies zur "unteren" Oberfläche
Erzeugen der ‚Seiten‘ des Bandes, durch das Verbinden nach oben außen Ränder oben und unten Oberflächen
Teil 1 - Tessellation der Oberseite
Die einfachste Antwort für konkave Polygontessellation ohne Löcher ist EAR-Clipping.
{v3, v0, v1} & {v1, v2, v3} sind Ohren, {v0, v1, v2} ist kein Ohr (v3 liegt in {v0, v1, v2}), {v2, v3, v0) ist kein Ohr (der Innenwinkel bei v3 ist> π). Ein EAR eines Polygons ist ein Dreieck, das aus drei aufeinanderfolgenden Eckpunkten V0, V1 und V2 besteht, für die V1 ein konvexer Scheitelpunkt ist (der Innenwinkel am Scheitelpunkt ist kleiner als π Radiant). Das Liniensegment von Vi0 nach Vi2 liegt vollständig innerhalb des Polygon und keine anderen Eckpunkte des Polygons sind in dem Dreieck enthalten als die drei Eckpunkte des Dreiecks. Ein Polygon mit 4 oder mehr Eckpunkten hat immer ein Ohr. Unser Ansatz ist es also, ein Ohr zu finden, es abzuhacken und zu wiederholen, bis nur noch ein Ohr (Dreieck) übrig ist.
Zeichnen Sie diese Liste als GL_TRIANGLE_LIST
Es gibt effizientere Ansätze für die Polygon-Triangulation ( https://en.wikipedia.org/wiki/Polygon_triangulation ), aber die Ohrmethode ist bei weitem die einfachste.
Teil 2 - Bodenfläche erzeugen
Kopieren Sie alle in Teil 1 gefundenen Scheitelpunkte und fügen Sie jedem Ihren Extrusionsvektor hinzu. Dies wird Ihre "untere" Oberfläche. Der Extrusionsvektor ist ein Vektor (normalerweise) im rechten Winkel zu Ihrem ursprünglichen Polygon. Die Länge des Extrusionsvektors hängt davon ab, wie lang Ihre Extrusion sein muss.
Teil 3 - Extrusionsseiten erzeugen
Nehmen Sie jede Kante Ihres ursprünglichen konkaven Polygons. Fügen Sie den Extrusionsvektor zu den beiden Endpunkten der Kante hinzu. Dies erzeugt 4 Punkte (2 ursprüngliche Endpunkte und 2 "extrudierte" Endpunkte). Diese bilden ein Rechteck *, das eine der Seiten der Extrusion ist. Diese können je nach Reihenfolge als GL_QUADS oder GL_TRIANGLE_STRIP gezeichnet werden.
* Annahme eines rechtwinkligen Extrusionsvektors.
quelle