|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Pathfinder [c++]
sto sviluppando una applicazione ora mi sto impegnando con l'AI (intelligenza artificiale)
ho delle sfere che seguono il path della spline o linea (editable mesh) l'oggetto è salvato come spline.x In pratica la mia applicazione simula una strada con la sua carreggiata che in questo caso è delimitata dal bordo interno (carreggiata sinistra da una spline) e carreggiata destra da un'altra spline, Ora devo muovermi con la sfera e devo fare in modo di non oltreppassare i bordi cioè andare fuori strada. L'oggetto spline (linea fatta con 3ds max) è composta di tot vertici la lunghezza tra un vertice e l'altro costituisce un vettore che ha caratteristiche di posizione, direzione e lunghezza. la velocità della sfera la ottengo così: position = pNode[0].Pos + (PathDir[0].Dir * pAI->Vel * pAI->TimeWay); ....... sarebbe posizione della sfera = posizione del nodo + la direzione normalizzata * la velocità * il tempo cioè la velocità di movimento da un punto ad un altro compresa in un secondo. N.B TimeWay è il tempo appunto. questo è un disegno che spiega la spline e il suo corso se il percorso dei vertici è dritto nessun problema la sfera si muove perfettamente ed è allineata. Chiaramente le sfere le devo muovere se come nel disegno la spline svolta a destra o sinistra il calcolo si và a fare benedire cioè la sfera non segue bene il path e scatta in avanti per esempio nella curva a destra all'indietro nella curva a sinistra recuperando cmq la sua posizione ma in modo brusco di cambiamento di posizione. nel disegno e cmq la prova che sto facendo è la seguente: se guardate il disegno e il codice capite qual'è il problema dello scatto. Ci sono quasi vicini ma mi manca un passaggio. IL PROBLEMA DELL'ALGORITMO: spostando la sfera a +5 dalla spline essa fà tutto il path del vettore da vertice a vertice quando il vettore del prossimo nodo è a destra la sfera finisce la lunghezza del path fino al nuovo nodo mentre invece la sfera dovrebbe concludere prima il path all'altezza del nodo successivo a +5 e girare sul nuovo nodo senza cambi di posizione brusca. ---------------code------------------ pAI->vDiff=PathDir[0].Dir * pAI->Vel * pAI->TimeWay;//Diff tiene conto diTimeWay la direzione del path è la velocità position+=Posizione(&pObject[0]); //posizione della sfera a +5 pNode[1].Pos=pNodePath[pAI->WayPos+1].Pos;//copio la posizione del nodo successivo in una var temporanea pNode[1].Pos+=Posizione(&pObject[0]);//sposto il nodo successivo a +5 vLength = pNode[1].Pos - position;//posizione del nodo successivo - posizione della sfera vLength1 = pNode[0].Pos - position - pAI->vDiff; q=Path[pAI->WayPos].Length*pAI->Scale;//q = la lunghezza del path del vettore q1=D3DXVec3Length(&vLength);//assegnamento al float per i calcoli q+=q1;//q=lunghezza del path + posizione nodo successivo meno posizione della sfera if(D3DXVec3Length(&vLength) >= q-D3DXVec3Length(&vLength1))//se ha raggiunto o superato la lunghezza del path del vettore cambio nodo { ----------end code------------------- spero di essermi spiegato e so anche che non è un argomento semplice ciao Ultima modifica di okay : 23-08-2005 alle 00:00. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:13.



















