Gefülltes Polygon mit libgdx zeichnen

7

Ich wollte einige (gefüllte) Polygone mit libgdx für ein Android-Spiel zeichnen. es sollte nicht mit einer Grafik / Textur gefüllt werden. Ich habe nur die Scheitelpunkte des Polygons (geschlossener Pfad) und habe versucht, mit Gittern zu visualisieren, aber an einem Punkt ist das nicht die beste Lösung, denke ich.

Mein Code für ein Rechteck ist:

%Vor%

Gibt es eine Funktion oder etwas, um gefüllte Polygone einfacher zu zeichnen?

    
vtni 31.03.2013, 19:15
quelle

7 Antworten

10

Hier ist ein LIBGDX-Beispiel, das 2D Concave Poly zeichnet.

// Definieren Sie Klassenelemente für PolygonSprite PolygonSpriteBatch

%Vor%

// Erzeuge Instanzen, 1x1-Größe Textur verwendet mit roten Pixel als Workaround, (x, y) Array von Koorden verwendet für die Initialisierung von Poly

%Vor%

// zeichne und rotiere Poly

%Vor%     
Ruslan 12.04.2013, 15:31
quelle
23

Seit den letzten Aktualisierungen von LibGDX verwendet @Rus antwort veraltete Funktionen. Ich gebe ihm jedoch Punkte für die neue aktualisierte Version:

%Vor%

Für gute Triangulationsalgorithmen, wenn Ihr Polygon nicht konvex ist, siehe den fast linearen Algorithmus von Toussaint (1991)

  

Effiziente Triangulation einfacher Polygone, Godfried Toussaint, 1991

    
Mikaël Mayer 06.09.2014 17:05
quelle
2

Ich glaube, dass die ShapeRenderer-Klasse jetzt eine Polygonmethode für vertexdefinierte Polygone hat:

ShapeRenderer .polygon ()

    
talloaktrees 19.12.2013 01:28
quelle
1

Sie können die ShapeRenderer API mit Libgdx einfache, einfarbige Formen zeichnen.

Der Code, den Sie angegeben haben, ist eine sinnvolle Möglichkeit, auch Vollton-Polygone zu zeichnen. Es ist viel flexibler als ShapeRenderer , ist aber ein bisschen komplizierter. Sie müssen glColor4f verwenden, um die Farbe festzulegen, oder ein Usage.Color -Attribut zu jedem Scheitelpunkt hinzufügen. Siehe das SubMeshColorTest-Beispiel für weitere Details zum ersten Ansatz und das MeshColorTexture-Beispiel für weitere Details der zweite Ansatz.

Eine weitere Möglichkeit, darüber nachzudenken, ist die Verwendung von Sprite-Texturen. Wenn Sie nur an einfachen Volltonfarben-Objekten interessiert sind, können Sie sehr einfache 1x1 Texturen einer einzelnen Farbe verwenden und das System über das Sprite ziehen lassen. Ein Großteil von Libgdx und die zugrunde liegende Hardware sind wirklich für das Rendern von Texturen optimiert, so dass Sie es vielleicht einfacher finden, es zu verwenden, selbst wenn Sie den Textur-Inhalt nicht wirklich ausnutzen. (Sie können sogar eine 1x1 weiße Textur verwenden und dann eine verwenden SpriteBatch mit setColor und draw() um verschiedene Farbrechtecke einfach zu zeichnen.)

Sie können auch die verschiedenen Ansätze kombinieren und anpassen.

    
P.T. 01.04.2013 04:48
quelle
1

Verwenden Sie den Triangulationsalgorithmus und zeichnen Sie dann alle Dreiecke als GL_TRIANGLE_STRIP Ссылка

    
Lunatikul 25.01.2014 18:54
quelle
0

wollte nur meine verwandte Lösung mit dir teilen, und zwar für das Implementieren und Zeichnen einer walkZone mit scene2d . Ich musste im Grunde die verschiedenen Vorschläge der Beiträge anderer zusammenstellen:

1) Die WalkZone:

%Vor%

2) Die Screen :

Sie können dann einen Listener in der gewünschten Stage hinzufügen:

%Vor%

3) Die Implementierung:

Das an den WZ-Konstruktor übergebene Array besteht aus einer Menge von x, y, x, y ... Punkten. Wenn Sie sie gegen den Uhrzeigersinn setzen, funktioniert es (ich habe nicht anders herum überprüft, noch weiß, wie es genau funktioniert); Zum Beispiel erzeugt dies ein 100x100 Quadrat:

%Vor%

In meinem Projekt funktioniert es wie ein Zauber, sogar mit sehr komplizierten Polygonen. Hoffe es hilft !!

    
fr_andres 21.09.2016 19:30
quelle
0

Die meisten Antworten schlagen eine Triangulation vor, was gut ist, aber Sie können das auch mit dem Stencil Buffer tun. Es verarbeitet sowohl konvexe als auch konkave Polygone. Dies kann eine bessere Lösung sein, wenn sich Ihr Polygon stark ändert, da Sie sonst jeden Frame triangulieren müssten. Diese Lösung behandelt auch selbst schneidende Polygone, die EarClippingTriangulator nicht enthält.

%Vor%

Um den Stencil Buffer zu verwenden, müssen Sie die Anzahl der Bits für den Stencil Buffer angeben, wenn Ihre App gestartet wird. Zum Beispiel, wie Sie das mit dem LWJGL2-Backend tun:

%Vor%

Weitere Informationen zu dieser Technik finden Sie in einem der folgenden Links:

NateS 29.10.2017 19:47
quelle

Tags und Links