Einheiten bewegen?

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design
Antworten
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Einheiten bewegen?

Beitrag von odenter »

Mir geht es um das bewegen von Einheiten in einem 3D Terrain.
Wenn ich also ein Terrain mit Hügeln und Bergen habe, wie bekomme ich es hin das die Einheiten z.B. auf/über den Hügel können aber nicht auf den Berg, weil der Hang vielleicht zu steil ist?
Oder z.B. das Einheiten auf einer ebenen Fläche schneller sind als auf einer uebenen, also wenn es den Hügel raufgeht?
Und das letzte was mich interessiert, wie sorge ich dafür das alle Einheiten die gleiche Entfernung zurücklegen? Also das sie sich praktisch so bewegen wie in einem 2d Iso-Game, muss ich den Wert bzw. die Werte einfach abschätzen oder gibt es da irgendwas für?

Falls die Frage besser in "Algorithmen und Datenstrukturen" aufgehoben ist bitte verschieben.
FredK
Beiträge: 31
Registriert: 06.05.2004, 17:11

Re: Einheiten bewegen?

Beitrag von FredK »

Um die "Steilheit" des Berges/Hügels auszurechnen nimmst du das Dreieck, auf dem du stehst. Von diesem Dreieck berechnest du (falls noch nicht vorhanden) den Normalenvektor und bestimmst mit dem Skalarprodukt den Winkel zum Vektor der nach oben zeigt (0/1/0). Nun hast du den Steigungswinkel. Dieser Winkel gibt halt an wie steil es grade ist. Jetzt legst du eine Grenze fest, ab der ein Hügel zu einem unbezwingbaren Berg wird und lässt ab da die EInheiten nicht mehr weiter laufen. Ebenso kannst du die Geschwindigkeit anhand des Steigungswinkels modulieren.
Damit die Einheiten immer die gleiche Entfernung zurücklegen brauchst du eigendlich gar nichts zu machen. Du bewegst sie halt in x/z-Richtung mit einer vorher festgelegten Geschwindigkeit. Die Bewegung nach oben (y) ist halt unabhängig davon.
Benutzeravatar
TGGC
Establishment
Beiträge: 569
Registriert: 15.05.2009, 18:14
Benutzertext: Ich _bin_ es.
Alter Benutzername: TGGC
Echter Name: Ich _bin_ es.
Wohnort: Mainz
Kontaktdaten:

Re: Einheiten bewegen?

Beitrag von TGGC »

"Steilheit" laesst sich mathematisch am einfachsten als Verhaeltnis von Entfernung zu Hoehenunterscied auffassen. Simpelste Mathematik also! f'`8k

[ ] Autocogito


Gruß, TGGC (Video!)
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Einheiten bewegen?

Beitrag von eXile »

Falls dein Terrain eine geringe Auflösung hat, würde ich jedoch von einem Test, welcher auf der Steigung der des Polygons, auf dem sich die Einheit gerade befindet, abraten. Der Grund dafür ist einfach, das die Steigung dann sich zu abrupt ändern kann. Du könntest dies dann so umgehen, dass du eine interpolierende Funktion des Terrains berechnest, und einfach die Richtungsableitungen an bestimmten (hoffentlich mit höherer Auflösung als das vorherige Terrain) Samplepunkten berechnest. Zusammen mit einem Test auf Polygonebene für die Grenzsteigung, an der Schluss ist, sollte sich damit an allen übrigen Stellen ein glatter Geschwindigkeitsübergang erzeugen lassen.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Einheiten bewegen?

Beitrag von Zudomon »

FredK hat geschrieben:Um die "Steilheit" des Berges/Hügels auszurechnen nimmst du das Dreieck, auf dem du stehst. Von diesem Dreieck berechnest du (falls noch nicht vorhanden) den Normalenvektor und bestimmst mit dem Skalarprodukt den Winkel zum Vektor der nach oben zeigt (0/1/0). Nun hast du den Steigungswinkel. Dieser Winkel gibt halt an wie steil es grade ist. Jetzt legst du eine Grenze fest, ab der ein Hügel zu einem unbezwingbaren Berg wird und lässt ab da die EInheiten nicht mehr weiter laufen. Ebenso kannst du die Geschwindigkeit anhand des Steigungswinkels modulieren.
Da du hier mit einem Achsenorientierten Vektor ein Skalarprodukt bildest, reicht es aus, einfach direkt, in diesem Fall die Y-Komponente, auszulesen (aus der normalisierten Normale). Bei einem Terrain, was auf X und Z Achse ausgerichtet ist, kann dieser Wert nur 0 - 1 Betragen. Um genau zu sein, etwas über 0, da es keine Senkrechten Wände gibt. Bei 1 ist das Terrain an dieser Stelle waagerecht. Damit brauchst du als Prüfung nur schauen, ob der Wert größer eines Schwellwertes ist, um die Einheit frei zu bewegen. Du könntest dann noch, falls der Wert kleiner als der Schwellwert ist, einen zweiten Vektor berechnen. Wenn du nämlich das Kreuzprodukt zwischen (0/1/0) und deiner Normale berechnest, und dann das Kreuzprodukt zweichen Normale und dem neuen Vektor, dann solltest du einen Vektor bekommen, der in die Richtung zeigt, in der das Dreieck abfällt. So könntest du dann eine Einheit, die ein zu steiles Dreieck betritt in diese Richtung rutschen lassen.
odenter
Establishment
Beiträge: 207
Registriert: 26.02.2009, 11:58

Re: Einheiten bewegen?

Beitrag von odenter »

Ok Danke, im Prinzip ja simplel. Ich hab nur völlig falsch gedacht. :)
Antworten