Seite 1 von 1

Einheiten bewegen?

Verfasst: 23.05.2009, 21:06
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.

Re: Einheiten bewegen?

Verfasst: 23.05.2009, 23:18
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.

Re: Einheiten bewegen?

Verfasst: 24.05.2009, 12:36
von TGGC
"Steilheit" laesst sich mathematisch am einfachsten als Verhaeltnis von Entfernung zu Hoehenunterscied auffassen. Simpelste Mathematik also! f'`8k

[ ] Autocogito


Gruß, TGGC (Video!)

Re: Einheiten bewegen?

Verfasst: 24.05.2009, 13:18
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.

Re: Einheiten bewegen?

Verfasst: 24.05.2009, 15:38
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.

Re: Einheiten bewegen?

Verfasst: 25.05.2009, 09:59
von odenter
Ok Danke, im Prinzip ja simplel. Ich hab nur völlig falsch gedacht. :)