Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

1

01.08.2006, 13:03

Wegfindung in 3D

Hi!

Ich suche derzeit ein gutes Tutorial oder auch Buch, wo die Wegfindung gut beschrieben wird, weil ich denke, dass mein Ansatz viel zu langsam wäre, und ich da schon lieber auf schnelle bereits vorhandene Algos zurückgreifen möchte ;)
Habt ihr eine Ahnung wo ich so was finde? Google hat mir nicht wirklich viel geholfn. Meist werden nur ganz knapp ganz spezielle Optimierungen beschrieben, aber das wars dann auch. Ich hätte eben gerne einen Überblick! Und dann natürlich auch Lösungswege!
Könnt ihr mir da was empfehlen?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

2

01.08.2006, 13:40

A* D*
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

3

01.08.2006, 14:13

3D-Wegfindung? Wenn du an sowas denkst wie in Shootern, zb FarCry - das ist alles auf 2D-Basis. Stell dir vor du betrachtest das ganze Geschehen von oben, oft reicht das vollkommen aus.

Eine 2D-Wegfindung hab ich mal mithilfe einer kleinen Polygonklasse geschriben: Ein Polygon bestimmt die Positionen auf denen sich der Spieler befinden darf. Wenn der direkte Weg versperrt ist, sollte die Wegfindung auf dem kuerzesten Weg zum Ziel finden (am Rand des Polys) Jetzt braucht das Polygon alle Moeglichen Funktionen zur Abfrage, wie zb: Liegt der Punkt im Polygon? Schneidet eine Linie das Polygon? usw..

Dann sah die Wegfindung in etwa wie folgt aus:
1. Versuche von der Spielerposition zum Ziel zu laufen -> wenns klappt wunderbar
2. Wenn nicht: Sortiere die Eckpunkte des Polys abfallend von der Entfernung des Ziels (Stack)
3. Nimm dir einen Punkt aus dem Stack, fuege ihn einer Liste (Queue) an, und versuche zu diesem Punkt zu laufen.
4. Wenns nicht klappt, weiter bei 3.
5. In der Queue liegen die Punkte des Pfades

Da das ganze nur ein paar 2D-Koordinaten waren, war performance keine grosse Sache.. vielleicht ist dein Ansatz ja ganz ok.. wie sieht der denn aus?
"Have you tried turning it off and on again?"

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

4

01.08.2006, 15:41

Für A* nimm als Googlebegriff "astar finding" und von da aus müsstest Du Dich weiterhangeln können.

Wie gesagt, normalerweise läuft das in 2D.
"Games are algorithmic entertainment."

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

01.08.2006, 15:47

Aber was, wenn der Level nicht nur eine Art Landschaft ist, sondern wirklich in alle 3 Dimensionen ungefähr gleich stark verteilt ist?
Dann wird man mit dem klassischen A* sicher nicht weit kommen. Das ist doch eher für Tile-basierte 2D-Maps geeignet.
Ich würde die 3D-Welt mit "AI-Waypoints" durchziehen und diese als Knoten in einem Graphen betrachten. Wenn du nun von A nach B willst:
- von A aus den nächsten Knoten suchen (= A')
- von B aus den nächsten Knoten suchen (= B')
- den kürzesten Weg vom Knoten A' zu B' im Graphen suchen

Im Graphen werden natürlich nur solche Knoten verbunden, zwischen denen auch physisch ein Weg existieren kann. So ungefähr könnte es ablaufen.

Jetzt könnte man jeder Verbindung zwischen zwei Knoten noch einen Kostenfaktor zuweisen und die Wegkosten zusätzlich zur zurückzulegenden Distanz als Kriterium zu nehmen.

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

01.08.2006, 16:49

David, diese AI-Waypoints kann man hervorragend mit dem A*-Algorithmus bearbeiten. Es ist lediglich pro Knoten eine Liste mit Verbindungen zu Nachbarknoten sowie eine heuristische Schätzdistanz zu anderen Knoten notwendig.
Der A*-Algorithmus ist keinesfalls an irgendwelche Dimensionen gebunden. Der Algorithmus selbst benutzt ja nur eine gewisse Methode zur Generierung von Nachbarknoten zu einem gegebenen Knoten sowie eine Heuristik, um die Entfernung zu jenen Knoten zu ermitteln. Wie diese Generierung und die Schätzung aufgebaut sind, ist dem Algorithmus wumpe: Das können dann Tile-basierte 2D-Landschaften sein (was sehr trivial ist), oder aber auch einzelne Punkte verteilt in einem multidimensionalen Raum.
Kommen Sie nie mit einem Schwert zu einer Schießerei.

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

7

01.08.2006, 16:54

Also das mit den Wegpunkten hab ich mir schon mal überlegt... aber da muss man mal hergehen, und alles mit solchen versehen... Das möchte ich wenn möglich vermeiden, oder etwas finden, dass sie automatisch berechnet.. nur hab ich da wiederum keine Ahnung wie man sowa macht!

Bezüglich Portalsystem + BSP-Tree hab ich einen (von mir ausgesehen) relativ guten ansatz. Der Bot schaut einfach in welchem Raum der Zielpunkt ist, sucht sich die verbindenden Portale raus, und läuft dann von Portalmittelpunkt zu Portalmittelpunkt (ev. mit Kurven angepasst, damits schöner ist). Leider funktioniert dieser Ansatz nur solange, wie keine Gegenstände im Raum liegen... sobald das der Fall ist, funkt es nicht mehr... habt ihr da eine Idee? Oder muss ich da Kollisionstests machen? Nur dann wird die ganze Sache ziemlich langsam... was ich natürlich auch vermeiden will... Komm ich da dann mit diesem Astar teil weiter?

@ Devil
Wofür steht D*?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

8

01.08.2006, 19:07

Dynamic A* ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige