ciao a tutti,
sto facendo computer graphics in C/C++ e dobbiamo fare un assignment circa degli uccelli che volano nel mondo 3d.
Il mio problema è il seguente: questo uccello deve guardare avanti rispetto la sua direzione, in modo che il suo movimento sia naturale. Non riesco a fare proprio questo. Il problema è più un problema di fisica 1 che di programmazione, ma non ricordo molte cose su vettori e roba varia.
Questa è la funzione che ho fatto io


codice:
void followVector(Bird*p,Vector v)
{
    Vector baseVector = {0.0,1.0,0.0};
    VectorNormalize(&v);

    double angle = VectorAngle(v,baseVector);

    p->rotX=v.z*angle;
    //p->rotY=
    p->rotZ=v.x*-angle;

    //printf("%f %f %f\n",p->rotX,p->rotY,p->rotZ);
}
Ma non funziona molto bene. Nel senso, Ho fatto seguire ad un uccellino la curva di una sinusoidale. In pratica quando risale la curva sembra che miri bene la strada, ma quando inizia a scendere, inizia a guardare un po' storto.

La mia funzione non fa altro che calcolare l'angolo di rotazione tra un vettore fissato (0,1,0), ovvero il vettore direzione iniziale di qualsiasi uccello. Non eseguo alcuna rotazione su Y perché questa corrisponde all'avvitamento dell'uccello, cosa che x adesso non mi interessa.

Avete qualche sistema migliore per ottenere questo risultato?
Vi ringrazio anticipatamente