Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

19.05.2017, 22:12

Und wieso genau geht das nicht mit Raycasting/Raytracing? Du musst ja nur das Volume berücksichtigen. Is klar, dass ein Ball kein Punkt ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

12

19.05.2017, 22:14

Ein Strahl simuliert quasi die Bewegung eines einzelnen Punkts entlang einer gewissen Richtung. Wenn der Ball kein Punkt ist, ist ein Strahl nicht die korrekte Geometrie, um die Kollision zwischen Ball und anderem Objekt zu bestimmen. Der Strahl kann das Objekt verfehlen, aber der Ball würde es trotzdem treffen.

Hier ist ein guter Post auf Stack Overflow, der genau dieses Problem behandelt, und man sieht schon, dass es ein bisschen mehr ist als nur Raytracing: http://stackoverflow.com/a/18790389/1044572

@zimmer

Alter Hase

Beiträge: 1 135

Wohnort: NRW Germany

  • Private Nachricht senden

13

19.05.2017, 23:34

ich dachte das Raycasting könnte mit der position des "rechtwinkligen" Strahls plus die Position des quadrates den winkel ermitteln, aber ich verstehe nicht welche technik den quadrat dreht. und die grafik ist quatsch, man muss ja nicht die strahl position am level ramen ablesen, man brauch ja nur einen 2. Punkt

SlinDev

Treue Seele

Beiträge: 142

Wohnort: Lübeck

Beruf: Programmierer

  • Private Nachricht senden

14

20.05.2017, 00:14

Solange es nur darum geht den Ball mit dem Block kollidieren zu lassen und der Durchmesser des Balls kleiner ist als die kürzeste Seite von allen Blöcken UND keine Lücken zwischen den Blöcken sind, sollte Raytracing von beiden Seiten des Balls in Bewegungsrichtung doch ausreichen? Das wäre zumindest für den Anfang schonmal was.

15

20.05.2017, 07:57

Ich habe das damals so gemacht, das bei einer Kollision
gecheckt wird, wo sich der Ball befindet. Ich habe durch die
Position von Brick und Ball abgefragt, an welcher Seite
der Ball sich vom Brick befindet.


So wurde mir das erklärt :D :

Zitat

- Der Kreis besteht aus dem Mittelpunkt C und dem Radius r
- Das Rechteck besteht aus 4 Eckpunkten ABUW, Teile in 4 Strecken auf: AB,BU,UW,WA

- Wenn der Abstand des Kreismittelpunktes zu einer der Strecken kleiner/gleich r, gibt es eine Berührung.
Beispiel für Abfrage, ob der Kreis die Strecke AB berührt, dazu benötigt man nur die Streckenlängen AB, AC und BC (diese Berechnung sollte wohl kein Problem darstellen^^)
Jetzt zur Auswertung:
Wenn AC<=r oder BC<=r dann Berührung!

BC² ist das Quadrat der Strecke BC usw, zuerst wird der Abstand des Kreismittelpunktes C senkrecht zur Strecke AB berechnet:
x = (BC²-AC²-AB²)/(-2*AB)
Auswertung:
Wenn x>=0 und x<=AB und sqrt(AC²-x²)<=r dann Berührung!

16

20.05.2017, 14:36

Falls das falsch rüber kam, ich verlange von niemandem, dass er den Code auf Fehler kontrolliert, das mache ich gerne selbst. Ich habe nur dieses Verfahren noch nicht ganz verstanden. Zu schauen, ob der Ball den Brick berührt, ist kein Problem. Da der Ball sich mit mehr als einem Pixel/Frame bewegen kann und der Brick nicht quadratisch ist, kann ich auch nicht einfach schauen, ob der Mittelpunkt des (quadratischen, sich nicht drehenden) Balls an der X- oder an der Y-Achse weiter vom Mittelpunkt des Bricks weiter entfernt ist.

Werbeanzeige