 
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) 
 
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
.
                                                           v 
                                  B                                                 C 
 
                              u                            u+v 
 
                           A                                               D 
 
 
= u + v
  
-  przemienne:  u + v = v + u 
-  ł
ączne:
(u + v) + w = u + (v + w)
 
Mno
żenie wektora przez liczbę. Iloczynem wektora u przez liczb
ę k
nazywamy wektor, który: 
 
1) jest równoległy do wektora u 
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
n
 
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
u
┴
v
2. Iloczyn skalarny dowolnego wektora u przez ten sam wektor jest
równy kwadratowi modułu tego wektora
u ·u = u
2
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
 
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
= [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
ę s nazywamy macierz
s
A
= 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
=
[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
]
 
Mnożenie macierzy przez macierz. Niech b
ędą dane dwie macierze
A
=[a
i,j
]
m,n
B
= [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
 
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
B
 
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
 
Wyznaczniki macierzy kwadratowej 
 
n – 
stopie
ń macierzy
 
n
=2
 
 
n
=3
 
Własno
ści:
1. Je
śli macierze
A
i
B
s
ą kwadratowe tego samego stopnia, to
det
AB =
det
A
det
B
2. Macierz kwadratow
ą A nazywamy:
- osobliwą, gdy det
A
= 0
- nieosobliwą, gdy det
A
≠ 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
−
−
−
−
+
+
=
=
 
Macierz transponowana 
Niech b
ędzie macierz dowolnego wymiaru
A
=[a
i,j
]
i
≤,n ,j≤m
Macierz
ą transponowaną macierzy
A
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
 
Macierz odwrotna
Je
śli
A
jest macierz
ą nieosobliwą, to macierz
X
spełniaj
ącą związki
AX = E
XA = E
nazywamy macierzą odwrotną do macierzy
A
i oznaczamy
A
-1
.
A
-1
=
X
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
B
s
ą nieosobliwe i tego samego stopnia, a liczba s
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
 
 
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
B
 
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
 
+
=
y
x
d
d
y
x
y
x
'
'
Przekształcenia geometryczne 2D
 
1.
Translacja (przesunięcie) – zmiana lokalizacji
 
 
 
 
 
 
 
 
 
P = {P
x
, P
y
}
- punkty obiektu przed przekształceniem
P’ = {P’
x
, P’
y
} - punkty obiektu po przekształceniu
T = [d
x
, d
y
]
- wektor translacji
 
Zapis macierzowy: 
albo
P’ = P + T
 
 
 
T
y
x
P
P’
 
=
y
x
s
s
y
x
y
x
0
0
'
'
2.
Skalowanie – zmiana rozmiaru
S = [s
x
, s
y
]
s
x
i s
y
,
- współczynniki skalowania
 
 
 
 
 
 
 
                                            
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Zapis macierzowy:
albo
P’ = SP
 
 
 
y
x
P
P’
s
x
= s
y
P
P’
s
x
< s
y
y
x
P
P’
s
x
> s
y
y
x
 
−
=
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º
y
x
P
P’
rcos(
θ+Φ)
rcos(
Φ)
r
r
Φ
θ
P=(x,y)
y
x
P’=(x’,y’)
 
=
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
 
−
−
−
=
−
−
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
y
x
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
y
x
Po obrocie o k
ąt θ
y
x
Po przesuni
ęciu o wektor -T do
pocz
ątkowego punktu P
1
y
x
 
−
−
=
−
−
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 
 
 
 
 
 
 
 
−
=
=
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
1
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 
 
 
 
 
 
 
 
 
 
 
Przypadki przemienno
ści mnożenia macierzy
M
1
M
2
= M
2
M
1
M
1
M
2
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
)
 
 
 
 
 
 
 
 
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.  
 
 
 
 
 
 
 
Y
Z
X
 
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.  
 
 
 
 
Y
Z
X
 
−
=
=
→
→
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
R
L
L
R
M
M
Macierz konwersji: 
 
 
 
 
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
 
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
 
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'
θ
θ
θ
θ
 
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'
θ
θ
θ
θ
 
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'
θ
θ
θ
θ
 
 
 
[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);
 
 
 
 
 
 
 
 
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
 
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. 
 
 
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
 
 
 
 
 
 
 
 
 
 
 
Model procesu rzutowania 3D 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
WEJŚCIE: Modele obiektów 3D (układ współrzędnych obiektu) 
1. Macierz modelowania sceny
M
- (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
M
Macierz
rzutowania
P
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
 
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 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
 
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 
 
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).   
 
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)
 
Odwzorowanie obszaru zobrazowania w okno graficzne
 
 
zachowana proporcja
brak proporcji
(równe aspekty okien)