Top Banner
Grafika komputerowa Wykłady M.Badura semestr: zimowy 2005/2006
22

Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Mar 01, 2019

Download

Documents

lyanh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Grafika komputerowaWykłady M.Badura

semestr: zimowy 2005/2006

Page 2: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Wyklad 1 – Grafika komputerowa

Grafika komputerowa Wejście Wyjście

Przetwarzanie obrazow obraz obrazRozpoznawanie obrazow obraz dane cyfroweGrafika komputerowa dane cyfrowe obraz

Zastosowanie:

• Interfacy graficzne• CAD• Mapy, Wykresy• Medycyna• Symulacje• Rozrywka

Plan wykładów:

1. Algorytmy rysowania prymitywów graficznych• PutPixel(x,y,kolor)• kolor = GetPixel(x,y)

Prymitywy graficze sa to np. odcinki, okregi, elipse i ...

2. Grafika 2D• Wyswietlanie obiektow 2D• Transformacja obiektow 2D

– przesuniecie (translacja)

– obrot

– skalowanie

3. Grafika 3D• Wyswietlanie obiektow 3D• Rzutowanie

­ rśwnolegle (skośne)­ perspektywa

• Transformacje obiektow 3D• Algorytmy wykrywania niewidocznych linii i powierzchni• Rzucanie cieni przez obiekty• Oswietlenie

4. Modele barw• RGB

5. Fraktale

6. Funkcje OpenGL

Page 3: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinkaPowstanie efektu schodków – aliasigAby zapobiec aliasing stosuje się rysowanie odcinków w taki sposób by  ząbki były koloru jaśniejszego przez co zlewały się z otoczeniem. 

0 m≤1x i1= x i1

y i=m∗x iby i1=m∗x i1b=mx i1b=m∗x imb= yim

y i1=y iRound mx i1=x1 

 

Algorytmy rysowania okregów

Obrót wokół początku układów współrzędnych punktu (0,0). Obrót o kąt wokół początku układu   współrzednych   nazywamy   takie przeksztalcenie,   ktore   P(x,y) przyporzadkuje   P'(x',y'),   taki,   ze|OP| =  |OP'| oraz  kat POP'  =    kat  (fi) ( czarny przy centrum).

Umowa: Jesli fi > 0 to obracamy w ruchu odwrotnym   do   rychu   wskazuwek   zegara. Wspolrzedne P' wyrarzaja się wzorami:

x' = x * cos(fi) – y * sin(fi)y' = x * sin(fi) + y * cos(fi)

Rysowanie okręgu polega na narysowaniu jednej­ósmej a nastepnie odrysowanie tej części poprzez odbicia.

Uwaga! Więcej na temat wykładu drugiego w skrypcie 'Wykład 2 (Rysowanie odcinków i okręgów) ' M.Badury.

Wyklad 3 – Transformacje 2D

Transformacje (przeksztalcenia geometryczne) obiektow 2D.Transformacja na płaszczyznie nazywamy przekształcenie L: R2 ­> R2  w postaci:L(x,y) = (ax + by + c,dx + ey + f), gdzie a,b,c,d,e,f nalezace do R

Page 4: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Jesli P=(x,y) to P'=(x',y') nazywamy obrazem przeksztalcenia L.Jesli F nalezy do  R2 , to L(F) jest obrazem zbiorem F.

PrzypomnienieDodawanie macierzy A = B + C,  AT  =  BT  +  CT

Mnozenie macierzy A = B * C,  AT  =  CT  *  BT  |  AT  =  B∗C T  =  CT  *  BT

Czasem bedziemy zapisywac punkty jako wektor kolumn (lub wierszy):

P = (x,y), P=  [ xy ]Translacja – przesuniecie o wektor, nazywamy takie przeksztalcenie plaszczyzny, gdzie   kazdemu   punktowi   P(x,y)   przyporzadkowany   jest   punkt   P'(x',y')   taki,ze x'= x + tx, y' = y + ty, gdzie tx, ty to pewne liczby rzeczwiste.

W zapisie macierzowym mamy:

P' = P + T, gdzie T= [ txty ] , czyli  [ x 'y ' ]  =  [ x

y ]  +  [ txty ]Skalowanie wzgledem poczatku ukladu wspolzednych punktu [0,0] o skalach Sx,Sy. Skalowaniem nazywamy takie przeksztalcenie plaszczyzny, gdzie kazdemu punktowi P(x,y) przyporzadkowany jest punkt P'(x',y') taki, ze:

x' = x * Sxy' = y * Sy, gdzie Sx, Sy naleza do  R ∖0 

Gdzie Sx,Sy sa wspolczynikami skalowania (skalami) z kierun osi odpowiednio OX, OY. Jezeli Sx = Sy to skalowanie jest jednorodne.Jesli   ∣Sx∣≠0 , ∣Sx∣1  , to mamy zmniejszenie w kierunku osi OX, natomiast jesli ∣Sx∣1  , to analogicznie zwiekszenie w kierunku osi OX. Analogicznie do Sy.

Skalowanie w zapisie macierzowym:

P' = S * P, gdzie S jest macierza skalowania:  S=[ sx 0 0  Sy ]

  [ x 'y ' ]=[S x 0 

0  Sy ]∗[ xy ]=[ Sx xy S y]  

Przyklad:Rozwazamy   trojkat   o   wierzcholkach   A=(1,2),   B=(4,1),   C=(4,4),   Sx=1/2   Sy=2. Wowczas mamy:

  [1/2  0 0  2 ]∗[1  4  4 

2  1  4 ]=[1/2  2  2 4  2  8 ] , zatem otrzymalismy trojkat o wierzcholkach 

A'=(1/2,4) B'=(2,2) C'=(2,8)

Skalowanie wzgledem innego punktu niz punkt [0,0].1 Translacja do punktu [0,0].2 Obrot wokol punktu tak jak powyzej.3 Powrot poprzez odwrotnosc traslacji z punktu pierwszego.

x' = (x – x0) Sx + x0y' = (y – y0) Sy + y0

Wyklad 4 – Transformacje 2D ciag dalszy

