background image

 

Wykład  

 

Przekształcenia geometryczne 

-  podstawy matematyczne 
-  przekształcenia 2D 
-  współrzędne jednorodne i macierzowa reprezentacja 

przekształce

ń 2D 

-  składanie przekształceń 2D 
-  układy współrzędnych  
-  przekształcenia 3D 
-  składanie przekształceń 3D 
-  model procesu rzutowania 3D 
-  rzut perspektywiczny 
-  rzut ortogonalny 
-  okno zobrazowania (viewport) 

 

background image

AB

AB

AB

AC

Podstawy matematyczne 

 
1.

  Wektory 

 
Wektorem

  nazywamy  uporz

ądkowaną  parę  punktów.  Pierwszy  z  tych 

punktów nazywamy początkiem wektora, a drugi końcem wektora. 

 

-  wektor o pocz

ątku w punkcie A i końcu w punkcie B 

 
Długo

ścią  wektora  (moduł  wektora)  nazywamy  długo

ść  odcinka 

ł

ączącego początek wektora z jego końcem. 

  
oznaczenie:                  lub   AB 
 
Kierunkiem 

wektora niezerowego nazywamy kierunek prostej, na której 

ten wektor le

ży. 

 
Zwrotem

 wektora niezerowego              

nazywamy ten zwrot prostej AB, w 

którym punkt A poprzedza punkt B. Dwa niezerowe wektory równoległe 
maj

ą ten sam kierunek, ich zwroty mogą być zgodne lub przeciwne. 

 
Dwa  wektory  niezerowe  nazywamy  równymi,  je

śli  mają  ten  sam 

kierunek, ten sam zwrot i równe moduły. 
 
Dodawanie wektorów

.  

                                                           
                                  B                                                 C 
 
                              u                            u+v 
 
                           A                                               D 
 
 

 

               

u + v 

  
-  przemienne:  u + v = v + 
-  ł

ączne:   

(u + v) + w = u + (v + w) 

 

background image

Mno

żenie  wektora  przez  liczbę.    Iloczynem  wektora  u  przez  liczb

ę  k 

nazywamy wektor, który: 
 
1) jest równoległy do wektora 
2) ma długo

ść │k│u 

3) ma zwrot wektora u je

śli k>0, u≠0, względnie zwrot wektora –u, jeśli 

k<0, u

≠0. Wektor ten oznaczamy ku lub uk. 

 
Wła

ściwości: 

-  (

αβ)ν = α(βν)  

-  1

ν = ν 

-  (

α + β)ν = αν + βν 

α(ν + w) = αν + αw 

 
 
Kombinacj

ą liniową wektorów u

1

, ....., u

n,

, o współczynnikach a

1

, ....., a

n,

gdzie n jest liczb

ą naturalną, nazywamy wektor 

 
 

 

 

a

1

 u

1

 + a

1

 u

2

 + ... + a

n

 u

background image

 

2.

  Iloczyn skalarny 

 
Iloczynem  skalarnym

  dwóch  wektorów  u  i  v  nazywamy  liczb

ę,  którą 

oznaczamy  symbolem  u  ·  v  i  która  w  przypadku,  gdy  oba  wektory  s

ą 

niezerowe, 

jest 

równa 

iloczynowi 

modułów 

tych 

wektorów 

pomno

żonemu przez cosinus kąta między nimi 

 

u · v  = uv cos{u, v

 

a która jest zerem w przypadku, gdy co najmniej jeden z tych wektorów 
jest zerowy. 
 
Wła

ściwości: 

1.  Iloczyn  skalarny  dwóch  wektorów  u  i  v  jest  zerem  wtedy  i  tylko 

wtedy, gdy wektory te s

ą prostopadłe 

 

u · v  = 0 

  v  

 

2.  Iloczyn  skalarny  dowolnego  wektora  u  przez  ten  sam  wektor  jest 

równy kwadratowi modułu tego wektora  

 

u ·u  = u

 

3.  Dla  dowolnych  wektorów  u,  v,  a,  b  i  dowolnej  liczby  k  zachodz

ą 

nast

ępujące równości: 

 

u · v  = v ·u   

 

 

- przemienno

ść mnożenia skalarnego 

 

(ku) · v  = k(u · v) = u · (kv) 

- ł

ączność mnożenia skalarnego z   

   mno

żeniem wektora przez liczbę 

 

u · (a+b)  =  u ·a + u · b 

- rozdzielno

ść mnożenia skalarnego    

   wzgl

ędem dodawania wektorów 

 

 

 

background image

n

m

m

m

n

n

a

a

a

a

a

a

a

a

a

,

2

,

1

,

,

2

2

,

2

1

,

2

,

1

2

,

1

1

,

1

...

...

...

...

...

...

...

3. Macierze 
 
DEF.: 
Ci

ąg dwuwskaźnikowy skończony 

 

[a

i,j

i

≤m,j≤n

  gdzie: m, n – liczby naturalne 

 

którego  wyrazy    a

i,j

 

  s

ą  liczbami  rzeczywistymi  nazywamy  macierzą 

wymiaru (m, n) i zapisujemy w postaci tablicy: 
 
 

               

= [a

i,j

i

≤m,j≤n

  = 

 
 
 
Wyrazy  s

ą ustawione w m wierszach i n  kolumnach w taki sposób, że 

wyraz  a

i,j 

  znajduje  si

ę  w  i-tym  wierszu  i  j-tej  kolumnie.  Jeżeli  w 

macierzy m = n, to macierz t

ę nazywamy macierzą kwadratową stopnia 

n

 

Mnożenie  macierzy  przez  liczbę.  Iloczynem  macierzy 

A

=[a

i,j

]  przez 

liczb

ę nazywamy macierz 

 

s

s[a

i,j

] = [sa

i,j

 

któr

ą otrzymujemy, mnożąc każdy wyraz macierzy

 A 

przez liczb

ę s

 

Dodawanie  i  odejmowanie  macierzy.  Sum

ą  macierzy 

A

=[a

i,j

]  i 

[b

i,j

] tego samego wymiaru nazywamy macierz 

 

A+B 

= [a

i,j

] + [b

i,j

] = [a

ij,

+ b

i,j

 

któr

ą otrzymujemy, dodając do każdego wyrazu macierzy 

A

 odpowiedni 

wyraz macierzy 

B

. Analogicznie okre

ślamy różnicę dwóch macierzy  

 

A-B 

= [a

i,j

] - [b

i,j

] = [a

ij,

- b

i,j

 

 

background image

Mnożenie macierzy przez macierz. Niech b

ędą dane dwie macierze 

 

   

 

A

=[a

i,j

]

m,n

   

= [b

i,j

]

n,p

  

 

Których  wymiary  (m,n)  i  (n,p)  s

ą  dostosowane  tak,  aby  w  każdym 

wierszu  pierwszej  macierzy  było  tyle  wyrazów,  ile  jest  w  ka

żdej 

kolumnie drugiej macierzy. Iloczynem i-tego wiersza pierwszej macierzy 
przez k-tą kolumnę drugiej macierzy nazywamy liczb

ę 

 

 

Iloczynem macierzy 

A

 przez macierz 

B

 nazywamy macierz 

 

C = AB 

= [c

ik

m,p

 

 

Której  ka

żdy wyraz c

ik

  jest  iloczynem  i-tego  wiersza macierzy 

A

  przez  

k-t

ą kolumnę macierzy 

B

.  

 
Przykład: mno

żenie macierzy przez macierz 

 

[

]

=

=

=

n

j

jk

ij

nk

k

in

i

ik

b

a

b

b

a

a

c

1

1

1

...

,...,

+

+

+

+

+

+

+

+

=

3

3

2

2

1

1

3

3

2

2

1

1

3

3

2

2

1

1

3

3

2

2

1

1

3

3

2

2

1

1

3

2

1

3

2

1

y

b

y

b

y

b

x

b

x

b

x

b

y

a

y

a

y

a

x

a

x

a

x

a

y

x

y

x

y

x

b

b

b

a

a

a

background image

Własno

ści działań na macierzach 

 
1.  Mno

żenie  macierzy  przez  liczbę  jest  łączne  i  rozdzielne  względem 

dodawania liczb i dodawania macierzy 

 

r(s

A

) = (rs)

A

        (r+s)

A

 = r

A

 + s

A

        s(

A

+

B

) = s

A

 + s

 

 
2.  Dodawanie macierzy jest przemienne i ł

ączne 

 

A+B = B+A    

(A+B)+C = A+(B+C) 

 

 
3.  Mno

żenie macierzy przez macierz nie jest przemienne 

 

AB 

≠ BA    

 

 

 
4.  Mno

żenie macierzy przez macierz jest łączne i rozdzielne względem 

dodawania macierzy 

 

(AB)C=A(BC) 

 

 

 

F(G+H)=FG+FH    

(G+H)K=GK+HK  

 

 
5.  Mno

żenie przez macierz zerową 

 

A0=0    0A=0  

 

 

background image

Wyznaczniki macierzy kwadratowej 
 
n – 

stopie

ń macierzy 

 
n

=2 

 
 
n

=3 

 

 
Własno

ści: 

1.  Je

śli macierze 

A

 i 

s

ą kwadratowe tego samego stopnia, to 

  

det 

AB = 

det 

det 

B

 

 

2.  Macierz kwadratow

ą A nazywamy: 

-  osobliwą, gdy det 

= 0 

-  nieosobliwą, gdy det 

≠ 0 

 

 

21

12

22

11

22

21

12

11

det

a

a

a

a

a

a

a

a

A

=

=

33

21

12

32

23

11

31

22

13

32

21

13

31

23

12

33

22

11

33

32

31

23

22

21

13

12

11

det

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

A

+

+

=

=

background image

Macierz transponowana 
Niech b

ędzie macierz dowolnego wymiaru 

 

A

=[a

i,j

i

≤,n ,j≤m

  

 

Macierz

ą transponowaną macierzy 

nazywamy macierz 

 

A*

=[a*

i,j

i

≤,n ,j≤m

  

 gdzie: 

 a*

i,j

  = a

,ji

 

 

 
Własno

ści: 

1.  Dla  ka

żdych  macierzy 

A

B

C

,  których  wymiary  s

ą  dostosowane 

tak, aby istniały iloczyny 

AB

 i 

BC

, zachodzi równo

ść 

 

  

(AB)* = B*A*    (ABC)* = C*B*A*  

 

2.  Dla ka

żdej kwadratowej macierzy 

A

 zachodzi równo

ść 

 

det

 A* =

det

 A  

 

 

background image

Macierz odwrotna 

Je

śli 

jest macierz

ą nieosobliwą, to macierz 

X

 spełniaj

ącą związki  

 

AX = E   

XA = E

 

 

nazywamy macierzą odwrotną do macierzy 

i oznaczamy 

A

-1

A

-1

 = 

 

Własno

ści: 

1.  Wyznacznik  macierzy  odwrotnej  jest  odwrotno

ścią  wyznacznika 

macierzy danej

 

 

det 

A

-1

 = 

(

det 

A)

-1

 

 

2.  Je

śli macierze 

A

 i 

s

ą nieosobliwe i tego samego stopnia, a liczba 

jest ró

żna od 0, to 

 

(

s

 A)

 –1 

 = 

s

 

–1 

A

 –1  

 

(A

–1

)

 –1 

 = A 

 

(AB)

–1 

 = B

–1

A

–1 

 

(A

–1

)* = (A*)

–1 

 

background image
background image

Własności działań na macierzach 
 
5.  Mno

żenie  macierzy  przez  liczbę  jest  łączne  i  rozdzielne  względem 

dodawania liczb i dodawania macierzy 

 

r(s

A

) = (rs)

A

        (r+s)

A

 = r

A

 + s

A

        s(

A

+

B

) = s

A

 + s

 

 
6.  Dodawanie macierzy jest przemienne i ł

ączne 

 

A+B = B+A    

(A+B)+C = A+(B+C) 

 

 
7.  Mno

żenie macierzy przez macierz nie jest przemienne 

 

AB 

≠ BA    

 

 

 
8.  Mno

żenie macierzy przez macierz jest łączne i rozdzielne względem 

dodawania macierzy 

 

(AB)C=A(BC) 

 

 

 

F(G+H)=FG+FH    

(G+H)K=GK+HK  

 

 
5.  Mno

żenie przez macierz zerową 

 

A0=0    0A=0  

 

 

background image

+

=

y

x

d

d

y

x

y

x

'

'

Przekształcenia geometryczne 2D 

 
1.

  Translacja (przesunięcie) – zmiana lokalizacji 

 
 
 
 
 
 
 
 
 

= {P

x

, P

y

}  

- punkty obiektu przed przekształceniem 

 

P’ = {P’

x

, P’

y

}   - punkty obiektu po przekształceniu 

= [d

x

, d

y

]  

- wektor translacji 

 
Zapis macierzowy: 

 

 

albo  

P’ = P + T

                                                                

 
 
 

P’ 

background image

=

y

x

s

s

y

x

y

x

0

0

'

'

2.

  Skalowanie – zmiana rozmiaru 

 

= [s

x

, s

y

]  

s

x

 i s

y

,  

- współczynniki skalowania                                  

 
 
 
 
 
 
 
                                            

 

  

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Zapis macierzowy: 

 

 

albo  

P’ = SP

                                                                

 
 
 

P’ 

s

x

 = s

y

 

P’ 

s

x

 < s

y

 

P’ 

s

x

 > s

y

 

background image

=

y

x

y

x

θ

θ

θ

θ

cos

sin

sin

cos

'

'

3.

  Obrót – zmiana orientacji 

 
Obrót o k

ąt θ wokół początku układu współrzędnych                                

 
 
 
 
 
 
                                            

 

  

 

Wyprowadzenie wzoru: 
 
 
 
 
 
 
 
 
 
 
 
x = r cos

Φ,     y = r sinΦ    

 

 

 

 

 

 

(1)

 

 
x’ =r cos(

θ

+Φ) = r cosΦ cosθ – r sinΦ sinθ 

 

 

 

(2) 

y’ =r sin(

θ

+Φ) = r cosΦ sinθ + r sinΦ cosθ 

 

 

 

(3)

 

 
Po podstawieniu (2) i (3) do (1) otrzymamy: 
 
x’ = x cos

θ

 – y sinθ,  

y’ = x sin

θ

 + y cosθ   

 

 

(4) 

 

Zapis macierzowy: 

 

 

albo  

P’ = RP

                                                               

θ = 45º 

P’ 

rcos(

θ+Φ) 

rcos(

Φ) 

Φ 

θ 

P=(x,y) 

P’=(x’,y’) 

background image

=

1

1

0

0

1

0

0

1

1

'

'

y

x

d

d

y

x

y

x

=

1

1

0

0

0

0

0

0

1

'

'

y

x

s

s

y

x

y

x

=

1

1

0

0

0

cos

sin

0

sin

cos

1

'

'

y

x

y

x

θ

θ

θ

θ

4.

  Współrzędne jednorodne  

 

 
 
Translacja 

 

 
 

albo  

P’ = TP

 

 
 

gdzie: 

T

 – macierz translacji 

 
 
Skalowanie 

 

 

albo  

P’ = SP

 

 
 

gdzie: 

S

 – macierz skalowania 

 
 
Obrót 

 

 

 

albo   

P’ = RP

 

 
 

gdzie: 

R

 – macierz obrotu 

 
 

=

=

1

'

'

'

1

y

x

P

y

x

P

background image

=

1

0

0

1

0

0

1

1

0

0

0

cos

sin

0

sin

cos

1

0

0

1

0

0

1

)

,

(

)

(

)

,

(

1

1

1

1

1

1

1

1

y

x

y

x

y

x

T

R

y

x

T

θ

θ

θ

θ

θ

5.

  Składanie przekształceń 2D  

 
Obrót obiektu wokół dowolnego punktu P

1

 o k

ąt θ 

 
1) 

2) 

 
 
 
 
 
 
                                            

 
 

 
 
3) 

 

 

 

 

 

     4) 

 
 
 
 
 
 
 
 
 
 
 
 
Macierz przekształcenia 

 

P

1

 (x

1

,y

1

-T[x

1

,y

1

θ = 45º 

Oryginalny rysunek 

P

1

 (x

1

,y

1

T[x

1

,y

1

 

Po przesuni

ęciu o wektor T do 

pocz

ątku układu współrzędnych 

Po obrocie o k

ąt θ  

Po przesuni

ęciu o wektor -T do 

pocz

ątkowego punktu P

1

 

background image

=

1

0

0

1

0

0

1

1

0

0

0

0

0

0

1

0

0

1

0

0

1

)

,

(

)

,

(

)

,

(

1

1

1

1

1

1

1

1

y

x

s

s

y

x

y

x

T

s

s

S

y

x

T

y

x

y

x

Skalowanie obiektu wzgl

ędem dowolnego punktu P

1

 [x

1

,y

1

 
Kolejne kroki: 
1.  Przesuni

ęcie  o  wektor  T  tak  aby  punkt  P

1 

znalazł  si

ę  w  początku 

układu współrz

ędnych 

2.

  Skalowanie ze współczynnikami s

x

, s

y

 

3.  Przesuni

ęcie o wektor –T 

 
Macierz przekształcenia 

 
 
 
 
 
 

background image

=

=

1

0

0

1

0

0

1

1

0

0

0

cos

sin

0

sin

cos

1

0

0

0

0

0

0

1

0

0

1

0

0

1

)

,

(

)

(

)

,

(

)

,

(

2

2

1

1

2

2

1

1

y

x

s

s

y

x

y

x

T

R

s

s

S

y

x

T

y

x

y

x

θ

θ

θ

θ

θ

 

Skalowanie i obrót wzgl

ędem punktu P

b

ędącym środkiem obrotu i 

skalowania i przesuni

ęcie obiektu do punktu P

2

 

 
Kolejne kroki: 
1.  Przesuni

ęcie  o  wektor  T[x

1

,y

1

]  tak  aby  punkt  P

1 

znalazł  si

ę  w 

pocz

ątku układu współrzędnych 

2.  Skalowanie ze współczynnikami s

x

, s

y

 

3.  Obrót o k

ąt θ wokół początku układu współrzędnych 

4.  Przesuni

ęcie o wektor T

2

[x

2

,y

2

] do punktu P

2

 

 
Macierz przekształcenia 
 
 
 
 
 
 
 
 
 

background image

Przypadki przemienno

ści mnożenia macierzy 

 

M

1

M

2

 = M

2

M

1

 

 

 

M

1

 

 

M

 

Translacja 

Translacja 

Skalowanie 

Skalowanie 

Obrót 

Obrót 

Skalowanie z s

x

=s

y

 

Obrót 

 
W tych przypadkach nie musimy dba

ć o kolejność składania macierzy 

 
 
 

Własno

ści przekształceń odwrotnych 

 

T

-1

(x,y

) = T

(-x,-y)

 

 

R

-1

(

θ)

 = R

(-

θ)

 

 

S

-1

(s

x

,s

y

) = S

(1/s

x

,1/s

y

 )

 

 
 
 
 
 
 
 

background image

Przekształcenia 3D 

 

Układy współrzędnych 3D 

 

Prawoskrętny układ współrzędnych (wykorzystywany w OpenGL

 
 
 
 

 

 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
Dodatnie kąty obrotów w kierunku przeciwnym do ruchu wskazówek 
zegara, gdy patrzymy od strony dodatniej osi w kierunku początku układu.  

 

 
 
 
 
 
 
 

background image

Lewoskrętny układ współrzędnych   

 
 

 

 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
Dodatnie kąty obrotów w kierunku zgodnym z ruchem wskazówek zegara, 
gdy patrzymy od strony dodatniej osi w kierunku początku układu.  
 
 
 
 

background image

=

=

1

0

0

0

0

1

0

0

0

0

1

0

0

0

0

1

R

L

L

R

M

M

Macierz konwersji: 
 
 
 

 

background image

Przekształcenia geometryczne 3D 

 

Operacje obrotu, translacji oraz skalowania można przedstawić za pomocą 
macierzy, przez którą należy pomnożyć współrzędne wierzchołka którego 
chcemy zmodyfikować. Ogólna postać takiej macierzy to:  
 

 

[

] [

]

=

44

43

42

41

34

33

32

31

24

23

22

21

14

13

12

11

1

z

y

x

 

1

z'

y'

x'

 

M

M

M

M

M

M

M

M

M

M

M

M

M

M

M

M

background image

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 wektora translacji dla kolejnych osi X,Y,Z  
 
[OpenGL: glTranslate* (Tx,Ty,Tz);] 
 
 
 
 
 
 
 
 
 
 
 
 
 

[

] [

]

=

1

0

1

0

0

0

0

1

0

0

0

0

1

1

z

y

x

 

1

z'

y'

x'

 

z

y

x

T

T

T

background image

2. Macierz obrotu 
 
a) obrót wokół osi X 
 

 
 
 

 
 
 
 
za pomocą wzorów:  
y' = yo + (y - yo)*cos(θ)+(z-zo)*sin(θ); 
z' = zo + (z - zo)*cos(θ)-(y-yo)*sin(θ); 
x' = xo 
 
gdzie: 
-  x, y, z - współrzędne punktu przed obrotem 
-  x', y', z' – współrzędne punktu po obrocie 
-  xo, yo, zo - punkt wokół którego nastąpi obrót 
-  θ - kąt o jaki nastąpi obrót 
 
 
 

[

] [

]

=

1

0

0

0

0

)

cos(

)

sin(

0

0

)

sin(

)

cos(

0

0

0

0

1

1

z

y

x

 

1

z'

y'

x'

 

θ

θ

θ

θ

background image

b) wokół osi Y 

 
 
 
 

 
 
 
 
za pomocą wzorów: 
x' = xo + (x - xo)*cos(θ)-(z-zo)*sin(θ); 
z' = zo + (z - zo)*cos(θ)+(x-xo)*sin(θ); 
y' = yo 
 
gdzie: 
-  x, y, z - współrzędne punktu przed obrotem 
-  x', y', z' – współrzędne punktu po obrocie 
-  xo, yo, zo - punkt wokół którego nastąpi obrót 
-  θ - kąt o jaki nastąpi obrót 
 

[

] [

]

=

1

0

0

0

0

)

cos(

0

)

sin(

0

0

1

0

0

)

sin(

0

)

cos(

1

z

y

x

 

1

z'

y'

x'

 

θ

θ

θ

θ

background image

c) wokół osi Z 

 
 
 
 

 
 
 
 
za pomocą wzorów: 
x' = xo + (x - xo)*cos(θ)+(y-yo)*sin(θ); 
y' = yo + (y - yo)*cos(θ)-(x-xo)*sin(θ); 
z' = zo 
 
gdzie: 
-  x, y, z - współrzędne punktu przed obrotem 
-  x', y', z' – współrzędne punktu po obrocie 
-  xo, yo, zo - punkt wokół którego nastąpi obrót 
-  θ - kąt o jaki nastąpi obrót 
 

[

] [

]

=

1

0

0

0

0

1

0

0

0

0

)

cos(

)

sin(

0

0

)

sin(

)

cos(

1

z

y

x

 

1

z'

y'

x'

 

θ

θ

θ

θ

background image

 
 
[OpenGL: glRotate* (θ, x, y, z);] 
 
θ  – k

ąt obrotu w stopniach; 

( x, y, z)  – o

ś obrotu.   

 
x, y, z) = ( 1, 0, 0)  - obrót wokół os X; 
 
x, y, z) = ( 0, 1, 0)  - obrót wokół os Y; 
 
x, y, z) = ( 0, 0, 1)  - obrót wokół os Z; 
 
 
 
Przykład: 

 glRotatef(45.0, 0.0, 0.0, 1.0); 

 
 

 

 
 
 
 
 

background image

3. Macierz skalowania 
 

 
 
 
 

 
za pomocą wzorów: 
x' = x * s

x

 

y' = y * s

y

  

z' = z * s

z

   

 
gdzie: 
-  x, y, z – współrzędne przed skalowaniem  
-  x', y', z' –  współrzędne po skalowaniu 
-  s

x

 , s

y

 , s

z 

–  współczynniki operacji skalowania  

-   
[OpenGL:   glScale* (s

x

 , s

y

 , s

z

);] 

 
 
Przykład: 

glScalef (2.0, -0.5, 1.0); 

 
 

 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
-  odbicie względem płaszczyzny XZ 
-  dwukrotne wydłużenie wzdłuż osi X 
-  dwukrotne zmniejszenie wzdłuż osi Y 

[

] [

]

=

1

0

0

0

0

0

0

0

0

0

0

0

0

1

z

y

x

 

1

z'

y'

x'

 

z

y

x

s

s

s

background image

Składanie przekształceń 

 

 
a) obrót + translacja   

 

 

 

b) translacja + obrót 

 

 

 

 

 

 

 

 

glTranslatef (50.0, 0.0, 0.0); 

 

 

glRotatef (45.0, 0.0, 0.0,1.0); 

glRotatef (45.0, 0.0, 0.0, 1.0); 

 

 

glTranslatef (50.0, 0.0, 0.0); 

draw_object(); 

 

 

 

 

 

draw_object(); 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Uwaga: 
 
Przekształcenia macierzowe w OpenGL wykonywane są w odwrotnej 
kolejności niż wynikałoby to z kodu programu. 
 

background image

 Model procesu rzutowania 3D 

 

 

 
 

WEJŚCIE: Modele obiektów 3D 

(układ współrzędnych obiektu) 

 
1.  Macierz modelowania sceny: 

(układ współrzędnych rzeczywistych -ziemskich)

 

-  translacja 
-  skalowanie 
-  obrót 
 
2.  Macierz rzutowania: 

(układ współrzędnych odciętych - płaszczyzny rzutowania )

 

-  rzut perspektywiczny [OpenGL: glFrustum(); glPerspective();] 
-  rzut ortogonalny [OpenGL: glOrtho();] 
 
3.  Dzielenie perspektywiczne - przekształcenie normalizujące: 

(układ współrzędnych urządzenia zobrazowania – współrzędne znormalizowane)

 

 

4.  Definiowanie okna zobrazowania [OpenGL: glVievport();] 

(układ współrzędnych obszaru zobrazowania  - współrzędne ekranowe)

 

 

WYJŚCIE: obraz sceny w oknie zobrazowania 

 

 
 
 
 
 
 
 
 
 
 

background image

Model procesu rzutowania 3D 
 
 
 
 

 
 
 
 
 
 
 
 

 
 
 
 
 
 
WEJŚCIE:
 Modele obiektów 3D (układ współrzędnych obiektu) 

 

1.  Macierz modelowania sceny  

 - (układ współrzędnych rzeczywistych -ziemskich) 

translacja 

skalowanie 

obrót 

 

2.  Macierz rzutowania

  P

 - (układ współrzędnych odciętych – współrzędne płaszczyzny rzutowania ) 

rzut perspektywiczny [OpenGL: glFrustum(); glPerspective();] 

rzut ortogonalny [OpenGL: glOrtho();] 

 

3.  Dzielenie perspektywiczne - przekształcenie normalizujące: 

(układ współrzędnych urządzenia zobrazowania – współrzędne znormalizowane <-1;1>) 
 

4.  Definiowanie okna zobrazowania [OpenGL: glVievport();] 

(układ współrzędnych obszaru zobrazowania  - współrzędne ekranowe) 

 

WYJŚCIE: obraz sceny w oknie zobrazowania

 

 

 

Macierz 

modelowania 

 

Macierz 

rzutowania 

 

Dzielenie 

perspektywiczne 

 

Definiowanie 

okna 

zobrazowania 

o

o

o

o

w

z

y

x

Współrzędne 

odcięte 

Znormalizowane 

współrzędne 

urządzenia 

Współrzędne 

ekranowe 

s

s

s

z

y

x

=

o

o

o

o

e

e

e

e

w

z

y

x

M

w

z

y

x

=

e

e

e

e

c

c

c

c

w

z

y

x

P

w

z

y

x

=

c

c

c

c

c

c

d

d

d

w

z

w

y

w

x

z

y

x

/

/

/

Współrzędne w 

układzie 

obserwatora 

Współrzędne 

obiektu 

background image

Rzut perspektywiczny 
 
 
 

 

 
 
 
OpenGL: glFrustum(left, right, bottom, top, near, far); 
 

parametry:  

-  left, bottom, near  - współrzędne (x, y, -z) lewego dolnego wierzchołka  
-  right, top, near  - współrzędne (x, y, -z) prawego górnego wierzchołka  
-  near, far – odległość płaszczyzn odcięcia 
 
Funkcja generuje macierz przekształcenia perspektywicznego R: 
 

 

 
gdzie:  
-  l: left, r : right, b: bottom, t: top, n: near, f: far 
-  l ≠ r,  t ≠ b,  n≠ f 

background image

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

background image

 
 

 

 
 
 
 
OpenGL: gluPerspective(fovy, aspect, near, far); 
 

parametry:  

-  fovy  - kąt pola widzenia w płaszczyźnie pionowej YZ   [0,180

 

-  aspect  - stosunek szerokości obszaru rzutowania do jego wysokości  
-  near, far – odległość płaszczyzn odcięcia (-z
 
 
Przykład:  

Zdefiniować obszar rzutowania obejmujący cały ekran monitora 15” 

(28 cm x 20 cm). Obserwator znajduje się w odległości 80 cm od monitora, 
obiekty znajdujące się w odległości większej niż 5 m nie będą rysowane. 
 
1.  glFrustum(-28.0/2, 28.0/2, -20.0/2, 20.0/2, 80.0, 500.0); 
 
2. gluPerspective(14.25, 1.4, 80.0, 500.0); 

 

=

near

h

arctg

2

2

fovy

 

background image

Rzut ortogonalny (równoległy) 
 
 
 
 

 

 
 
OpenGL: glOrtho(left, right, bottom, top, near, far); 
 

parametry:  

-  left, bottom  - współrzędne (x, y) lewego dolnego wierzchołka  
-  right, top  - współrzędne (x, y) prawego górnego wierzchołka  
-  near, far – odległość płaszczyzn odcięcia 
 
Funkcja generuje macierz przekształcenia ortogonalnego R: 
 

 

 
gdzie:  
-  l: left, r : right, b: bottom, t: top, n: near, f: far 
-  l ≠ r,  t ≠ b,  n≠ f 

 

background image

Definiowanie pozycji obserwatora 
 
 
OpenGL:  
 
 

gluLookAt(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz); 

 
Funkcja  umiejscawia  obserwatora  w  punkcie  o  współrzędnych 
(

eyex,  eyey,  eyez

),  punkt  (

centerx,  centery,  centerz)

  definiuje  dowolny 

punkt leżący na osi widzenia, typowo jest to centralny punkt sceny 
(punkt  obserwacji).  Współrzędne  (

upx,  upy,  upz

)  wyznaczają 

kierunek  obserwacji  (up  vector)  w  oknie  zobrazowania  –  typowo 
(0,1,0).   

 

background image

Definiowanie okna zobrazowania  
 
OpenGL: glVievport(
x, y, width, hight); 

 
Funkcja służy do zdefiniowania prostokątnego obszaru okna 
graficznego, w którym odwzorowywany będzie obraz. 

 

parametry:  

-  x, y - współrzędne (x, y) lewego dolnego wierzchołka okna względem 

lewego dolnego wierzchołka okna zobrazowania ekranu 

-  width, hight  - szerokość i wysokość okna  
 
Uwaga: 
 

Wszystkie wartości wyrażone w pikselach 

 
 

 

 

      Obszar zobrazowania 

 Okno graficzne 

 

   

(Viewing Volume)  

    (Viewport) 

 

background image

Odwzorowanie obszaru zobrazowania w okno graficzne 

 

 
 

 

 

 

 

zachowana proporcja   

 

 

brak proporcji  

 

 

(równe aspekty okien)