Gamestudio Links
Zorro Links
Newest Posts
Trading Journey
by howardR. 04/28/24 09:55
basik85278
by basik85278. 04/28/24 08:56
Zorro Trader GPT
by TipmyPip. 04/27/24 13:50
Help with plotting multiple ZigZag
by M_D. 04/26/24 20:03
Data from CSV not parsed correctly
by jcl. 04/26/24 11:18
M1 Oversampling
by jcl. 04/26/24 11:12
Why Zorro supports up to 72 cores?
by jcl. 04/26/24 11:09
Eigenwerbung
by jcl. 04/26/24 11:08
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
0 registered members (), 744 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
wandaluciaia, Mega_Rod, EternallyCurious, howardR, 11honza11
19049 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
panel "intersect" #217251
07/22/08 10:26
07/22/08 10:26
Joined: Mar 2007
Posts: 1,852
A
alpha_strike Offline OP
Serious User
alpha_strike  Offline OP
Serious User
A

Joined: Mar 2007
Posts: 1,852
Im Zuge der 2d-Verbesserung schlage ich einen Befehl, ähnlich dem im (damals Macromedia) Director vor.

"intersect".

Wenn sich 2 Panels überlagern, und zwar nur im Falle der sichtbaren, nicht im alpha-Kanal durch schwarze ausgenommenen,
Pixel-Bereiche - dann sollte ein Rückgabewert "result=1" aus einer Funktion resultieren.

Damit könnte man herrliche Adventure-Animationen und Kollisions-Abragen machen.

Re: panel "intersect" [Re: alpha_strike] #217255
07/22/08 10:55
07/22/08 10:55
Joined: Feb 2008
Posts: 97
Steev Offline
Junior Member
Steev  Offline
Junior Member

Joined: Feb 2008
Posts: 97
Das wäre super, wenn es das bald gäbe. Ich habe vor Ewigkeiten einmal ActionScript in Flash programmiert.

Nebenbei, gibt es keine Möglichkeit in Game Studio eine 2d-Kollisionsabfrage zu implementieren?


---
programming is a livestyle
Re: panel "intersect" [Re: Steev] #217260
07/22/08 11:36
07/22/08 11:36
Joined: Jan 2006
Posts: 1,829
Neustadt, Germany
T
TWO Offline

Serious User
TWO  Offline

Serious User
T

Joined: Jan 2006
Posts: 1,829
Neustadt, Germany
Beide Anfragen sind zwar sinnvoll, können aber von euch selbst geschrieben werden. intersect bekommt 2 Panels zugeschoben und vergeleicht erst ob sich die Beiden überlappen (p1.x < p2.x, p1.x+p1.with > p2.x+p2.with, etc.) und dann Pixel für Pixel alle Werte (alpha picking). Mit dem gleichen Prinzip könnte eine Funktion die ein Panel und einen Punkt nimmt implementiert werden.

Re: panel "intersect" [Re: TWO] #217268
07/22/08 11:55
07/22/08 11:55
Joined: Feb 2008
Posts: 97
Steev Offline
Junior Member
Steev  Offline
Junior Member

Joined: Feb 2008
Posts: 97
Stimmt auch wieder.

Danke für deine Antwort.


---
programming is a livestyle
Re: panel "intersect" [Re: Steev] #217277
07/22/08 13:03
07/22/08 13:03
Joined: Jan 2003
Posts: 4,615
Cambridge
Joey Offline
Expert
Joey  Offline
Expert

Joined: Jan 2003
Posts: 4,615
Cambridge
ist auch kaum rechenaufwand. zwei panels mit 100x200 pixeln bedeuten 20 000² = 400 000 000 alphakanalvergleiche, wenn sie genau übereinanderliegen, im mittel also die hälfte. unoptimiert ist das kaum machbar. hat jemand eine implementationsidee? vielleicht eine vorberechnete polygonale bounding-fläche für panels?

Re: panel "intersect" [Re: Joey] #217281
07/22/08 13:28
07/22/08 13:28
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
Also den Vergleich über den Alphakanal zu machen ist grob fahrlässig da man erstens Perfomanceprobleme kriegt, wenn man das z.B. jeden Frame macht mit mehreren Panels und zweitens wirds frickelig, wenn du das Panel skalierst und/oder rotierst.

Eine einfache Möglichkeit bietet sich an zu testen ob sich zwei triangles überlappen. Dann kannst du nämlich die beiden notwendigen triangles der gedrehten und skalierten Boundingbox eines Panels nehmen, die eines anderen Panels nehmen und schnell vergleichen.