PrzypomnienieT t x ,t y  – przesunięcie o wektor [tx,ty]

Page 5: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

S S x , S y  – skalowanie o skalach Sx,Sy wzgledem punktu (0,0)R(fi)    – obrot o kat wokol punktu (0,0)

   S x0 , y0 S x , S y  – skalowanie wzgledem punktu ( x0 , y0 ) o skalach  S x , S y

   Rx0 , y0 fi  – obrot wokol punktu ( x0 , y0 ) o kat (fi)

   S x0 , y0 S x , S y  * P =  S x0 , y0 (P + T( −x0 ,−y0 )) + T( x0 , y0 )

   Rx0 , y0 (fi) * P = R(fi)((P + T( −x0 ,−y0 )) + T( x0 , y0 )

  Px , y=[ xy1 ]∗[

xy

W ]=[x

Wy

W1]

Transformacje 2D we wspolrzednych jednorodnych:

Przesuniecie (translacja):We wspolrzednych jednorodnych przeksztalcenie przesuniecia ma postac

T tx , ty=[1  0  tx0  1  ty0  0  1 ]

Istotnie, jesli P'(x',y') jest obrazem punktu P(x,y), to

  [ x 'y '1 ] =  [1 

0 0

0 1 0

txty1 ] *  [

xy1 ] =  [

xtxyty

1 ]W bardziej zwartej formie P' = T(tx,ty) * P , gdzie T(tx,ty) jest macierza tranlacji.

Przyklad 1:Rozwarzmy   na   plaszczyznie   czworokat   o   wierzcholkach   A(1,1),   B(5,1),   C(4,3), D(1,4).   Przesunmy   ten   czworokat   o   3   jednostki   osi   OY.   Wowczas   macierz przesuniecia bedzie postaci

  T 3,2=[1 0 0

0 1 0

3 2 1 ]

Jesli wspolzedne A,B,C,D zapiszemy w postaci kolumny macierzy

  [A , B ,C , D ]=[1 1 1

5 1 1

4 3 1

1 4 1 ] , to obroty tych wierzcholkow

A',B',C',D' wyrarzamy mnozac macierze T(3,2) i [A,B,C,D]

   [A' ,B ' ,C ' , D' ]=[1  0  3 0  1  2 0  0  1 ]∗[

1  5  4  1 1  1  3  4 1  1  1  1 ]=[4  2  7  4 

3  3  5  6 1  1  1  1 ]

Zatem   otrzymamy   A'(4,3),   B'(8,3),   C'(7,5),   D'(4,6)   (latwo   sprawdzic   ze   sa poprawne).Skalowanie we wspolzednych jednorodnych (wzgledem punktu)

Macierz skalowania we wspolzednych jednorodnych ma mostac S(Sx,Sy) =  [Sx0 0

0 Sy0

0 0 1 ]

Jesli P'(x',y') jest obrazem punktu P(x,y), to

Page 6: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

  [ x 'y '1 ]  =  [Sx

0 0

0 Sy0

0 0 1 ]  *  [ xy1 ]  =  [Sx∗x

Sy∗y1 ]

Inaczej P' = S(Sx,Sy) * P

Obrot we wspolzednych jednorodnych (wzgledem punktu (0,0) o kat fi)Macierz obrotu we wspolrzednych jednorodnych ma postac: 

R(fi) =  [cos fisin fi

0

−sin ficos fi

0

0 0 1 ]

Obracajac punkt P(x,y) wokol punktu (0,0), o kat fi otrzymammy punkt P'(x',y') to znaczy ze:

  [ x 'y '1 ]  =  [cos fi

sin fi0

−sin ficos fi

0

0 0 1 ]  *  [ x

y1 ]  =  [ xcos fi−ysin fi

xsin fiycos fi1 ]

Cwiczenie:Pokazac obrot czworokatu z cwiczenia 1 o kat 30 stopni wokol punktu (0,0)

Skladanie tracformacji we wspolzednych jednorodnych.We   wspolzednych   jednorodnych   skladania   transformacji   odpowiada   mnorzenia odpowiednije macierzy

Skladanie transformacji:T(t1x,t1y) * T(t2x,t2y) = T(t1x+t2x,t1y+t2y) <­ macierze translacji

Skladanie skalowan:S(Sx,Sy) * S(Kx,Ky) = S(SxKx,SyKy) <­ macierze skalowania

Skladanie obrotu (wokol punktu (0,0) o kat fi i psi)R(fi) * R(psi) = R(fi+psi) <­ macierze obrotuSkalowanie wzgledem punktu   P0 x0 , y0   o skalach Sx,Sy (!=0). Macierz takiego skalowania jest iloczynem macierzy  S xo , yo (Sx,Sy)= T( x0 , y0 ) * S(Sx,Sy) * T( −x0 ,−y0 ):

  S xo , yo (Sx,Sy) =  [1 0 0

0 1 0

x0y01 ]  *  [Sx

0 0

0 Sy0

0 0 1 ]  *  [

1 0 0

0 1 0

−x0−y0

1 ]  =  [1 0 0

0 1 0

x0y01 ]  *  [Sx

0 0

0 Sy0

−Sxy0−Syy0

1 ]  = =  [Sx

0 0

0 Sy0

x0 1−Sxy0 1−Sy

1 ]Wobec tego wspolrzedne obrazu P(x',y') punktu P(x,y) mozemy wyrazic z zaleznosci

  P '=S xo , yo Sx , Sy∗Plub inaczej

  [ x 'y '1 ]  =  [Sx

0 0

0 Sy0

x0 1−Sxy0 1−Sy

1 ]  *  [ xy1 ]  *  [Sx x−x0 x0Sy y−y0 y0

1 ]Obrot wokol punktu  P0 x0 , y0  o kat fi:

Macierza takiego obrotu bedzie iloczyn macierzy T( −x0 ,−y0 ) , R(fi) , T( x0 , y0 )

Page 7: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

  S xo , yo (fi) =  [1 0 0

0 1 0

x0y01 ]  *  [cos fi

sin fi0

−sin ficos fi

0

0 0 1 ]  *  [

1 0 0

0 1 0

−x0−y0

1 ]  = =  [cos fi

sin fi0

−sin ficos fi

0

x0y01 ]  *  [1 

0 0

0 1 0

−x0−y0

1 ]  =  [−cos fisin fi

0

−sin ficos fi

0

−x0cos fi−y0sin fi−x0 −x0sin fiy0cos fi−y0

1 ]Wobec tego wspolrzedne obrazu P'(x'y') punktu P(x,y) mozemy wyznaczyc zaleznosci  P' =  Pxo , yo (fi) * Plub inaczej

  [ x 'y '1 ]  =  [cos fi

sin fi0

−sin ficos fi

0

−x0cos fi−y0sin fi−x0−x0sin fiy0cos fi−y0

1 ]  *  [ xy1 ]   = =  [x− x0cos fi− y− y0 sin fix0

x− x0 sin fiy−y0 cos fiy01 ]

Uwagi.Zauwaz,   ze   skladajac   pewna   liczba   trasformacji   z   punktu   6.1­6.3   otrzymamy transformacje, ktorej macierzbedzie postaci

M=[r11 r 21 0 r12 r 22 0 x y 0 ] Przyczym   podmacierz   [r11 r 12

r21 r 22] odpowiada   za   obroty,   skalowanie 

natomiast elementy tx,ty odpowiadaja za przesuniecie

Zauwazmy, ze przy przeksztalceniach mozemy zredukowac liczbe dzialn to jest zamiast wykonywac 9 mnozenia i  6 dodawan:

x '=r11∗xr12∗ytx∗1y '=r21∗xr22∗yty∗11  =0 ∗x0 ∗y1 ∗1

mozemy wykonac 4 mnozenia i 4 dodawania

x '=r11∗xr12∗ytxy '=r21∗xr22∗yty

1  =1

Na   ogol   skladanie   (laczenie)   transformacji   nie   jest   przemienne   (poniewaz mnozenie macierzy nie jest przemienne). Jesli L1,L2 sa dwiema transformacjami , to zlozenie tych transformacji jest przemienne gdy:

L1 L2*translacja *translacja*skalowanie wzgledem (0,0) *skalowanie wzgledem (0,0)*obrot wzgledem (0,0) *obrot wzgledem (0,0)

Page 8: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Wyklad 5 – Transformacje 3D

Transformacja   przestrzeni   trójwymiarowej   nazywamy   przekształcenie   L : R3R3

postaci:

L x , y , z=a1 xb1 yc1 zd1 , a2 xb2 yc2 zd 2 , a3 xb3 yc3 zd3

Punkt P' = L(P) nazywamy obrazem punktu P w przekształceniu L. Podobnie jak na płaszczyźnie   translacji   będziemy   opisywać   za   pomocą   macierzy   podanych   we współrzędnych jednorodnych.

Punkt   Px , y , z ∈R3 we   współrzędnych   jednorodnych   w   reprezentacji   (x,y,z,1)

lub (tx,ty,tz,t) dla  t≠0 

Możemy   przyjąć,   że   punkty   x , y , z∈R3

odpowiadają   punktowi   x , y , z ,1∈R4 lub (x,y,z,w) leżącego w przestrzeni w=1.

Jeśli   w≠0  , to punkt (x,y,z,w) reprezentuje punkt   x /w , y /w , z /w∈R3 . Zbiór wszystkich   współczesnych   jednorodnych   (x,y,z,w)   nazywamy   trójwymiarowa przestrzenią rzutową i oznaczamy  P3 .

Współrzędnym jednorodnym (x,y,z,0) nie odpowiada żaden punkt przestrzeni   R3 . Mówimy, że jest to punkt nieskączoności o kierunku [x,y,z].

PrzykładWspółrzędne jednorodne (2,3,­4,5), (4,­6,8,10), (6,9,­12,15) reprezentują ten sam   punkt   w   R3 (2/5,3/5,­4/5).   Istotnie   (2/5,3/5,4/5,1)   =   1/5(2,3,­4,5)   == ­1/10(­4,­6,8,­10) = 1/15(6,9,­12,15)

Podobnie   jak   przekształcenia   2D   były   reprezentowane   we   współrzędnych jednorodnych przez macierz 3x3 tak przekształcenia 3D będą reprezentowane przez macierze 4x4. Zatem, jeśli P' = L(P)

[ x 'y 'z '1 ]=[ a1 b1 c1 d1

a2 b2 c2 d2

a3 b3 c3 d3

0  0  0  1 ]∗[xyz1]

Opisując poszczególne transformacje będziemy kożystać z prawoskrętnego układu współrzędnych.Układ prawoskrętny

Page 9: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Kierunek patrzenia, dodatni obrót o 90 stopniX OY na OZY OZ na OXZ OX na OY

Wzory   opisujące   poszczególne   przekształcenia   w   układzie prawoskrętnym łatwo przekształcić na wzory obowiązujące w 

układzie lewoskrętnym. Służą do tego przekształcenia układu współrzędnych, które punktu w drugim układzie.

MP=[1  0  0  0 0  1  0  0 0  0  −1  0 0  0  0  1 

]Układ prawoskrętny.

Translacje (przesunięcie)Przesuniecie   jest   przekształceniem,   które   punktowi   P(x,y,z)   przyporządkowuje punkt P'(x',y',z'), gdzie

x' = x + txy' = y + tyz' = z + tz

gdzie tx,ty,tz są pewnymi liczbami rzeczywistymi. Mówimy też, że punkt P jest przekształceniem o wektor [tx,ty,tz]. Przekształcenie jako macierz przesunięcia będziemy oznaczać T(tx,ty,tz).

We współrzednych jednorodnych mamy:

[ x 'y 'z '1]=[1  0  0  tx

0  1  0  ty0  0  −1  tz0  0  0  1 

]∗[ xyz1]=[ xtx

ytyztz

1]  P' = T(tx,ty,tz) * P

Skalownie względem początku układu współrzednychPodobnie jak na płaszczyżnie w przestrzeni   R3 obiekty mogą być zwiększane i zmniejszane w kierunku każdej z osi OX, OY, OZ. Ze współczynnikiem skalowania Sx, Sy, Sz odpowiednio. Skalowanie jest przekształceniem, które przeprowadza punkt P(x,y,z) na punkt P'(x',y',z') taki, że 

x' = Sx * xy' = Sy * yy' = Sz * z

gdzie   Sx,   Sy,   Sz   (wszystkie   nierówne   0)   są   współczynnikami   skalowania. Transformacje   skalowania   i   macierz   skalowania   będziemy   oznaczać   przez S(Sx,Sy,Sz).

Macierz skalowania jest postaci:

Page 10: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

S Sx , Sy ,Sz=[Sx 0  0  0 0  Sy 0  0 0  0  Sz 0 0  0  0  1 

] ,które z założenia P' = S(Sx,Sy,Sz) * P  [ x '

y 'z '1]=[Sx 0  0  0 

0  Sy 0  0 0  0  Sz 0 0  0  0  1 

]∗[ xyz1]=[Sx∗x

Sy∗ySz∗z

1]

Czasem   macierz   skalowania   jest   podana   w   postaci 

S Sx , Sy ,Sz , Sw=[Sx 0  0  0 0  Sy 0  0 0  0  Sy 0 0  0  0  Sw

] ,wówczas   współczynnikiem   skalowania   są   równe 

Sx/Sy w kierunku OX, Sy/Sw w kierunku OY, Sz/Sw w kierunku OZ.

  [ x 'y 'z '1]=[Sx 0  0  0 

0  Sy 0  0 0  0  Sz 0 0  0  0  Sw

]∗[ xyz1]=[Sx∗x

Sy∗ySz∗zSw

]Skalowanie względem dowolnego punktuAby wykonać skalowanie zwględem punku  P0 x0 , y0 , z0 ze współczynnikiem skalowania S x≠0, Sy≠0,  Sz≠0 :

• przesuniecie  T −x0 ,−y0 ,−z0• skalowanie  S S x , S y , Sz• przesuniecie T x0 , y0 , z0

Zatem obrazem punktu  P0 x0 , y0 , z0  ze skalowaniem jest punkt  P ' 0x '0 , y ' 0 , z ' 0

 

x '=x−x0∗Sx

y '=y−y0∗S y

z '=z−z0∗S z

 

  P0 x0 , y0 , z0  nazywamy punktem stałym skalowania względem  P0 x0 , y0 , z0  o skalach   S x≠0, Sy≠0, Sz≠0  oraz macierz tego skalowania będącego  S S x , S y , Sz .

Możemy zatem napisać:

  P=S x0 , y0 , z0 S x , S y , S z∗P=T x0 , y0 , z0∗S x0 , y0 , z0∗T −x0 ,− y0 ,−z0∗P   wobec   tego 

S x0 , y0 , z0Sx , Sy , Sz jest postaci:

S x0 , y0 , z0Sx , Sy , Sz=[1  0  0  x0

0  1  0  y0

0  0  1  z0

0  0  0  1 ]∗[ Sx 0  0  0 

0  S y 0  0 0  0  S z 0 0  0  0  1 

]∗[1  0  0  −x0

0  1  0  −y0

0  0  1  −z0

0  0  0  1 ]=[S x 0  0  x01−S x

0  Sy 0  y01−S y0  0  Sz z01−Sz0  0  0  1 

]

Page 11: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Obroty wokół osi układu współrzędnychW przestrzeni  R3  opisuje obroty wokół prostej zwanej osią obrotów. Obroty wokół osi układu współrzędnych wykonuje się podobnie do obrotów na płaszczyźnie.

Obroty wokół osi OX o kąt (fi)

Obrót ten nie zmienia wartości współrzednej x. Obrazem punktu P(x,y,z) jest punkt P'(x',y',z') to znaczy, że:x' = xy' = y*cos(fi) – z*sin(fi)z' = y*cos(fi) + z*cos(fi)

Obrót   wokół   osi   OX   o   kąt   (fi)   macierzą   obrotu   będącą oznaczoną przez  R x fi.  Zatem  P '=Rx fi∗P .

R x fi=[1  0  0  0 0  cos fi −sin fi 0 0  sin fi cos fi 0 0  0  0  1

]Obroty wokół osi OY o kąt (fi)

Obrót   ten   nie   zmienia   wartości   współrzednej   y.   Obrazem punktu P(x,y,z) jest punkt P'(x',y',z') to znaczy, że:x' = x*cos(fi) + z*sin(fi)y' = yz' = ­x*sin(fi) + z*cos(fi)

Obrót   wokół   osi   OY   o   kąt   (fi)   macierzą   obrotu   będącą oznaczoną przez  R y fi.  Zatem  P '=R y fi∗P .

R y fi=[ cos fi 0  sin fi 0 0  1  0  0 

−sin fi 0  cos fi 0 0  0  0  1

]Obroty wokół osi OZ o kąt (fi)

Obrót   ten   nie   zmienia   wartości   współrzednej   z.   Obrazem punktu P(x,y,z) jest punkt P'(x',y',z') to znaczy, że:x' = x*cos(fi) ­ z*sin(fi)y' = x*sin(fi) + z*cos(fi)z' = z

Obrót   wokół   osi   OZ   o   kąt   (fi)   macierzą   obrotu   będącą oznaczoną przez  R z fi.  Zatem  P '=R z fi∗P .

R z fi=[ cos fi −sin fi 0  0 sin fi cos fi 0  0 

0  0  1  0 0  0  0  1

]Obroty wokół osi równoległej do osi układu współrzednychObroty wokół prostej przechodącej przez punkt  P0 x0 , y0 , z0  opisuje się podobnie do obrotu płaszczyzny wokół dowolnego punku. Aby otrzymać obrót o kąt (fi) zdał prostej   przechodąccej   przez   punkt   P0 x0 , y0 , z0   równoległej   do   jednej   z   osi układu współrzędnych następują kolejne translacje.

Page 12: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

• Takie przesunięcie aby prosta l pokryła się z osią układu współrzędnych do której jest równoległa, np  T −x0 ,−y0 ,−z0 .

• Obrót   o   kąt   (fi)   wokół   osi   układu współrzędnych   na   którą   l   została przesunięta.

