GKIW Moduł 4: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Daniel-PW (dyskusja | edycje)
Nie podano opisu zmian
Daniel-PW (dyskusja | edycje)
Nie podano opisu zmian
Linia 128: Linia 128:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_7.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_7.png|400px]]
|valign="top"|'''Przekształcenie 2D, pochylenie'''
|valign="top"|
 
Pochylenie jest rzadziej stosowanym przekształceniem. Daje możliwość zniekształcenia figury. Nie zachowuje odległości punktów. Figura i jej obraz w tym przekształceniu nie są podobne.
 


|}
|}
Linia 138: Linia 135:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_8.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_8.png|400px]]
|valign="top"|'''Przekształcenie 3D, skrętność układu współrzędnych'''
|valign="top"|
 
Możliwe są dwa ustawienia osi trójwymiarowego układu współrzędnych. Najczęściej do opisu położenia obiektów na scenie (w przestrzeni obiektu) stosowany jest układ prawoskrętny. Natomiast w operacjach związanych z rzutowaniem układ lewoskrętny. Wybór układu współrzędnych dla operacji rzutowania jest konsekwencją naturalnego rozumienia odległości obiektu od obserwatora. Jeśli osie OX i OY zdefiniują układ współrzędnych na rzutni (utożsamianej z płaszczyzną XOY) (pozioma oś OX skierowana w prawo i pionowa oś OY skierowana do góry), to kierunek wzrostu odległości od obserwatora wskaże oś OZ. Tak zdefiniowany układ współrzędnych będzie układem lewoskrętnym.
 
Niech położenie punktu o współrzędnych <math>(x_p, y_p, z_p)</math> w przestrzeni trójwymiarowej reprezentuje wektor P :
 
 
|}
|}


Linia 162: Linia 153:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_11.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_11.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 2D, pochylenie'''
 
Pochylenie jest rzadziej stosowanym przekształceniem. Daje możliwość zniekształcenia figury. Nie zachowuje odległości punktów. Figura i jej obraz w tym przekształceniu nie są podobne.
 
|}
|}


Linia 168: Linia 162:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_12.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_12.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 3D, skrętność układu współrzędnych'''
 
Możliwe są dwa ustawienia osi trójwymiarowego układu współrzędnych. Najczęściej do opisu położenia obiektów na scenie (w przestrzeni obiektu) stosowany jest układ prawoskrętny. Natomiast w operacjach związanych z rzutowaniem układ lewoskrętny. Wybór układu współrzędnych dla operacji rzutowania jest konsekwencją naturalnego rozumienia odległości obiektu od obserwatora. Jeśli osie OX i OY zdefiniują układ współrzędnych na rzutni (utożsamianej z płaszczyzną XOY) (pozioma oś OX skierowana w prawo i pionowa oś OY skierowana do góry), to kierunek wzrostu odległości od obserwatora wskaże oś OZ. Tak zdefiniowany układ współrzędnych będzie układem lewoskrętnym.
 
Niech położenie punktu o współrzędnych <math>(x_p, y_p, z_p)</math> w przestrzeni trójwymiarowej reprezentuje wektor P :
 
:<math>\begin{bmatrix} x_P  \\y_P \\ z_P\\1 \end{bmatrix}</math>
 
Jeśli macierz M opisuje pewną transformację geometryczną w przestrzeni 3D, to operację tę można opisać następująco:
 
:<math>P'=M\cdot P</math>
 
czyli:
 
:<math>\begin{bmatrix} x_P^{'}  \\y_P^{'} \\z_P^{'} \\ 1 \end{bmatrix}=M\cdot \begin{bmatrix} x_P \\y_P \\z_P \\ 1 \end{bmatrix}</math>
 
gdzie P' opisuje położenie punktu po przekształceniu. Oczywiście, jeśli wynik mnożenia macierzy jest nieznormalizowany, to należy dokonać normalizacji.
 
Operacje w przestrzeni 3D opisuje macierz 4x4 w przestrzeni 4D
 
|}
|}


Linia 180: Linia 193:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_14.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_14.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 3D, symetrie I'''
 
Macierze opisujące symetrie płaszczyznowe względem pozostałych dwóch płaszczyzn (XOY i YOZ) mają analogiczną postać ze zmienionym znakiem przy 1 w odpowiedniej kolumnie.
|}
|}


Linia 186: Linia 201:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_15.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_15.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 3D, symetrie II'''
 
Podobnie macierze opisujące symetrie osiowe względem pozostałych dwóch osi (OY i OZ) mają analogiczną postać ze zmienionymi znakami.
|}
|}


Linia 198: Linia 215:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_17.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_17.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 3D, symetrie IV'''
 
Jeżeli założyliśmy, że położenie obiektów sceny będzie opisywane w układzie prawoskrętnym, natomiast rzutowanie będzie rozpatrywane w układzie lewoskrętnym, to współrzędne tego samego punktu w obu układach będą się różniły znakiem przy współrzędnej z. Przeliczenie współrzędnych między układami zapewnia macierz symetrii płaszczyznowej względem XOY.
|}
|}


Linia 204: Linia 223:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_18.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_18.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 3D, przesunięcie I'''
 
Przesunięcie w układzie trójwymiarowym odbywa się w sposób analogiczny do przesunięcia na płaszczyźnie.
|}
|}


Linia 216: Linia 237:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_20.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_20.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 3D, obroty I'''
 
W układzie współrzędnych kartezjańskich trójwymiarowych zdefiniowanie obrotów wokół osi układu wymaga przyjęcia reguł uznawania obrotów za dodatnie. Najczęściej przyjmuje się konwencję, według której dodatnie obroty są zdefiniowane zgodnie z rysunkiem.
 
|}
|}


Linia 222: Linia 246:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_21.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_21.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 3D, obroty II'''
 
Obiekt na rysunku został obrócony o kat <math>- 45^\circ</math> wokół osi OX.
|}
|}


Linia 228: Linia 254:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_22.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_22.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 3D, obroty III'''
 
Obiekt na rysunku został obrócony o kat  <math>45^\circ</math> wokół osi OY
|}
|}


Linia 234: Linia 262:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_23.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_23.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 3D, obroty IV'''
 
Obiekt na rysunku został obrócony o kat  <math>45^\circ</math> wokół osi OZ.
|}
|}


Linia 240: Linia 270:
{| border="0" cellpadding="5" width="100%"
{| border="0" cellpadding="5" width="100%"
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_24.png|400px]]
|valign="top" width="400px"|[[Grafika:GKIW_M4_Slajd_24.png|400px]]
|valign="top"|
|valign="top"|'''Przekształcenie 3D, skalowanie'''
 
Warto zwrócić uwagę na fakt, że jeśli <math>S=S_X=S_Y=S_Z\neq 0</math> to skalowanie można opisać macierzą:
 
:
 
|}
|}



Wersja z 12:56, 5 gru 2006



Przekształcenia 2D, zapis macierzowy

Współczesna grafika komputerowa operuje na milionach elementów (punktów, trójkątów). Przy tak dużej liczbie zachodzi konieczność opisania operacji geometrycznych w taki sposób, aby ich wykonanie było z jednej strony efektywne, a z drugiej, aby opis był prosty i ujednolicony. Takie warunki spełnia opis macierzowy.

Niech P=[xpyp]T opisuje położenie punktu na płaszczyźnie. Najprostszym rozwiązaniem byłoby przyjęcie, że macierz M(2×2) opisuje przekształcenie punktu P na P i że P=MP


Przekształcenia 2D, obrót, problem przesunięcia I

Można zastanowić się nad tym, czy takie podejście do problemu wystarczy do opisu prostych operacji geometrycznych.

Rozpatrzmy zestaw przekształceń na płaszczyźnie: obrót, skalowanie, przesunięcie (translację).

Można zaproponować macierz 2x2, która, opisuje obrót punktu wokół początku układu współrzędnych.

Analogiczny opis można zaproponować dla operacji skalowania.


Przekształcenia 2D, obrót, problem przesunięcia II

Niech MT1=[abcd]. Niech wektor P=[TXTY] opisuje translację punktu na płaszczyźnie.

Czy można znaleźć takie a, b, c, d, aby MT1=[xp+TXyp+TY]=[abcd][xpyp] dla TX0 i TY0 .

