Percorso "Linea di vista" attraverso la mesh di navigazione


9

Voglio calcolare la linea di vista in una mesh di navigazione.

Si consideri l'immagine qui sotto, la linea gialla è il risultato di solo A * e la linea rossa è il risultato di un algoritmo "linea di vista" che utilizza la linea gialla come input. Ora l'unità può muoversi direttamente senza "zig-zagging".

Che cos'è un algoritmo per calcolare quella "linea di vista"?

inserisci qui la descrizione dell'immagine

Risposte:


6

Stai cercando un algoritmo a imbuto.

Eccone uno semplice

http://digestingduck.blogspot.com.es/2010/03/simple-stupid-funnel-algorithm.html

Fondamentalmente, l'algoritmo identifica i bordi come portali e crea un imbuto che viene testato rispetto al vertice dei bordi per verificare se sono all'interno dell'imbuto o meno.

Nel passaggio A l'imbuto è costruito con la posizione iniziale e il portale attraversato da una linea gialla.

Nel passaggio B viene verificato il portale successivo, il vertice superiore si trova all'interno dell'imbuto, quindi ora passa la linea superiore dell'imbuto. Ma il vertice inferiore è fuori dall'imbuto perché la linea rossa è sotto la linea verde, quindi la linea di fondo non passerà attraverso di essa, ma continuerà a passare attraverso il vertice inferiore del portale precedente.

Come puoi verificare, l'imbuto sarà più piccolo e più piccolo, fino al passaggio F, dove non è possibile costruire l'imbuto, perché la linea rossa crea un imbuto errato, quindi il vertice superiore viene scelto come nuovo punto di partenza e un nuovo imbuto sarebbe essere costruito se il punto finale non si trova in quella mesh.

inserisci qui la descrizione dell'immagine

Tieni presente che questo tipo di algoritmo consente anche una soluzione semplice al problema delle dimensioni del modello, perché puoi considerare che i portali sono più piccoli del 2xradio del tuo modello.

inserisci qui la descrizione dell'immagine


6

C'è una tecnica semplice che può essere utilizzata con percorsi generati usando questa idea di linea di vista. Fondamentalmente, si desidera percorrere il percorso e in ciascun nodo, "guardare indietro" due il nodo prima dell'ultimo per vedere se è visibile. Se il nodo precedente all'ultimo è visibile, è possibile rimuovere l'ultimo nodo (poiché si ha una linea di vista tra il nodo corrente e il nodo precedente all'ultimo, l'ultimo nodo, essendo un nodo intermedio, non è richiesto).

inserisci qui la descrizione dell'immagine

Un articolo di Gamasutra ha il seguente esempio di pseudo codice:

checkPoint = starting point of path
currentPoint = next point in path
while (currentPoint->next != NULL)
if Walkable(checkPoint, currentPoint->next)
// Make a straight path between those points:
temp = currentPoint
currentPoint = currentPoint->next
delete temp from the path
else
checkPoint = currentPoint
currentPoint = currentPoint->next

Questo algoritmo fa come vuoi, in cui la Walkablefunzione è essenzialmente una funzione di linea di vista, ma leggermente migliorata per includere anche situazioni in cui il percorso è visibile, ma non percorribile (ovvero pozzi, trappole, zone riservate).


Capisco quello che stai dicendo, ma ancora non so come calcolare la linea di vista. Potresti descrivere cosa sarebbe nella funzione Walkable usando una mesh di navigazione triangolare?
Yannick Lange

Questa risposta riguarda il percorso basato sulla griglia ed è inutile in uno scenario di mesh di navigazione
Blau
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.