3D Engine Kollision

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Lukas-P
Beiträge: 262
Registriert: 07.10.2004 12:03

3D Engine Kollision

Beitrag von Lukas-P »

Hallo

Kann mir jemand eine Procedure Proggen, mit der ich festellen kann ob zwei Entitys kollisionieren?




Danke schonmal im Voraus :wink:

[EDIT] verschoben von Danilo
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag von Robert Wünsche »

Also:
Die einfachste variante:
Rechne einfach den Abstand zwischen denn beiden gegenständen aus und Prüfe, ob die summe der maximalen radien der beiden gegenstände größer ist als die entfernung, wenn dem so ist, kollidieren die beiden gegenstände !

Es giebt dann auch noch polygonale Kollisionsalgohtrhytmen, die aber fast niemand kennt :wink: .
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Die Formel zur berechnung der Entfernung zwischen 2 Punkten findest du im PB-Manual im Mathematik-Teil! Allerdings ist diese Formel zur Berechung in einem 2D-Koordinatensystem. Ich weiss jetztleiderkeine Formel für ein 3D-System,aber google sollte da abhilfe schaffen können... :wink:

cya
Pascal
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Ich hab' ein Tutorial gefunden:
http://www.scherfgen-software.net/index ... =tutorials
Hoffe, ich konnte dir helfen! :allright:

cya
Pascal
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

hardfalcon hat geschrieben:Die Formel zur berechnung der Entfernung zwischen 2 Punkten findest du im PB-Manual im Mathematik-Teil! Allerdings ist diese Formel zur Berechung in einem 2D-Koordinatensystem. Ich weiss jetztleiderkeine Formel für ein 3D-System,aber google sollte da abhilfe schaffen können... :wink:

cya
Pascal
SQR((x1-x2)^2 + (y1-y2)^2) wird zu SQR((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)

Blubb, fertig.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Lukas-P
Beiträge: 262
Registriert: 07.10.2004 12:03

Beitrag von Lukas-P »

SQR((x1-x2)^2 + (y1-y2)^2) wird zu SQR((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)
IS JA EINFACH!!! :oops: :roll: :cry:
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

:? wenn du nichtmal das rausfindest, frag ich mich wie du überhaupt irgendwas in 3D machen willst. Ist wirklich nicht böse gemeint, aber das wäre in Purebasic doch voll simpel:

SQR((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)

Code: Alles auswählen

SQR(Pow(x1-x2, 2) + Pow(y1-y2, 2) + Pow(z1-z2, 2))
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag von Robert Wünsche »

Also ich hab mir eine formel aus dem Tafelwerk rausgesucht (Die strecke vom einem zum anderen Ende in einem Quader) und hab sie für PB entsprechend umgebaut.
Ich muss Darkdragon mal recht geben:
Das war wirklich nicht (sehr) schwer !
Benutzeravatar
Lukas-P
Beiträge: 262
Registriert: 07.10.2004 12:03

Beitrag von Lukas-P »

Ja wenn ihr doch alle so gut seit. Dann könnt ihr mir doh bestimmt eine Procdure für die Kollision proggen. :D
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Hab ich ja schon. Sogar für ne genaue Kollision:

http://robsite.de/php/pureboard-archiv/ ... php?t=5160
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten