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)