Ba da, dar el vrea sa faca asta prin rotatii, dintr-un motiv sau altul. De exemplu poate vrea sa animeze trecerea de la v2 la v1. Evident, se poate face intr-o infinitate de moduri. Poti proiecta v2 pe planul XZ, calculezi unghiul cu axa X, rotesti atitea grade spre X (adica in jurul lui Y). Dupa aia calculezi unghiul dintre v2 si axa Y, rotesti atitea grade spre Y (adica in jurul lui Z). Sau calculezi ambele unghiuri la inceput, rotesti simultan. Sau te straduiesti un pic sa gasesti rotatia cea mai scurta.
Cu matricea e aceeasi problema, exista o infinitate de matrici care pot face asta. O matrice ar fi aia obtinuta combinind cele 2 rotatii de care am scris mai sus. Alta ar fi derivata din observatia ta de la inceput:
Cod sursă:
0 0 0 0
0 0 0 1
0 0 0 0
0 0 0 1
Sau:
Cod sursă:
0 0 0 0
0 a 0 0
0 0 0 0
0 0 0 1
a = 1 / v1.y
Edit: am citit prost, credeam ca v2 e (0, 1, 0) si ca vrea sa roteasca un vector oarecare sa coincida cu axa Y. De fapt vrea invers. Logica de mai sus ramine acceeasi, doar ca se inverseaza sensul operatiilor. E destul de clar ca vrea sa orienteze ceva pe o directie arbitrara (cum ar fi o camera sau un obiect) si atunci ii trebuie matricea ca sa transforme toate componentele ceva-ului (vertecsi, axe, ce-o fi). Cel mai simplu calculeaza un quaternion pentru asta, cam pe acelasi principiu povestit mai sus cu proiectia pe un plan, rotit, proiectia pe alt plan, etc. Evident, se poate si fara quaternioni, facind aceleasi operatii de proiectie si extragind unghiuri euleriene.
Edit 2: daca ar avea toate axele sistemului local de coordonate al obiectului (si probabil ca le are, doar ca ne spune doar despre v1, care e up vector-ul), matricea de transformare s-ar obtine punind axele drept coloane.