Autor Wątek: [macierze] Kilka pytań  (Przeczytany 579 razy)

Offline Syriusz

  • Użytkownik

# Sierpień 30, 2009, 20:45:16
Cześć!
Mam kilka pytań dot macierzy.
1. Mam macierz świata, przekształcającą obiekt na scenie. I czy z tej macierzy mogę "wydobyć" aktualną pozycje (translacje) i obrót (w postaci wektora wskazującego kierunek, względem normalnej skierowanej w kierunku osi z świata) w ten sposób (wydaje mi się że tak):
matrix world;
vec4 pos = vec4(0, 0, 0, 1) * world;
vec3 rot = vec3(0, 0, 1) * world;
2. Czy jeśli odp na 1. == true, to czy jak poskładam z nich macierz w następujący sposób to będzie to ta sama macierz (wydaje mi się to oczywiste).
matrix world = create_rotation_mat(rot) * create_translation_mat(pos);3. Czy jeśli mam wektor normalny (rot), to czy mogę utworzyć macierz rotacji w ten sposób:
matrix rotmat = identity;
vec3 n, u, v;
n = rot;
u = n * vec3(0, 1, 0);
v = n * u;
//normalizuje wektory
rotmat =
[ u.x v.x n.x 0 ]
[ u.y v.y n.y 0 ]
[ u.z v.z n.z 0 ]
[ 0   0   0   1 ]
4. Czy jeśli mam macierz przekształcającą punkt (0, 0, 0, 1) do pozycji kamery, i odwrócę tę macierz to otrzymam macierz widoku?

« Ostatnia zmiana: Sierpień 30, 2009, 20:47:16 wysłana przez Syriusz »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Sierpień 30, 2009, 21:15:47
W konwencji DirectX (mnożenie wektora razy macierz, a nie odwrotnie) translacja jest zapisana w czwartym wierszu macierzy, a więc dobrze kombinujesz. Tylko to mnożenie (0,0,0,1) jest trochę niepotrzebne, lepiej po prostu wyciągnij wartości _41,_42,_43 z macierzy i dostaniesz wektor translacji.