Animowana grafika 3D

Transkrypt

Animowana grafika 3D
Grafika komputerowa
Opracowanie: J. Kęsik
[email protected]
Transformacje 3D
Podobnie jak w przestrzeni 2-wymiarowej, dla
przestrzeni
3-wymiarowej
definiujemy
transformacje RST:
•
•
•
przesunięcie
zmiana skali
obrót wokół dowolnej osi współrzędnych
Bardziej
skomplikowane
złożeniem podstawowych
transformacje
Animowana grafika 3D - J. Kęsik
są
Transformacje 3D
Podobnie jak w 2D, do obliczeń transformacji
wykorzystuje się wsp. Jednorodne
( x, y, z )  [ x
( x' , y ' , z ' )  [ x'
y
z 1]
y ' z ' 1]
Rzut w przestrzeni 4-ro wymiarowej…
Animowana grafika 3D - J. Kęsik
Transformacje 3D
Transformacje są zapisywane za pomocą macierzy
transformacji T ,
[ x'
y ' z ' 1]  [ x
y
z 1]  M
nie zyskuje ona 3 wymiaru w stosunku do jej
odpowiednika w 2D. Jest powiększona do
rozmiaru 4x4
Jest to bardzo istotne z punktu widzenia
złożoności zarówno obliczeń wykonywanych przez
komputer jak i kodu tworzonego przez
programistę
Animowana grafika 3D - J. Kęsik
Macierz transformacji
 m11
m
21

M
 m31

m41
m12
m13
m22
m23
m32
m33
m42
m43
m14 

m24 
m34 

m44 
Przygotowanie transformacji polega na złożeniu
transformacji elementarnych
Animowana grafika 3D - J. Kęsik
Macierz transformacji
Przesunięcie
1 0
0 1
T (t x , t y , t z )  
0 0

t x t y
0
0
1
tz
0
0
0

1
Składa się z przesunięć wzdłuż poszczególnych osi
Animowana grafika 3D - J. Kęsik
Macierz transformacji
Skalowanie
sx
0
S (sx , s y , sz )  
0

0
0
sy
0
0
0
0
sz
0
0
0
0

1
Złożenie
skalowania
w
stosunku
poszczególnych osi.
Uniknięcie zniekształcenia tylko wtedy gdy
sx  s y  sz
Animowana grafika 3D - J. Kęsik
do
Macierz transformacji
Obrót (względem osi x)
0
1
0 cos 
Rx ( )  
0  sin 

0
0
0
sin 
cos 
0
0
0
0

1
Obrót zawsze względem jednej z osi. Obrót
względem środka układu wsp. nieokreślony – brak
płaszczyzny obrotu
Animowana grafika 3D - J. Kęsik
Macierz transformacji
Obrót (względem osi y)
cos 
 0
Ry ( )  
 sin 

 0
0  sin 
1
0
0 cos 
0
0
0
0
0

1
Animowana grafika 3D - J. Kęsik
Macierz transformacji
Obrót (względem osi z)
 cos 
 sin 
Rz ( )  
 0

 0
sin 
cos 
0
0
0
0
1
0
0
0
0

1
Animowana grafika 3D - J. Kęsik
Macierz transformacji
Transformacja złożona
Złożenie transformacji wiąże się z nieco bardziej
złożoną procedurą jak w przypadku 2D
Wyznaczenie macierzy M przebiega kilku etapowo
w zależności od złożoności przekształcenia
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Przykładowa transformacja polega na obrocie
obiektu o kąt  wokół osi wyznaczonej przez dwa
punkty
P2
P1
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Krok 1 – wyznaczenie wektora obrotu
Jest on zaczepiony w
jednym
z
punktów
i styczny do osi obrotu
P2
P1
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Krok 1 – wyznaczenie wektora obrotu
 x2  x1
u  [a b c]  
 v
y2  y1
v
z2  z1 

v 
P2
v  ( x2  x1 )2  ( y2  y1 )2  ( z2  z1 )2
Wektor
u
znormalizowany
jest
u
P1
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Krok 2 – przesunięcie osi obrotu do środka ukł.
wsp.
Przesunięcie początku
wektora u z (x1, y1, z1) do (0,
0, 0):
P2
u
P1
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Krok 2 – przesunięcie osi obrotu do środka ukł.
wsp.
0
0
 1
 0
