Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 19:01

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kollisionserkennung: Rampe
BeitragVerfasst: Fr Apr 29, 2011 21:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Hi,

habe schon recht viel gesucht, wurde aber nie schlau daraus, wie ich eine Rampe begehbar machen könnte. Man stelle sich ein Level vor in einem First-Person-Shooter. Das Level ist eine einfache Box, in welcher man sich befindet. Vor dem Spieler befindet sich eine Rampe, also ein konstanter geradliniger Anstieg. Erstmal: Wenn das Level so einfach ist, wie eben erklärt, ist es leicht zu verhinden dass man aus dem Level herausläuft, man muss im Prinzip nur schauen, ob man sich an einer bestimmten Stelle befindet und ob man weiterlaufen darf (also: Position+-Toleranz). Doch wie sorge ich dafür, dass man in die Rampe nicht einfach hineinläuft, sondern diese hochläuft ? Am Ende muss man wohl eine Verschiebung an der y-Achse vornehmen nach oben (und wenn man zurückläuft nach unten). Es geht mir einfach um das Prinzip, daher hier im Forum "Allgemein".

Gruß,
Nils

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kollisionserkennung: Rampe
BeitragVerfasst: Fr Apr 29, 2011 22:53 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Vielleicht helfen dir die Kollisions Tutorials im Wiki weiter. Link

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kollisionserkennung: Rampe
BeitragVerfasst: Fr Apr 29, 2011 23:07 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Da hat einer wohl nicht den Beitrag zum Titel gelesen. :D

Also da du ja meintest das es einfach ist die Kollision in einem so einfachen Level abzufragen, sollte es auch kein Problem sein abzufragen ob du mit einer Wand (senkrecht) oder einer Rampe (schräg) kollidierst.

Also musst du bei betreten einer Rampe einfach nur den y-Wert (wie du bereits geschrieben hattest) erhöhen.

Wie du dir denken kannst lässt sich der bei einem linearen anstieg folgendermaßen berechnen:
y(jetzt) = y(vor der Rampe) + deltay(anstieg der Rampe) * prozentZ(Verhältnis zwischen Rampenlänge und der zurückgelegten Strecke auf der Rampe (ist man auf der Mitte der Rampe wären das 50% bzw. 0,5))

Das Plus musst du eventuell durch ein Minus ersetzen, abhängig davon ob du die Rampe rauf oder runterläufst.

Hoffe das hat dir weitergeholfen. Andernfalls hab ich wahrscheinlich dein Problem nicht ganz verstanden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kollisionserkennung: Rampe
BeitragVerfasst: Fr Apr 29, 2011 23:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

das ganze funktioniert dann aber nur wenn man ne gerade Rampe hat. Machs leiber gleich so, das es auch alles anwendbar ist: Treppen, Rampen, unebenes Terrain.
Berechne dir deine neue Position (x und z), dann ermittelst du den y-Wert des Terrains an der Stelle (x, y). Dann berechnest du die Y-Differenz der berechneten und deiner aktuellen Position und zum Schluss kannst du mit der Differenz die Entscheidung treffen. Angenommen a sei der Tolleranzwert: wenn DifY > a, dann ist es zu steil un du kannst nicht weiter laufen (also aktuelle Position bleibt). Wenn der Betrag von DifY < a ist, dann kannst du weiter laufen (Position = Stelle (x, z) und Y-Wert des Terrains). Wenn DifY < -a ist, musst du den freien Fall simulieren, bis du wieder auf ein Hinterniss triffst. Soweit zur Theorie ^^

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kollisionserkennung: Rampe
BeitragVerfasst: Sa Apr 30, 2011 14:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Die Physiksysteme besteht grob aus 2 Teilen, einmal die Kollisionserkennung und einmal die Dynamik.
Die Kollisionserkennung merkt nur, da mein Player schneidet eine Ebene(Triangle), daraus berechnet dann die Kollision, wie weit der Player in der Ebene eingedrungen ist und gibt ein entsprechenden Vektor raus, um diese nicht mehr zu schneiden.
Dieser Vektor kann nun in der Dynamik genutzt werden, dieses Modul berechnet Kräfte und setzt darauf hin die Transformation eines Objektes. Dein Player wurde also von dem Dynamiksystem im letzten durchlauf in die Plane verschoben. Dann lief die Kollisionserkennung und nun läuft der korrektur Prozess von der Dynamik und muss die Objekte so positionieren, dass die Kräfte in etwa korrekt bleiben aber nix mehr kollidiert. Da die Kollision schon ein Korrekturvektor berechnet hat, kann man nun auf nummer sicher gehen und setzt den Körper einfach nur an die Vorgeschlagene Position oder macht ein bisschen Coderfoo(eine Gegenkraft, die Objekte ein zurück stößt, wenn sie kollidieren). Da man oft mehrere Kollisionspunkte mit einmal hat, ist das korrigieren nicht so trivial und es kann passieren, das nach der korrektur immer noch eine kollision vor liegt. An diesem Punkt trennt sich die Spreu vom Weizen, denn hier werden unterschiedliche Verfahren genutzt um z.B. das bekannte Positionsstottern von Objekten oder das stecken bleiben und nicht mehr frei kommen gelöst.

Daraus folgt.
Dein Player wird durch forces gedreht, bewegt, diese werden durch andere forces, wie Reibung, Schwerkraft reduziert bzw. sogar ändern sich(du stehst still, dann gibt es nur die Schwerkraft, die dich jeden durchlauf nach unten zieht und die physik tut dich wieder nach oben korrigieren, wenn unter dir boden ist). Nun hast du eine force, vorwärtslaufen, die tut die physik zusätzlich auf dein player anwenden, setzt die neue position, berechnet die kollision, stellt fest, du steckst im Boden und gibt ne korrektur mit(üblichweise die kürzeste strecke zur Plane), dann berechnest du die Forces neu und setzt die position der Objekte mit der korregierten forces und bist mit dem Physik durchlauf fertig. Damit wirst du die Rampe hoch kommen aber nicht so wie man es erwartet, da gibt es dann algos die dafür sorgen, dass ist aber über meinem aktuellen Wissensstand.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kollisionserkennung: Rampe
BeitragVerfasst: Sa Apr 30, 2011 20:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Danke, genau diese theoretischen Aspekte wollte ich eben mal wissen. Gerade die Aufteilung der Physikengine in zwei Teile war mir vorher nicht klar.

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Kollisionserkennung: Rampe
BeitragVerfasst: Mo Mai 02, 2011 02:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 13, 2011 22:05
Beiträge: 218
Programmiersprache: Lazarus/FPC
Ich hatte mal dasselbe problem, ich schneide kurz an wie ich es gelöst hab:

Dein "boden", also auch die rampe sollte aus lauter Dreiecken bestehen. Du siehst dir die Szene quasi von oben an, und schaust mal in welchem Dreieck sich der Spieler befindet (eine einfache Funktion mit true und false^^), dann stellst du den Spieler als senkrechte Gerade dar und "schneidest" diese mit dem Dreieck im dreidimensionalen Raum. Der Schnittpunkt ist dann die Stehhöhe vom Spieler.(Ich hab dieses Problem mit 3 Seiten Skizzen, eine Nacht wach und mehreren Dosen RedBull aber letztendlich bewältigt) :lol:

Wenn du willst schick ich dir den codee und eine genauere Erklärung per PM. Is nicht so schwer zu verstehen wie es sich jetzt vielleicht anhört. 8)

_________________
Ich teile manchmal heimlich durch Null. - Alber Einstein


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 19 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 15 Queries | GZIP : On ]