Für genauere Kollisionsshapes bieten sich nun folgende Alternativen an:

1.) Ein konvexes polygonales shape
2.) Ein konkaves polygonales shape
3.) Eine pixelgenaue Beschreibung des Kantenzugs des Objektes

Zu 1 und 2: dies ist nur eine Annäherung aber deshalb auch schnell. Das konkave shape muss eventuell trianguliert werden. In beiden Fällen sollte das Shape extern gespecihert und zur Laufzeit geladen werden. Es gibt diverse Algorithmen (papers, ausformuliert, demos, sourcecode), die solche Kollisionen berechnen. Wahrscheinlich ist 1. schneller und einfacher zu realisieren.

Zu 3: Man kann pixelgenau Kantenzüge relativ kostengünstig mithilfe des chain codes speichern, wobei man die Alternativen Manhattan Distanz und Euklid hat. Euklid erlaubt auch diagonale Züge, speichert also wesentlich weniger Daten und erlaubt eine genauere Approximation des Kantenzuges. Man könnte in ein Array dann die chaincodes (eventuell abgebildet, bedingt durch Rotation/Skalierung/Projektion) eintragen. Sobald eine Kollision stattfindet, wird dann ein solcher Pixel mehrfach belegt und schon kannste prima Events triggern.

(Binäre-)Alphamasken zu durchlaufen ist echt schrecklich, da die Betrachtung aller Pixel bei zunehmender Fläche wächst - und zwar quadratisch! Wäh...

Zusätzlich dazu möchte ich anmerken, dass bei der Betrachtung von Kollisionen man evtl. auch darauf achten muss, ob sich ein Objekt bewegt und zwar in diesem und letztem Frame eventuell keine Kollision feuert, "aber auf dem Weg" ein gefeuert hätte (Beispiel: Pistolenkugel durchstößt Wand, weil sich die Kugel zu schnell bewegt).

Last edited by HeelX; 07/22/08 13:29.
Re: panel "intersect" [Re: HeelX] #217291
07/22/08 14:37
07/22/08 14:37
Joined: Feb 2008
Posts: 97
Steev Offline
Junior Member
Steev  Offline
Junior Member

Joined: Feb 2008
Posts: 97
@HeelX,

das würde auf jedem Fall funktionieren. Am sinnvollsten wäre es dann, diese Daten direkt beim erstellen eines Panels zu berechnen, und dann nur noch bei Veränderungen zu speichern. Die Rotation hatte mir auch schon Kopfzerbrechen bereitet, da ja alle Punkte per Rotationsformel rotiert werden müssten.

Ein Alphavergleich ist auf jedem Fall zu Zeitaufwändig, aber bringt auch den Vorteil mit sich, das man zum Beispiel bei einem Viereck mit einem Kreisausschnitt in der Mitte genaue Kollisionsabfragen machen kann. soll heisen: wenn mein Objekt in der Mitte des Kreises in meinem Viereck ist, soll keine Kollision stattfinden.

Alles in allem spricht es meiner Meinung nach dafür, Panels als Vectorengrafiken zu speichern. Man kann ja optional für Bilder anhand einer Alphawertanalyse oder per "Transparenter Farbe" eine BoundingBox berechnen.

gruß
steev


---
programming is a livestyle
Re: panel "intersect" [Re: Steev] #218742
07/30/08 09:28
07/30/08 09:28
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Ich schaue mal, was ich da implementieren kann. Die Intersection gedrehter Panels ist einfach, aber ein Alphavergleich ist sehr zeitaufwendig.

Re: panel "intersect" [Re: Steev] #218761
07/30/08 12:24
07/30/08 12:24
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
Originally Posted By: Steev
Die Rotation hatte mir auch schon Kopfzerbrechen bereitet, da ja alle Punkte per Rotationsformel rotiert werden müssten.


Naja geht, du kennst den Origin des Panels, seine Skalierung und seine Maße, sowie seine Rotation. Du kannst die 4 Eckpunkte durch die Vektorbefehle recht einfach ausrechnen.

Re: panel "intersect" [Re: HeelX] #218798
07/30/08 16:28
07/30/08 16:28
Joined: May 2002
Posts: 7,441
ventilator Offline
Senior Expert
ventilator  Offline
Senior Expert

Joined: May 2002
Posts: 7,441
es muss nicht jedes pixel einzeln durchlaufen werden. & << >> sind bei sowas deine freunde! smile


Moderated by  aztec, Spirit 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1