Ręczne modyfikacje współrzędnych
Operacje obrotu, translacji oraz skalowania można przedstawić za pomocą macierzy przez którą należy pomnożyć nasze współrzędne wierzchołka którego współrzędne chcemy zmodyfikować. Ogólna postać takiej macierzy to:
Powyższe mnożenie współrzędnych X,Y,Z przez macierz można przedstawić za pomocą poniższych wzorów:
1. Macierz translacji:
a więc operację translacji można przedstawić za pomocą wzorów:
x' = x * 1 + y * 0 + z * 0 + 1 * Tx = x + Tx
y' = x * 0 + y * 1 + z * 0 + 1 * Ty = y + Ty
z' = x * 0 + y * 0 + z * 1 + 1 * Tz = z + Tz
gdzie:
x',y',z' - współrzędne wierzchołka po translacji
x,y,z - współrzędne wierzchołka przed translacją
Tx,Ty,Tz - wartości dla kolejnych osi X,Y,Z o jakie nastąpi translacja
[Patrz też: glTranslate();]
2. Macierz obrotu
a) wokół osi X
za pomocą wzorów:
y' = yo + (y - yo)*cos(kat)+(z-zo)*sin(kat);
z' = zo + (z - zo)*cos(kat) - (y-yo)*sin(kat);
b) wokół osi Y
za pomocą wzorów:
x' = xo + (x - xo)*cos(kat)-(z-zo)*sin(kat);
z' = zo + (z - zo)*cos(kat)+ (x-xo)*sin(kat);
c) wokół osi Z
za pomocą wzorów:
x' = xo + (x - xo)*cos(kat)+(y-yo)*sin(kat);
y' = yo + (y - yo)*cos(kat) - (x-xo)*sin(kat);
gdzie:
x, y, z - współrzędne wierzchołka przed obrotem
x', y', z' - po obrocie
xo, yo, zo - punkt wokół którego nastąpi obrót
kat - kąt o jaki nastąpi obrót
[Patrz też: glRotate();]
3. Macierz skalowania
za pomocą wzorów:
x' = x' * Sx
y' = y * Sy
z' = z * Sz
gdzie:
x', y', z' - współrzędne przed skalowaniem
x, y, z - po skalowaniu
Sx, Sy, Sz - mnożniki operacji skalowania (np. 2 oznacza powiększenie dwukrotne itd...)
[Patrz też: glScale();]
Korzystając z powyższych wzorów modyfikujemy współrzędne X,Y,Z wierzchołków poczym wyświetlamy je w zmodyfikowanej wersji korzystając z poleceń definicji prymitywu.
Wyszukiwarka
Podobne podstrony:
11 (311)ZADANIE (11)Psychologia 27 11 2012359 11 (2)11PJU zagadnienia III WLS 10 11Wybrane przepisy IAAF 10 1106 11 09 (28)info Gios PDF Splitter And Merger 1 11więcej podobnych podstron