• Takie   przesunięcie   aby   prosta   l   znalazla się w postaci wyjściowej

  Rx0 , y0 ,z 0P=T x0 , y0 , z0∗Ry fi∗T −x0 ,−y0 ,−z0

  S=T 0, y0 , z0∗Rx fi ∗T 0,− y0 ,−z0

Wykład 6 – Transformacje 3D ciąg dalszy

Obrót wokół osi równoległych do osi OX

P00,0 lOXobrót

0,0P00,0

 x=x 0

y=y−y0∗cos fi− z−z0∗sin fiy0

z=y−y0∗sin fiz−z0∗cos fiz0

Rrównoległe X fi=T x 0 , y0 , z0∗R x fi∗T −x 0 ,− y0 ,−z0Oś obrotu przez punkt  P0 x0 , y0 , z0 jest równoległa do osi OX. Znajdujemy macierzRrównoległe X fi we współrzędnych jednorodnych.

Rrównoległe X fi=[1  0  0  x0

0  1  0  y0

0  0  1  z0

0  0  0  1 ]∗[1  0  0  0 

0  cos fi −sin fi 0 0  sin fi cos fi 0 0  0  0  1 

]∗[1  0  0  −x 0

0  1  0  −y0

0  0  1  −z0

0  0  0  1 ]=cdn..

cdn=[1  0  0  0 0  cos fi −sin fi −y0 cos fiz0sin fiy0

0  sin fi cos fi −y0 sin fi−z0 cos fi z0

0  0  0  1 ]

P '=T x0 , y0 , z0∗R x fi∗T −x0 ,−y0 ,−z0∗P=T x0 , y0 , z0∗Rx fi∗T −x0 ,−y0 ,−z0∗P

Obrót wokół osi równoległych do osi OY

P00,0 lOYobrót

0,0P00,0

 x=x−x0∗cos fiz−z0∗sin fi x0

y=y0

z=−x− x0∗sin fi z−z0∗cos fiz0

RrównoległeY fi=T x0 , y0 , z0∗Ry fi∗T −x 0 ,−y0 ,−z0Oś obrotu przez punkt  P0 x0 , y0 , z0 jest równoległa do osi OY. Znajdujemy macierzRrównoległe Y fi we współrzędnych jednorodnych.

Page 13: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

RrównoległeY fi=[1  0  0  x 0

0  1  0  y0

0  0  1  z0

0  0  0  1 ]∗[ cos fi 0  sin fi 0 

0  1  0  0 −sin fi 0  cos fi 0 

0  0  0  1 ]∗[1  0  0  −x0

0  1  0  −y0

0  0  1  −z0

0  0  0  1 ]=cdn..

cdn=[ cos fi 0  sin fi −x 0∗cos fi−z0∗sin fix0

0  1  0  0 −sin fi 0  cos fi x 0∗sin fi−z0∗cos fiz0

0  0  0  1]

P '=T x0 , y0 , z0∗R y fi∗T −x 0 ,− y0 ,−z0∗P=T x0 , y0 , z0∗Ry fi∗T −x 0 ,− y0 ,−z0∗P

Obrot wokół dowolnej prostej o kąt (fi)Osią   obrotu   jest   prosta   przechodąca   przez   dwa   różne   punkty   P0 x0 , y0 , z0   i 

P1x1 , y1 , z1 .   Przypomnienie.   Dowolna   prosta   w   przestrzeni   R3   może   być jednoznacznie wyznaczona przez dwa różne punkty, lub przez 1 punkt i kierunek (wektor). Prosta przechodąca przez punkty  P0 x0 , y0 , z0 , P1x1 , y1 , z1  ma kierunkt P0 P1 .

Prosta przechodąca przez punkt   P0 x0 , y0 , z0   w kierunku   V=[x 0 , y0 , z0] przechodzi przez punkt  x0V x , y0V y , z0V z .

Aby wykonać obrót wokół prostej l   o   kąt   (fi)   należy   najwierw wykonać   takie   przekształcenie, które   przeprowadzi   prostą   l   na jedną z osi układu współrzędnych np. OX.

Następnie   wykonać   obrót   wokół osi   układu   współrzędnych   tutaj 

Rx fi

Na   koniec   przeprowadzi transformacje   odwrotne   do   L, które   przywrócą   prostą   l   do pozycji początkowej.

Obliczanie katów (alfa i beta):Trójkąt (0,0,0), P'2 i P2 jest prostokątny o kącie prostym  w wieżchołku P'2.Krok 1: (przesuwamy prosta i obliczmy punkty P2 i P'2)

P2=T −x0 ,−y0 ,−z0∗P1 P2=x1− x0 , y1−y0 , z1−z0P ' 2=x1−x 0 , y1−y0,0 ;

Niech  r=∣OP2∣= x22y2

2z22 , s=∣OP '2∣= x2

2y22 , alfa=kąt P ' 2OX , beta=kąt P2 OP ' 2

Wówczas  cos alfa=x2

s=

x2

x22y2

2sin alfa=

x2

s=

y2

y22y2

2

Page 14: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

cos beta=sr=

x 22y2

2

x22 y2

2z22

sin beta =z2

r=

z2

x22y2

2z22 

W kolejnych krokach wykonamy przekształcenie:Krok 1:  T −x0 ,−y0 ,−z0  Krok 2:  R z−alfa  Krok 3:  Ry −beta  Krok 4:  R x fi  Krok 5:  R y beta  Krok 6:  R zalfa  Krok 7:  T x0 , y0 , z0

  Ry beta ∗P=[sr

0 z2

r0 

0  1  0  0 

−z2

r0 

sr

0  0  0  1]∗[ xyz1] R y beta∗P=

sr

xz2

rz , y ,−

z2

rx

sr

z

Podobnie możemy wyznaczać macierz:  R y −beta , R zalfa ,R z−alfaZatem przekształcenie (transformacja) obrotu wokół osi o kąt (fi) możemy zapisać jako:Ry fi=T −x0 ,−y0 ,−z0∗R z−alfa∗Ry −beta ∗Rx fi∗Ry beta ∗R zalfa ∗T x0 , y0 , z0

Wykład 7 – Symetrie

Symetrie wokół płaszczyzny (odbicia)

Symetria względem płaszczyzny XY

{ x '= xy '= y

z '=−z}SymXY=[1  0  0  0 0  1  0  0 0  0  −1  0 0  0  0  1

]Symetria   ta   zmienia   również   układ   prawoskrętny   na   lewoskrętny   (patrz   – przeksztalca układ współrzędnych).

Symetria względem płaszczyzny YZ

{x '=−xy '=yz '=z }SymYZ=[−1  0  0  0 

0  1  0  0 0  0  1  0 0  0  0  1

]Symeria względem płaszczyzny XZ

{ x '=xy '=−yz '=z }SymYZ=[1  0  0  0 

0  −1  0  0 0  0  1  0 0  0  0  1

]

Page 15: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Symetria względem dowolnej płaszczyzny (pi)

Równanie płaszczyzny (pi): Ax + By + Cz + D = 0PrzypomninieDowolna płaszczyzna może być wyznaczona jednoznczanie przez 3 różne punkty, lub 1 punkt i dwa różne kierunki, lub przez 2 punkty i 1 kierunek, różne od kierunku prostej przechodzącej przez te punkty.

Wyznaczanie wzoru na P' względem dowolnej płaszczyzny

Podstawiamy  P1 , P2 , P3 pod wzór Ax + By + Cz + D = 0;

{A∗x1B∗y1C∗z1D1=0 A∗x2B∗y2C∗z2D2=0 A∗x3B∗y3C∗z3D3=0 } Z tego układu możemy wyznaczyć A,B,C,D.

Wektor n = [A,B,C] jest prostopadły do płaszczyzny. Prosta wyznaczona przez punkt P0 i kierunek v ma równanie  P=P0 t∗v ,gdzie  t∈R

 {x=x 0t∗vx

y=y0t∗v y

z=z0t∗v z} 

P0 P1∈l

 

v=P0 P1

 

v=[ x1−x0 , y1−y0 , z1−z0]

gdy  t∈[0,1] , otrzymujemy odcinek P0 P1Znajdziemy punkt Q nalężący do (pi) taki, że prosta l przechodząca przez P i Q jest prostopadła do (pi). Równanie prostej l:

{X= xt∗nx

Y=yt∗ny

Z=zt∗nz}

gdzie x,y,z są współrzędnymi punktu P,  n=[nx , ny , nz]=[A , B ,C ] wektor prostopadły do płaszczyzny (pi) (n jest wektorem normalnym płaszczyny (pi)),  t∈R , (X,Y,Z) otrzymane punkty prostej l.

{X= xt∗AY=yt∗BZ=zt∗C }

Sprawdzimy dla jakiego  t∈R  punkt  X ,Y , Z ∈R . Punkt ten musi spełnić równanie płaszczyzny 

A xtq∗ABytq∗BC zt q∗CD=0t q A2B2C2=− A∗xB∗yC∗zD

t q=− A∗xB∗yC∗zD

A2B2C2, gdzie  A2B2C 2≠0 

Zatem   mamy   Q   xt q∗A , yt q∗B , zt q∗C .   Ponieważ   P   mamy   równość   wektorów 

PQ=PQ' , więc otrzymujemy równanie Q – P = P' – Q, czyli P' = 2*Q – Q

{x '=2xt q∗A−xy '=2 yt q∗B− yz '=2 zt q∗C −z }={x '= x2∗t q∗A

y '=y2∗t q∗Bz '=z2∗t q∗C }

1. Funkcja szukająca równania płaszczyzny2. Szukanie t_{q}3. Wyznaczanie P'

Page 16: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Transformacje – przekształcenia układu współrzednychAby przekształcić współrzedne punktu w układzie należy wykonać transformacje odwrotną do transformacji układu. Współrzedne “przesunięcia” będą współrzednymi punktu w “naszym układzie”.

Przesunięcie układu o wektor

{x '= x−t∗xy '=−t∗yz '=z−t∗v }P '=T −t∗x ,−t∗y ,−t∗z ∗P

Skalowanie układem o skalach S_{x},S_{y},S_{z} (nie równe 0)

{x '= x∗xS x

y '= y∗yS y

z '=z∗zS z

}P '=S 1 S x

,1 Sy

,1 Sz

∗P

Obroty układu współrzednych wokół osiObrotem układu współrzędnym o kąt (fi) odpowiada obrót punktu o kąt (­fi)

Obrót o kąt (fi) wokół osi OX.

{ x '=xy '=y∗cos fiz∗sin fi

z '=−y∗sin fiz∗cos fi}Rx=Rx − fi

Obrót o kąt (fi) wokół osi OY.

{x '= x∗cos fi−z∗sin fiy '=y

z '= x∗sin fiz∗cos fi}R y=Ry− fi

Obrót o kąt (fi) wokół osi OZ.

{ x '=x∗cos fiy∗sin fiy '=−x∗sin fiy∗cos fi

z '=z }R z=R z− fi

Obrót o kąt (fi) wokół dowolnej osi.Taki obrót należy wykonać podobnie jak obrót punktu wpkół osi l. Patrz  Obrot wokół   dowolnej   prostej   o   kąt   (fi)  z   tą   różnicą,   że   w   kolejnych   krokach wykonujemy odwrotne transformacje.

Wykład 8 – Wyświetlanie obiektów 3D

RzutowanieJest   podstawowym   przekształceniem   geometrycznym   stsowanym   w   grafice   3D. Ogólnie rzutowanie jest pewnym przekształceniem punktu z przestrzeni   Rn na 

przestrzen   Rn−1 .   W   grafice   rozwarzamy   rzutowanie   z   R3 w R2 ,   czasem

z   R2 w R .   Przy  rzutowaniu   na  płaszczyzne   (pi)  obrazem   P  jest   P'  będący 

Page 17: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

punktem przecięcia prostej przechodzącej przez punkt P z płaszczyzną (pi) inaczej płaszczyzną rzutowania.

Rzutowanie perspektywiczneW przypadku rzutu perspektywicznego są to proste przechodzące przez punkt P i punkt będący środkiem rzutowania (punkt obserwacji). Proste takie nazywamy promieniami rzutowania. Wszytkie promienie przechodą przez środek , czyli punkt obserwacji. Rzut perspektywiczny stosuje się przez ustalenie środka rzutowania i odległości od środka rzutowania, która to decyduje o deformacji obiektu 3D.

Rzutowanie równoległeW przypadku rzutu równoległego są to proste przechodące przez punkt P i równoległe o kierunku rzutowania   k . W tym rzutowaniu proste określone są przez kierunek rzutowania. Rzuty zachowują równoległość odcinków i proporcje odcinków równoległych. Rzut równoległy stosuje się najczęściej w rysunku technicznym (projektowanie). 

Równania rzutowaniaWyznaczenie współrzędnych punktu P' na rzutni sprowadza się do obliczenia przecięć promieni rzutowania z rzutnią.

Układ lewoskrętny Układ prawoskrętny

PrzypomnieniePrzejście z jednego układu do drugie uzyskujemy przez transformacje {x' = x; y' = y; z' = ­z;}

Rzut równoleły – równaniaPrzyjumujemy, że rzut (pi) leży na płaszczyźnie XY.   Jednym   z   rzutów   równoległych   jest   rzut prostopadły,   w   którym   obrazem   punktu   P(x,y,z), jest   punkt   P1x , y ,0 .   Znjadziemy   współrzędne x', y' punktu P'.

Oznaczmy  r=P1 P ' .

Wówczas (lewoskrętny):x' = x + r * cos(fi)y' = y + r * sin(fi)Zauważmy, że r = z * ctg(a), zatemx' = x + z * ctg(a) * cos(fi)y' = y + z * ctg(a) * sin(fi)

Wówczas (prawoskrętny):x' = x + r * cos(fi)y' = y – r * sin(fi)r = z * ctg(a)x' = x + z * ctg(a) * cos(fi)y' = y – z * ctg(a) * sin(fi)

Mając dany kierunek   k=[k x , k y , k z] (wyznaczony przez prostą P i P') możemy 

wyznaczyć mnożnik ctg(a) * cos(fi) i ctg(a) * sin(fi) w praktyce jednak 

Page 18: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

określając rzut równoległy podajemy miary kątów a i fi. Mając a i fi możemy wyznaczyć kierunek wektora. W zależności od miary kątów a i fi, niektóre rzuty   równoległe   mają   nazwy.   np.   dla   a   =   arcctg   ½   =   63   stopnie   mamy rzutkawaleryjski, dla 45 stopni mamy rzut wojskowy (gabinetowy).

(10 linijek tekstu których nie mam, trzeba je wziąć najlepiej od Epiego)

Rzut perspektywiczny

x'd=

xzd

y'd=

yzd

x '=x∗dzd

y '=y∗dzd

x '=x

1 zd

y '=y

1 zd

 

Widzimy, że odległość 'z' decyduje o wielkośći wyświetlanego obiektu. Im 'z' wieksze tym wyświetlany obiekt jest mniejszy.

Macierz perspektywy (współrzędne jednorodne)

M per=[1  0  0  0 0  1  0  0 0  0  0  0 

0  0 1 d

1 ]M per∗P=[1  0  0  0 

0  1  0  0 0  0  0  0 

0  0 1 d

1 ]∗[ xyz1 ]=[xy0 

zd1]

 

Przyjmijmy teraz, że rzutnia (pi) leży w płaszczyźnie XY oraz obserwator znajduje się w punkcie  E x0 , y0 , z0=x 0 , y0 ,−d .

Z podobieństwa trójkątów

x ' x0

−z0

=x− x0

z−z0

y ' y0

−z0

=y−y0

z−z0

x '−x0=x−x0

z−z0

∗−z0 y '−y0=y− y0

z−z0

∗−z0

x '−x0=x−x0

1 −zz0

y '−y0=y− y0

1 −zz0

x '=x−x0

1 −zz0

x0 y '=y−y0

1 −zz0

y0

Page 19: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Zauważmy, że

1 −zz0

=1 zd

T x0 , y0 , z0∗M per∗T −x0 ,− y0 ,0

Ćwiczenie:   Znaleźć   wzory   na   rzutowanie   perspektywiczne   przjmując,   że obserwator   znajduje   się   w   punkcie   (0,0,0)   natomiast   rzutnia   (pi)   jest równoległa do punktu XY i przecina oś OZ w punkcie d.

Wykład 9 – Układ obserwatora

Przekształcić układ danych (świata) do układu obserwatora

Patrz przekształcenia układu współrzędnych

Problem:1. Określić kierunki osi w układzie obserwatora2. Przedstawić dane we współrzędnych układu obserwatora

Współrzędne ^O dane są w układzie XYZ. Kierunek ^Z dany jest przez wektorN=[N x , N y , N z]

Niech e1 = [1,0,0], e2 = [0,0,1] będą wersorami w układzie. Oś ^O^Y   okreslimy  za   pomocą  wektora   U  =   N  *   e2  (rzut   e2  na płaszczyzne (pi)).

Oś ^O^X określimy za pomocą wektora V=U*N (z dokładnością do prawoskrętnego układu współrzędnych)

Przypomnienie (iloczyn wektorowy)u=[u x , uy ,uz ] v=[v x , vy , vz]

działanie nieprzemienneu∗v=−v∗u

u∗v=[∣uy u z

v y vz∣,∣uz ux

vz vx∣,∣ux uy

v x vy∣]

Odpowiedź na problem 1.

r1=V∣V∣

r2=U∣U∣

r3=N∣N∣

Odpowiedź na problem 2.Wykonajmy kolejno transformacje w układzie danych:

1. T(­^0x,   ­^0y,   ­^0z)   przesunięcie.   Wtedy   układ   ^0   znajduje   się   w punkcie 0

Page 20: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

2. Taki obrót aby osie ^0^X, ^0^Y, ^0^Z zostały przekształcone na osie 0X, 0Y, 0Z. Macierz takiego obrotu we współrzędnych jednorodnych jest równa:

R=[r1x r1y r1z 0 r2x r2y r2z 0 r3x r3y r3z 0 0  0  0  1

]Aby okreslić obiekty w układzie obserwatora należy wykonać transformacje:M = R * T (­^0x, ­^0y, ­^0z)

x '=r1x∗xr 1y∗yr 1z∗zy '=r 2x∗xr 2y∗yr 2z∗zz '=r3x∗xr 3y∗yr 3z∗z

Przekształcenia w polu wizualizacjiObraz rzutowania na rzutnie (pi)

Określmy przekształcenie F odwzorujące obraz na rzut w polu wizualizacji np. prostokąt na ekranie.

Odwzorowanie F jest złożeniem następujących trzech transformacji1. T −Xmin ,−Y min

2. S U max−U min

X max−Xmin

,V max−V min

Y max−Y min

3. T Umin , V min Zatem:

F=T U min ,V min∗S U max−U min

X max−Xmin

,V max−V min

Y max−Y min

∗T −X min ,−Y min

Obcinanie (wykonuje się we współrzędnych obserwatora)Z­obcinanie

Z­obcinanie jest wyznaczaniem tej części odcinka  P0 P1 , która leży przed obserwatorem, tzn przed płaszczyzną z = ­d. 0 * x + 0 * y + 0 * z = ­dJeśli  współrzędna z końców są większe od ­d to cały odcinek jest widoczny i 

Page 21: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

nie   obcinamy,   jeśli   współrzędne   z   końców   odcinka   są   mniejsze   od   ­d   to odcinej jest niewidoczny i nie obcinamy go ponieważ nie jest wyświetlany.

Jeśli jeden z końców odcinka ma współrzędne większe od ­d, a drugi mniejszą od ­d to należy wykonać Z­obcinanie. Przyjmijmy, że współrzędne z punktu 

P0 jest większa od ­d, natomiast  P1 jest mniejsza od ­d.

Odcinek   P0 P1 możemy przedstawić za pomocą równań parametrycznych. Jeśli 

t∈R to równanie określa prosta przechodząca przez  P0 i P1

x= x0t∗x1−x 0y=y0t∗y1−y0z=z0t∗ z1−z0

   t∈[0,1]

Znajdujemy   współrzędne   punktu   Q∈P0 P1 ,   który   jest   przecięciem   odcinka 

P0 P1 z płaszczyzną z = ­d. (Punkt Q spełnia równania odcinka i równania płaszczyzny). Zatem:

−d=z0t∗ z1−z0 t=−d−z0

z1−z0

t=dz0

z0−z1Mamy zatem następujące współrzędne punktu Q:

x=x0dz0

z0−z1

∗ x1−x0

y= y0dz0

z0−z1

∗y1−y0

z=−3 4

d Sprawdzić bo miwyszło z=z0−d

W   praktyce   Z­obcinanie   stosuje   się   w   płaszczyźnie   przed   obserwatorem. Obcinanie do ostosłupa (prostopadłościanu widzenia).

Ćwiczenia. Określić (znaleźć) wzory na obcinanie do ostrosłupa widzenia.

Wykład 10 – Reprezentacja brył w scenie 3D

Wyznaczanie widocznych linii i powierzchni w scenie 3D.Zadanie   (problem).   Chcemy   wyznaczyć   te   linie   i   powierzchnie   lub   ich fragmenty, które widzialne są z kierunku obserwacji. Proces taki określamy jako   wyznaczenie   linii   powierzchni  niewidocznych,   lub   jako  eliminowanie linii i powierzchni niewidocznych. W praktyce stosowane są dwa podejścia.

Algorytm z precyzja obrazkową (Z­buffor)

for ( dla każdego piksela ){Wyznaczyć obiekt ściany najbliższej i taki, którego rzut zawiera piksel, a następnie wyświetlić piksel w kolorze tego obiektu.

Page 22: Grafika komputerowa - Kolos Wikikolos.math.uni.lodz.pl/~archive/Grafika komputerowa/Wyklad wersja 3... · Wyklad 2 – Algorytmy wyświetlania Algorytmy konwersji odcinka Powstanie

Nakład   obliczeniowy   jest   rzędu   takich   algorytmów   jak   rzędu  O(n * p), n – liczba obiektów (ścian) w scenie, p – liczba pikseli.}

Algorytm z precyzją obiektową (malarski)

for ( każda ściana ){Okreslić te fragmenty, które są widoczne i wyświetlić je w kolejności od najdalszych do najbliższych.

Nakład obliczeniowy jest rzędu O(n * n), gdzie n – liczba ścian.}

Rozważmy przypadek, gdy scena zbudowana jest tylko z jednej bryły wypókłej. W takim przypadku ściana bryły albo jest widoczna albo jest nieidoczna, nie ma możliwości aby fragment ściany był widoczny.

(1 rysunek)

Załużmy,   że   każda   ściana   jest   zorientowana   w   kierunku   przeciwnym   do wskazówek zegara. Wystarczy badać kąt jaki tworzy wektor normalny n ściany z wektorem określającym kierunek patrzenia.

W przypadku rzutu równoległego jest to kierunek rzutu, w przypadku rzutu perspektywicznego może to być wektor o początku w punkcie obserwacji E i końcu w dowolnym punkcie ściany.

Mając   kąt   pomiędzy   wektorami   k ,n wyznaczymy   z   iloczynu   skalarnego 

k∗n=∣k∣∗∣n∣∗cos kąt pomiędzy wektorami k ,n

(1 rysunek)

Zauważmy  jednak, że  dla kątów   a∈−90o,90o ściana odwrócona  jest tyłem, czyli   jest   niewidoczna,   natomiast   dla   pozostałych   kątów   ściana   jest odwrócona przodem, czyli jest widoczna, ponieważ znak iloczynu skalarnego zależy od znaku cos(a) oraz cos(a) > 0 dla  a∈−90o,90o , więc aby okreslić widoczność   ściany   wystarczy   badać   znak   iloczynu   skalarnego k∗n=∣k∣∗∣n∣∗cos kąt pomiędzy wektorami k ,n , jesli jest większy od 0 to ściana 

jest niewidoczna.