Polygon um Figur bestimmen

Status
Nicht offen für weitere Antworten.

Cola_Colin

Top Contributor
Für die Kollisionserkennung benötige ich erstmal die Polygone, die meine Figuren umschließen. Nur wie bestimme ich ein Polygon aus einer Grafik ? D.h. ich muss ein Polygon um den nichttransparenten Teil erstellen, wozu mir aber keine Lösung einfällt. Die einzige Lösung die ich gefunden hab, wäre alle nicht transparenten Pixel in eine Menge zu packen und dann mit z.B. QuickHull das Polygon darum zu bestimmen. Aber das liefert ein konvexes Polygone, meine Figuren sind aber zumindest Konkav, am liebsten hätte ich auch noch löcher drinne, aber darauf kann ich glaub ich auch verzichten.

Wie krieg ich das korrekte, konkave Polygon ? Ich will nur ungern jedes Polygon manuell festlegen ;)
 

Noctarius

Top Contributor
Im schlimmsten Fall kannst du das Polygon aus den einzelnen Außenpixeln zusammensetzen:

Code:
000000000000
00#######0
0#######00
0########0
000000000000

Würde als Polygon bedeuten: Ein Punkt eines Polygons ist immer Min und Max jeder Zeile, sowie Ober- und Unterkante
Code:
000000000000
00PPPPPPP0
0P#####P00
0PPPPPPPP0
000000000000

Alternativ kannst du halt weniger Polygonpunkte nutzen und nach minX und maxX und minY/maxY suchen und dann aus 4 Punkten ein grobes Rechteck herumziehen.

Ich btw würde beides machen. Eine simple Schnellabfrage mit Rechteck, ist keine Kollision der 2 Rechtecke gegeben, kann auch im inneren Polygon (was mehr Berechnungszeit braucht) keine Kollision existieren. Ist der Rechtecktest positiv würde ich entweder mit den Polygonwerten (aus obigem Beispiel) oder durch direkte Pixelkollision (je nach Spieltyp) eine Kollision berechnen, da dieser Test nur noch seltener auftritt.
 
S

Spacerat

Gast
Ich frag' mich gerade ob das mit dem Polygon "rausdrücken" überhaupt notwendig ist. Wenn die Flächen nicht allzu gross sind müsste doch eine UND-Verknüpfung zweier BigInteger, welche aus der Spritegrafik und dem Hintergrund erstellt wurden genügen.
 

Cola_Colin

Top Contributor
Ich bin in 2D, meine BitMask versuche scheitern nur an der Tatsache, das die Größe der Figuren nicht von der Texturgröße abhängig ist und die Figuren rotiert werden können. Da müsste ich andauernd neue Masken erstellen.
Oder geht das komplett Hardwarebeschleunigt ? Muss mir VolatileImage nochmal genau ansehen.
Allerdings benötige ich auch eine Kollisionsnormale und den Kontaktpunkt.

Wegen den Aussenpixeln, sowas hatte ich auch schon gedacht, nur was ist bei solchen Formen:
stern_logo.jpg


Da gibt es Zeilen, die mehr als zwei Randpunkte besitzen, einige meiner Sprites haben noch deutlich unschönere Formen.

Erst mal mit Bounding Volumes nen schnellen Test zu machen versteht sich von selbst :)
 

Noctarius

Top Contributor
Da hast du halt ein großes Rechteck außen rum, das ist viel schneller abzutesten als der Pixelvergleich später. Ist es im Rechteck nicht enthalten, brauch man die Pixelkollision garnicht erst zu starten. Als Außenrechteck kannst du z.B. auch einfach das komplette Image-Height/Width nehmen (wenn du nicht zuviel Rahmen drum herum hast).

Java:
if (sprite.isQuickCollision(sprite2))
    if (sprite.isCollision(sprite2))
        // Kollisionscode
 

Cola_Colin

Top Contributor
Das mach ich doch schon ;)
Nur trotzdem brauch ich ja nen Weg für den Pixelgenauen Test, hin und wieder wird es ja Kollisionen geben.
 

Noctarius

Top Contributor
Überlappung berechnen und dann Pixel für Pixel, innerhalb der Überlappung, durchgehen schauen ob beide Pixel nicht durchsichtig sind (transparente Farbe muss ja berücksichtigt werden) und wenn sie es nicht sind, hast du eine Kollision. Dann kannst du den Test abbrechen und behaupten, ja.
 

Cola_Colin

Top Contributor
Das ist mir schon klar ~.~
Nur was mach ich bei Rotierten Sprites und skalierten ? Immer im Speicher die ganzen Sprites neuzeichnen ist mist.
 

Ark

Top Contributor
Weichen die Formen der Sprites stark von Rechtecken ab, bzw. lassen sich die Formen jeweils durch einige wenige Rechtecke annähernd beschreiben? Ist es außerdem möglich, einige Toleranzen in der Kollisionserkennung in Kauf zu nehmen? Wenn ja, würde ich eben so vorgehen und mit Rechtecken arbeiten.

Man könnte stattdessen aber auch näherungsweise Dreiecke benutzen, aus denen die Polygone gebildet werden; das erlaubt außerdem eine bessere Annäherung.

Ark
 

Cola_Colin

Top Contributor
Am liebsten will ich das Separating axis theorem verwenden, nur dazu brauch ich eben Polygone. Ich glaub ich hab jetzt aber ne Vorstellung, wie ich die kriegen kann. Mal schaun, dann müssen die glaub ich auch noch Konvex sein. Vielt werde ich dann jedem Sprite mehrere konvexe Polygone zuweisen, dann brauch ich auch noch nen Algo, der ein konkaves Polygon zerlegt xD
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Objete von Polygon mit TreeSet verwalten Java Basics - Anfänger-Themen 1
I Vererbung Polygon erweitern ? Java Basics - Anfänger-Themen 4
F Polygon vergrößern Java Basics - Anfänger-Themen 8
S Polygon contains - Erläuterung Java Basics - Anfänger-Themen 3
K draw Polyline will nicht wie Polygon Java Basics - Anfänger-Themen 2
S Speicherbedarf Pixel vs. Polygon? Java Basics - Anfänger-Themen 7
M Polygon umkreisen? Java Basics - Anfänger-Themen 47
K Methoden contains()-Methode für Punkt in Polygon Java Basics - Anfänger-Themen 5
R Polygon erweitern Java Basics - Anfänger-Themen 10
M Polygon Punkte im Uhrzeigersinn sortieren Java Basics - Anfänger-Themen 2
G Polygon in Frame zeichnen Java Basics - Anfänger-Themen 3
E Polygon und Polyline Java Basics - Anfänger-Themen 30
K Polygon Java Basics - Anfänger-Themen 14
K Polygon in Java3D (Java 3D) zeichnen Java Basics - Anfänger-Themen 4
T Polygon.contains Fehler Java Basics - Anfänger-Themen 2
Rene_Meinhardt Polygon.Contains() funktioniert nicht richtig? Java Basics - Anfänger-Themen 3
0 problem beim Polygon zeichnen Java Basics - Anfänger-Themen 3
G bild in polygon zeichnen Java Basics - Anfänger-Themen 6
G Polygon Java Basics - Anfänger-Themen 7
I drehendes polygon Java Basics - Anfänger-Themen 4
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
YAZZ BlueJ Bewegung einer Figur im Kreis Java Basics - Anfänger-Themen 4
M Die Hamster Figur austauschen Java Basics - Anfänger-Themen 6
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
H Bewegen einer Figur Java Basics - Anfänger-Themen 3
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
M Radius von einer ellipse bestimmen Java Basics - Anfänger-Themen 7
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
rosima26 Java SubSum bestimmen Java Basics - Anfänger-Themen 76
M Ersten Index von Array bestimmen Java Basics - Anfänger-Themen 14
C Kollision zweier Rechtecke, Schnittpunkte bestimmen Java Basics - Anfänger-Themen 25
C Boolesche Formel, Belegungen bestimmen Java Basics - Anfänger-Themen 8
Der Grütz Verständnisfrage zu Übung aus Java Kurs - Schaltjahr bestimmen Java Basics - Anfänger-Themen 2
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
L Partitionierungsgruppen bestimmen Java Basics - Anfänger-Themen 22
H Klassen Die Länge einer Text-Node bestimmen Java Basics - Anfänger-Themen 2
H Minimum in einem Array bestimmen Java Basics - Anfänger-Themen 7
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
L Datentypen Deklarierte Felder einer Generic Klasse bestimmen Java Basics - Anfänger-Themen 7
M Array Summe bestimmen? Java Basics - Anfänger-Themen 14
N Bereich Zufallszahl bestimmen (50 und 100 / 80 und 90) Java Basics - Anfänger-Themen 2
J Y-Koordinate von GUI-Objekt bestimmen Java Basics - Anfänger-Themen 2
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
L Anzahl der Aufrufe von Schleifen bestimmen Java Basics - Anfänger-Themen 1
F Summe in einem Array bestimmen Java Basics - Anfänger-Themen 3
H Ersten Zug bestimmen Java Basics - Anfänger-Themen 12
O Suchbaum Elternknoten finden Level eines Knoten bestimmen Java Basics - Anfänger-Themen 24
C Kleinsten Kreis einer Punktmenge bestimmen Java Basics - Anfänger-Themen 4
CptK Methoden Koordinaten relativ zur Rotation eines Bildes bestimmen Java Basics - Anfänger-Themen 8
J Breite eines Strings bestimmen Java Basics - Anfänger-Themen 4
E Maximalwert im Array bestimmen Java Basics - Anfänger-Themen 8
L Datentypen Date API - diese Woche bestimmen Java Basics - Anfänger-Themen 1
Y Rekursionsgleichung bestimmen Java Basics - Anfänger-Themen 3
Y Teile und Herrsche, längstes absteigendes Teilarray bestimmen Java Basics - Anfänger-Themen 12
T Min und Max einer Zahlenfolge bestimmen Java Basics - Anfänger-Themen 7
V Klassen Bestimmen Sie die erste und letzte Position an der ein 'c' steht? Java Basics - Anfänger-Themen 3
M Bestimmen, wie oft ein Char in einem Array vorkommt Java Basics - Anfänger-Themen 2
P Rückgabewert bestimmen Java Basics - Anfänger-Themen 17
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
T Anzahl bestimmter Werte eines arrays bestimmen Java Basics - Anfänger-Themen 4
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
E Summe der "Nachbarn" eines Wertes in einem Array bestimmen Java Basics - Anfänger-Themen 8
H Quotient durch Subtraktion bestimmen Java Basics - Anfänger-Themen 12
1 Größe einer zirkulären Liste bestimmen .. ? Java Basics - Anfänger-Themen 2
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
D Wochentag für eingegebenes Datum bestimmen anhand von Formel Java Basics - Anfänger-Themen 2
C Werteraum für Variable bestimmen Java Basics - Anfänger-Themen 5
S Vererbung exaktes "Objekt" der Unterklasse bestimmen Java Basics - Anfänger-Themen 5
Screen Wie geringste Absolutdifferenz zum Median bestimmen? Java Basics - Anfänger-Themen 8
V Aufrufendes Objekt bestimmen (nicht die Klasse) Java Basics - Anfänger-Themen 3
J Note bestimmen Java Basics - Anfänger-Themen 13
P BitSet- Objekt- Anzahl der Elemente bestimmen Java Basics - Anfänger-Themen 2
T Minimumsnorm bestimmen Java Basics - Anfänger-Themen 19
T String - kleinstes Zeichen bestimmen Java Basics - Anfänger-Themen 3
M bestimmen zu welchem Array ein Objekt "zugehört" Java Basics - Anfänger-Themen 5
L Koordinaten bestimmen Java Basics - Anfänger-Themen 8
S Zeit bestimmen Java Basics - Anfänger-Themen 4
H Anzahl Ziffer in Zahl bestimmen Java Basics - Anfänger-Themen 3
S Kleinster Wert im Array bestimmen Java Basics - Anfänger-Themen 4
J Klickposition genau bestimmen Java Basics - Anfänger-Themen 12
J Bestimmen ob String aus Kleinbuchstaben besteht Java Basics - Anfänger-Themen 16
N aktuelle Datum Mikrosekunden genau bestimmen Java Basics - Anfänger-Themen 8
G zweitgrößter Wert in array bestimmen Java Basics - Anfänger-Themen 4
L Farbe unter Cursor bestimmen Java Basics - Anfänger-Themen 5
T Variable aus dem Web Netz Internet URL bestimmen Java Basics - Anfänger-Themen 13
B Anzahl der Werte bestimmen Java Basics - Anfänger-Themen 14
F komplexität bestimmen Java Basics - Anfänger-Themen 10
X Anzahl Baumknoten bestimmen Java Basics - Anfänger-Themen 5
J Mouseposition bestimmen Java Basics - Anfänger-Themen 5
F Meßwertfolge bestimmen Java Basics - Anfänger-Themen 10
J Arraylänge mittels "Array.getLength" bestimmen!? Java Basics - Anfänger-Themen 3
B JMenu Position bestimmen Java Basics - Anfänger-Themen 7
H Javacode erklären: Mittelpunkt bestimmen Java Basics - Anfänger-Themen 4
M Interval Teilmenge bestimmen - Fehler in meiner Lösung Java Basics - Anfänger-Themen 6
N zweidimensionales array größe bestimmen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben