Ok, ich habe einfach aus kuriosität versucht zu schauen, ob man im GM nicht eine Engine umsetzen könnte, die ähnlich der Spiele
wie Wipeout oder F-Zero ist. (Insbesondere F-Zero)
Falls ihr noch nie F-Zero gesehen habt, hier ein Video der N64 Version:
Spoiler anzeigen
Das ist noch eine verhältnissmäßig leichte (als auch simple) Strecke.
Dieses video zeigt deutlich wie sich Streckenabschnitte praktisch auf den Kopf "stellen" können: (und es verdeutlich erst recht die hohe Geschwindichkeit...)
Spoiler anzeigen
Meine Frage: Wie genau funktioniert deren Collisionsengine? Ich habe online mehrere Stunden gesucht, und kam auf keine Ergebnisse. (Vielleicht weil ich die falschen suchbegriffe verwendet habe.)
Das Problem an der ganzen sache sind nicht nur die Strecken mit ihren drehungen, verzerrungen und verschiedenen formen (tunnel wo man an wänden fahren kann,etc...)
sondern auch die hohe geschwindichkeit.
Ich versuchte einfach mal eine Kollision eines 3D Fahrzeugs mit einer Strecke auf der xy ebene umzusetzen.
Das Problem fing schon da an: Bei hohen geschwindickeiten, konnte der Spieler einfach durch die Sreckenabgrenzungen fahren, da die Kollissionsengine
be ider hohen geschwindichkeit, die abgrenzung nicht mehr registriert hat.
Was ich also machte, ist die P3DC Collisions DLL runterzuladen, und raycasting zu implementieren. Nun wird wirklich der Abstand vom Spieler bis zur nächstgelegenen Abgrenzung berechnet.
Auf die art udn weise kann ich schauen, ob zwischen der aktuellen und der neuen Position des Spielers eine Wand ist. Wenn ja, dann findent eine Kollision statt. (Spieler stoppt vor der Wand.)
Ich kann mittlerweile nahezu jede geschwindichkeit als Parameter übergeben. Selbst bei 10.0000 Pixeln pro Step, verlässt der Spieler nicht die Strecke.
Nun kommt aber das Problem: das Rotieren der Strecke und die "hügel" auf der z-achse. Wie genau umgeht man dies? Mit der aktuellen Raycasting methode ist das meines wissens nach nur bedingt möglich.
Ich kann das Fahrzeug natürlich anhand der Normals der strecke (P3DC unterstützt dies) ausrichten. Das Problem ist, dass wenn der Spieler schnell fährt, der Raycast nicht gebogen werden kann.
Das bedeutet, dass ich beim Auftreffen eines Raycasts den Winkel der Steigung bzw rotation berechnen muss und dementsprechend einen 2ten Raycast in richtung der gebogenen Strecke nochmal
"aussenden" sollte. Würde eigentlich funktionieren.
ABER: Das funktioniert nur, wenn die Strecke eine "Steigung" besitzt. Wenn sie wieder "abfällt" (wie z.B: wenn man von der Spitze eines Berges runterschaut), kann man mit einem Raycast nicht registrieren, ob die Strecke endet oder nicht.
Dabei war das ziel ja, das Fahrzeug an die Strecke so gut es nur geht zu "binden". Mit der Raycasting Methode wäre dass zwar möglich, aber nicht bie diesen hohen Geschwindichkeiten.
Hat da irgendjemand eine Idee bzw einen Ansatz wie soch eine Engine eigentlich funktioniert?
Konkret: wie berechnen sie die collissionen des Fahrzeugs sodass es nicht einfach aus der Strecke fliegt in Kombination mit deren Physics engine? (dass man immer an der Strecke haften bleibt...)
wie Wipeout oder F-Zero ist. (Insbesondere F-Zero)
Falls ihr noch nie F-Zero gesehen habt, hier ein Video der N64 Version:
[video]http://www.youtube.com/watch?v=xf4cWDCnG8s[/video]
Dieses video zeigt deutlich wie sich Streckenabschnitte praktisch auf den Kopf "stellen" können: (und es verdeutlich erst recht die hohe Geschwindichkeit...)
[video]http://www.youtube.com/watch?v=WCjaipqG9Rs[/video]
Meine Frage: Wie genau funktioniert deren Collisionsengine? Ich habe online mehrere Stunden gesucht, und kam auf keine Ergebnisse. (Vielleicht weil ich die falschen suchbegriffe verwendet habe.)
Das Problem an der ganzen sache sind nicht nur die Strecken mit ihren drehungen, verzerrungen und verschiedenen formen (tunnel wo man an wänden fahren kann,etc...)
sondern auch die hohe geschwindichkeit.
Ich versuchte einfach mal eine Kollision eines 3D Fahrzeugs mit einer Strecke auf der xy ebene umzusetzen.
Das Problem fing schon da an: Bei hohen geschwindickeiten, konnte der Spieler einfach durch die Sreckenabgrenzungen fahren, da die Kollissionsengine
be ider hohen geschwindichkeit, die abgrenzung nicht mehr registriert hat.
Was ich also machte, ist die P3DC Collisions DLL runterzuladen, und raycasting zu implementieren. Nun wird wirklich der Abstand vom Spieler bis zur nächstgelegenen Abgrenzung berechnet.
Auf die art udn weise kann ich schauen, ob zwischen der aktuellen und der neuen Position des Spielers eine Wand ist. Wenn ja, dann findent eine Kollision statt. (Spieler stoppt vor der Wand.)
Ich kann mittlerweile nahezu jede geschwindichkeit als Parameter übergeben. Selbst bei 10.0000 Pixeln pro Step, verlässt der Spieler nicht die Strecke.
Nun kommt aber das Problem: das Rotieren der Strecke und die "hügel" auf der z-achse. Wie genau umgeht man dies? Mit der aktuellen Raycasting methode ist das meines wissens nach nur bedingt möglich.
Ich kann das Fahrzeug natürlich anhand der Normals der strecke (P3DC unterstützt dies) ausrichten. Das Problem ist, dass wenn der Spieler schnell fährt, der Raycast nicht gebogen werden kann.
Das bedeutet, dass ich beim Auftreffen eines Raycasts den Winkel der Steigung bzw rotation berechnen muss und dementsprechend einen 2ten Raycast in richtung der gebogenen Strecke nochmal
"aussenden" sollte. Würde eigentlich funktionieren.
ABER: Das funktioniert nur, wenn die Strecke eine "Steigung" besitzt. Wenn sie wieder "abfällt" (wie z.B: wenn man von der Spitze eines Berges runterschaut), kann man mit einem Raycast nicht registrieren, ob die Strecke endet oder nicht.
Dabei war das ziel ja, das Fahrzeug an die Strecke so gut es nur geht zu "binden". Mit der Raycasting Methode wäre dass zwar möglich, aber nicht bie diesen hohen Geschwindichkeiten.
Hat da irgendjemand eine Idee bzw einen Ansatz wie soch eine Engine eigentlich funktioniert?
Konkret: wie berechnen sie die collissionen des Fahrzeugs sodass es nicht einfach aus der Strecke fliegt in Kombination mit deren Physics engine? (dass man immer an der Strecke haften bleibt...)
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von LEWA ()