1
0

T ( x1 , y1 , z1 ) 
 0
0
1

 x1  y1  z1
0

0
0

1
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Krok 3 – Obrócenie osi i obiektu tak, aby oś stała
się współliniowa z jedną z osi układu
a)
b)
położenie osi na płaszczyźnie XZ
obrót wokół osi Y
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Krok 3 a)
położenie osi na płaszczyźnie XZ
Położenie wektora u na
płaszczyznę XZ jest
równoznaczne z obrotem go o kąt
α
u
u’
α
uz
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Krok 3 a)
położenie osi na płaszczyźnie XZ
Wyznaczenie kąta α nie jest
potrzebne bezpośrednio, należy
wyznaczyć jego sin i cos (dla
macierzy obrotu)
u  [a b c]
u '  [0 b c ]
u z  [0 0 1]
c
b
u
u’
α
uz
a
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Krok 3 a)
położenie osi na płaszczyźnie XZ
Można je wyznaczyć z
skalarnego i wektorowego:
iloczynu
c
u 'u x  u ' u x cos 
u 'u x  0  0  b  0  c 1  c
u'  b  c  d
2
2
ux  1
c
cos  
d
b
u
u’
α
ux
a
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Krok 3 a)
położenie osi na płaszczyźnie XZ
Można je wyznaczyć z
skalarnego i wektorowego:
iloczynu
c
u 'u x  u X u ' u x sin   u X d sin 
u X
u 'u x  det  0
 0
uY
b
0
uZ 
c   u X  b
1 
b
sin  
d
b
u
u’
α
ux
a
Animowana grafika 3D - J. Kęsik
Transformacja złożona - przykład
Krok 3 a)
położenie osi na płaszczyźnie XZ
Ostatecznie otrzymujemy macierz obrotu (rotacji)
 cos 
 sin 
Rz ( )  
 0

 0
sin 
0
cos 
0
0
1
0
0
 c
0 
d


0
b



0  d
  0
1 
 0
b
d
c
d
0
0

0 0

0 0

1 0
0 1
Transformacja złożona - przykład
Krok 3 b)
obrót wokół osi Y
Ponownie, wyznaczenie kąta β nie jest
potrzebne
bezpośrednio,
należy
wyznaczyć jego sin i cos (dla macierzy
obrotu)
u’
d
β u”
ux
a
Transformacja złożona - przykład
Krok 3 b)
obrót wokół osi Y
Można je wyznaczyć z
skalarnego i wektorowego:
iloczynu
u ' 'u x  uY u ' ' u x sin   uY sin 
u X
u ' 'u x  det  a
 0
uY
0
0
uZ 
d   uY  (a )
1 
sin   a
u’
d
β u”
ux
a
Transformacja złożona - przykład
Krok 3 b)
obrót wokół osi Y
Można je wyznaczyć z
skalarnego i wektorowego:
iloczynu
u' 'u z  u' ' u z cos 
u' '  a 2  d 2 
 a ( b c ) 
2
2
2
 a 2  b2  c2  1
cos   1
uz  1
u’
d
β u”
ux
a
Transformacja złożona - przykład
Krok 3 b)
obrót wokół osi Y
Ostatecznie macierz obrotu ma postać:
cos 
 0
Ry (  )  
 sin 

 0
0  sin 
1
0
0 cos 
0
0
0  d
0  0

0   a
 
1  0
0
1
0
0
a
0
d
0
0
0
0

1
Transformacja złożona - przykład
Krok 4 - obrót obiektu o kąt Θ względem osi X
0
0
0
1
0 cos  sin  0

Rx ()  
0  sin  cos  0


0
0
1
0
Transformacja złożona - przykład
Krok 5 – transformacja odwrotna do kroku 3
1
1
M o1  R y (  )  Rz ( )
Transformacja złożona - przykład
Krok 5 – transformacja odwrotna do kroku 2
M o 2  T 1 (  x1 , y1, , z1 )
Transformacja złożona - przykład
Ostatecznie
transformacja
złożona
iloczynem transformacji pośrednich
będzie
M  T ( x1 , y1, , z1 )  Rz ( )  R y (  )  Rx ()  M o1  M o 2