Widać że nie jest to możliwe dla współrzędnych dowolnego punktu. Na dodatek punkt P=[00]T byłby punktem stałym takiego przekształcenia.

Jak zatem opisać translację na płaszczyźnie?

Operację tę można opisać macierzą M=[10TX01TY001]

Między współrzędnymi zachodzi następujący związek:

M=[Xp'Yp'1]=[10TX01TY001][XpYp1]

i jest to równoważne opisowi translacji o wektor w postaci układu równań:

{xp'=xp+TXyp'=yp+TY

Tak wykonana operacja wymaga użycia współrzędnych jednorodnych.


Współrzędne jednorodne znormalizowane

Niech xp,yp,zp, opisują położenie punktu w trójwymiarowym kartezjańskim układzie współrzędnych. W grafice komputerowej do opisu położenia oraz opisu operacji (transformacji geometrycznych), którym punkty będą podlegały, jest używany układ współrzędnych jednorodnych znormalizowanych. Dzięki temu wszystkie stosowane transformacje geometryczne mogą być opisane w identyczny sposób za pomocą mnożenia macierzowego. Jeśli współrzędne xp,yp,zp opisują położenie punktu, to odpowiada temu wektor P=[xpypzp1]T we współrzędnych jednorodnych znormalizowanych. We współrzędnych nieznormalizowanych wektor ten miałby postać P=[xpypzpN]T dla N0 . Przy czym xp=xpN , yp=ypN , zp=zpN , co nosi nazwę operacji normalizacji.

Zastosowanie w przypadku przesunięcia na płaszczyźnie współrzędnych jednorodnych można sobie wyobrazić jako umieszczenie płaszczyzny, na której pracujemy, w trójwymiarowym układzie współrzędnych, w taki sposób, aby nie przechodziła ona przez początek układu (tzn. dla z=hz0 ). Wtedy analogiczne opisanie operacji translacji na płaszczyźnie (ale już jako macierz 3x3) da poprawne rozwiązanie, gdyż punkt stały – początek układu współrzędnych jest poza płaszczyzną, na której jest wykonywana operacja. Jednocześnie, aby wynik operacji znajdował się na tej samej płaszczyźnie, najprościej operować na współrzędnych znormalizowanych, czyli pracować na płaszczyźnie z=1.

Gdyby operacja normalizacji nie została wykonana mogłoby się zdarzyć, że wynik operacji leżałby na innej płaszczyźnie – a to nie miałoby sensu

A zatem zawsze jeśli wynik operacji będzie nieznormalizowany zostanie przeprowadzona operacja normalizacji.

Analogicznie dla przekształceń trójwymiarowych można wyobrazić sobie umieszczenie przestrzeni 3D i trójwymiarowego układu współrzędnych wewnątrz układu czterowymiarowego, tak aby nie zawierał on początku układu współrzędnych..


Przekształcenia 2D

Niech położenie punktu o współrzędnych (xp,yp) na płaszczyźnie reprezentuje wektor P :

P=[xPyP1]

Jeśli macierz M opisuje pewną transformację geometryczną to operację tę można opisać następująco:

P=MP

czyli:

[xP'yP'1]=M[xPyP1]

gdzie P' opisuje położenie punktu po przekształceniu. Oczywiście, jeśli wynik mnożenia macierzy jest nieznormalizowany, to należy dokonać normalizacji.

W grafice komputerowej operacje na płaszczyźnie opisuje macierz 3x3.

Można powiedzieć, że macierz M definiuje liniowe funkcje określające każdą ze współrzędnych punktu tzn.:

{xP'=fXM(xP,yP,zP)yP'=fYM(xP,yP,zP)

Wykorzystując rachunek macierzowy przekształcenia punktu można opisać również za pomocą prawostronnego mnożenia macierzy. Wtedy, dla przyjętych wyżej danych operacja wyglądałaby tak.:

PT=PTMT

Jak widać tę samą operację można zapisać jako mnożenie lewostronne lub prawostronne przez macierz przekształcenia.

Tak naprawdę trudno byłoby wskazać uzasadnienie dla wyboru jednej lub drugiej formy zapisu. W książkach dotyczących grafiki komputerowej w ostatnich latach częściej stosowany jest zapis lewostronnego mnożenia, chociaż są autorzy, którzy nadal konsekwentnie trzymają się mnożenia prawostronnego. Natomiast sposób używania zależy od przyzwyczajeń i upodobań użytkownika. Jedno jest jednak bardzo istotne – konsekwencja. Nie można mieszać postaci opisu.


Przekształcenie 2D, symetrie I

Można zaproponować pewien minimalny zestaw operacji: symetrie (względem osi układu współrzędnych i środkowa), obroty, przesunięcie (translacja), skalowanie oraz pochylenie.






Przekształcenie 2D, pochylenie

Pochylenie jest rzadziej stosowanym przekształceniem. Daje możliwość zniekształcenia figury. Nie zachowuje odległości punktów. Figura i jej obraz w tym przekształceniu nie są podobne.


Przekształcenie 3D, skrętność układu współrzędnych

Możliwe są dwa ustawienia osi trójwymiarowego układu współrzędnych. Najczęściej do opisu położenia obiektów na scenie (w przestrzeni obiektu) stosowany jest układ prawoskrętny. Natomiast w operacjach związanych z rzutowaniem układ lewoskrętny. Wybór układu współrzędnych dla operacji rzutowania jest konsekwencją naturalnego rozumienia odległości obiektu od obserwatora. Jeśli osie OX i OY zdefiniują układ współrzędnych na rzutni (utożsamianej z płaszczyzną XOY) (pozioma oś OX skierowana w prawo i pionowa oś OY skierowana do góry), to kierunek wzrostu odległości od obserwatora wskaże oś OZ. Tak zdefiniowany układ współrzędnych będzie układem lewoskrętnym.

Niech położenie punktu o współrzędnych (xp,yp,zp) w przestrzeni trójwymiarowej reprezentuje wektor P :

[xPyPzP1]

Jeśli macierz M opisuje pewną transformację geometryczną w przestrzeni 3D, to operację tę można opisać następująco:

P=MP

czyli:

[xP'yP'zP'1]=M[xPyPzP1]

gdzie P' opisuje położenie punktu po przekształceniu. Oczywiście, jeśli wynik mnożenia macierzy jest nieznormalizowany, to należy dokonać normalizacji.

Operacje w przestrzeni 3D opisuje macierz 4x4 w przestrzeni 4D



Przekształcenie 3D, symetrie I

Macierze opisujące symetrie płaszczyznowe względem pozostałych dwóch płaszczyzn (XOY i YOZ) mają analogiczną postać ze zmienionym znakiem przy 1 w odpowiedniej kolumnie.


Przekształcenie 3D, symetrie II

Podobnie macierze opisujące symetrie osiowe względem pozostałych dwóch osi (OY i OZ) mają analogiczną postać ze zmienionymi znakami.



Przekształcenie 3D, symetrie IV

Jeżeli założyliśmy, że położenie obiektów sceny będzie opisywane w układzie prawoskrętnym, natomiast rzutowanie będzie rozpatrywane w układzie lewoskrętnym, to współrzędne tego samego punktu w obu układach będą się różniły znakiem przy współrzędnej z. Przeliczenie współrzędnych między układami zapewnia macierz symetrii płaszczyznowej względem XOY.


Przekształcenie 3D, przesunięcie I

Przesunięcie w układzie trójwymiarowym odbywa się w sposób analogiczny do przesunięcia na płaszczyźnie.



Przekształcenie 3D, obroty I

W układzie współrzędnych kartezjańskich trójwymiarowych zdefiniowanie obrotów wokół osi układu wymaga przyjęcia reguł uznawania obrotów za dodatnie. Najczęściej przyjmuje się konwencję, według której dodatnie obroty są zdefiniowane zgodnie z rysunkiem.


Przekształcenie 3D, obroty II

Obiekt na rysunku został obrócony o kat 45 wokół osi OX.


Przekształcenie 3D, obroty III

Obiekt na rysunku został obrócony o kat 45 wokół osi OY


Przekształcenie 3D, obroty IV

Obiekt na rysunku został obrócony o kat 45 wokół osi OZ.


Przekształcenie 3D, skalowanie

Warto zwrócić uwagę na fakt, że jeśli S=SX=SY=SZ0 to skalowanie można opisać macierzą: