Wykład 1 – Wprowadzenie:
Układ współrzędnych 3D
Operacje na wektorach
Transformacje 3D
Rzutowanie
Matematyka grafiki 3D
Wykład
z grafiki komputerowej
(3D)
(C) 2009 Grzegorz Łukawski
Politechnika Świętokrzyska w Kielcach
● R. S. Wright jr, M. Sweet: „OpenGL – księga eksperta”,
Helion 1999
● Wojciech Jawor: „Principia Silnika”
Literatura (3D)
Kartezjański, lewoskrętny układ współrzędnych:
0, 0, 0
X
Y
Z
Kartezjański układ współrzędnych
X
Y
Z
P
P'
R
φ
ψ
0, 0, 0
R - promień wodzący;
φ - kąt pomiędzy płaszczyzną X-Z
a promieniem wodzącym.
ψ - kąt pomiędzy rzutem
promienia wodzącego na
płaszczyznę X-Z a osią X;
Przejście na układ kartezjański:
x = R * cos φ * cos ψ
y = R * sin φ
z = R * cos φ * sin ψ
Sferyczny układ współrzędnych
Obliczenie długości wektora:
∣
W∣=
x
2
y
2
z
2
Normalizacja wektora (wektor znormalizowany ma długość jednostkową):
W ' =
W
∣
W∣
Iloczyn skalarny (wynikiem jest liczba):
a⋅b =∣a∣⋅∣b∣⋅cos a , b
a⋅b = x
1
∗
x
2
y
1
∗
y
2
z
1
∗
z
2
Operacje na wektorach
A×B=det
[
x
x
1
x
2
y y
1
y
2
z
z
1
z
2
]
A×
B=
[
y
1
z
2
−
y
2
z
1
, x
2
z
1
−
x
1
z
2
, x
1
y
2
−
x
2
y
1
]
A
B
A x B
B x A
Wektor A = [x
1
, y
1
, z
1
]
Wektor B = [x
2
, y
2
, z
2
]
Wynikiem iloczynu wektorowego jest wektor prostopadły do mnożonych
wektorów. Iloczyn wektorowy nie jest przemienny!
Iloczyn wektorowy
O
x
=
[
1
0
0
0
0 cosφ −sin φ 0
0 sin φ
cos φ
0
0
0
0
1
]
● Wokół osi X:
O
y
=
[
cosφ 0 −sin φ 0
0
1
0
0
sin φ 0
cosφ
0
0
0
0
1
]
● Wokół osi Y:
O
z
=
[
cosφ −sin φ 0 0
sin φ
cosφ
0 0
0
0
1 0
0
0
0 1
]
● Wokół osi Z:
Obrót względem dowolnej osi realizuje się poprzez rozkład na obroty
cząstkowe wokół osi X, Y i Z.
Transformacje 3D – Obrót
3) Obrót:
R=
[
1 0
0
0
0 1
0
0
0 0 −1 0
0 0
0
1
]
4) Zmiana orientacji układu współrzędnych z lewoskrętnego
na prawoskrętny i vice versa:
Transformacje 3D
Rzutowanie pozwala pokazać trójwymiarową scenę na płaskim ekranie
monitora. W grafice 3D stosuje się dwa podstawowe rodzaje rzutowania:
● Perspektywiczne (środkowe) – nie zachowuje kątów
i równoległości linii. Obiekty położone dalej są pozornie mniejsze.
● Równoległe – zachowuje kąty i równoległość linii.
Rzutowanie
Rzutowanie równoległe przenosi wszystkie punkty sceny równolegle na
płaszczyznę rzutowania.
Płaszczyzna
rzutowania (ekran)
Z
P
1
P
2
P
1
'
P
2
'
Obserwator
Jeżeli obserwator znajduje się na osi Z,
rzutowanie równoległe polega na
usunięciu współrzędnej Z wszystkich
punktów sceny.
Rzutowanie równoległe
Obserwator
Płaszczyzna
rzutowania (ekran)
Z
P
1
P
2
P
1
'
P
2
'
Obiekty położone dalej od obserwatora wydają się mniejsze. Dzięki
zachowaniu perspektywy rzutowanie takie daje bardziej realistyczne efekty
niż rzutowanie równoległe.
Dla obserwatora na osi Z w odległości d od
środka układu współrzędnych:
x ' =
x⋅d
zd
y ' =
y⋅d
zd
Rzutowanie perspektywiczne
Równanie płaszczyzny w przestrzeni euklidesowej 3D:
ax bycz d =0
det
[
x
x
1
x
2
x
3
y y
1
y
2
y
3
z
z
1
z
2
z
3
1
1
1
1
]
=
0
Trzy punkty (które nie leżą na jednej prostej) określają płaszczyznę z pomocą
równania:
Równanie płaszczyzny
Trzy płaszczyzny (nie posiadające wspólnej prostej) przecinają się w punkcie
o współrzędnych będących minorami wyznacznika*:
det
[
a a
1
a
2
a
3
b b
1
b
2
b
3
c
c
1
c
2
c
3
d d
1
d
2
d
3
]
=
0
* rozwinięcie Laplace'a względem pierwszej kolumny
Przecięcie płaszczyzn
Prosta w przestrzeni 3D może być określona przez:
● Przecięcie dwóch płaszczyzn
● Dwa punkty
Równanie prostej przechodzącej przez
dwa punkty P
1
i P
2
(postać kanoniczna):
x −x
1
x
2
−
x
1
=
y− y
1
y
2
−
y
1
=
z− z
1
z
2
−
z
1
Prosta przechodząca przez punkt
P=(x
P
, y
P
, z
P
) i równoległa do wektora
U = [ x
U
, y
U
, z
U
]:
x−x
P
x
U
=
y− y
P
y
U
=
z −z
P
z
U
Proste
Parametryczna postać równania prostej:
Wektor kierunkowy U = [x
U
, y
U
, z
U
] przechodzi przez punkt A = (x
A
, y
A
, z
A
):
x=x
A
t⋅x
U
y= y
A
t⋅y
U
z=z
A
t⋅z
U
Parametr t osiąga dowolne wartości ze zbioru liczb rzeczywistych.
Proste
Punkt:
P = (x
p
, y
p
, z
p
)
Płaszczyzna:
Ax + By + Cz + D = 0
Odległość punktu P od płaszczyzny:
d =
∣
Ax
p
By
p
Cz
p
D∣
A
2
B
2
C
2
Odległość punktu od płaszczyzny
Wartość d wyznacznika określa orientację układu punktów (wektorów):
d =det
[
x
1
x
2
x
3
y
1
y
2
y
3
z
1
z
2
z
3
]
Trzy punkty (wektory) P1, P2 i P3 tworzą względem początku układu
współrzędnych układ:
● prawoskrętny, jeżeli d > 0
● lewoskrętny, jeżeli d < 0
Orientacja układu punktów
Założenie: Płaszczyzna określona jest przez trzy punkty, uporządkowane
prawoskrętnie względem początku układu współrzędnych.
Punkt P = (X, Y, Z)
Punkty P1, P2 i P3 definiują płaszczyznę:
D=det
[
X
x
1
x
2
x
3
Y
y
1
y
2
y
3
Z
z
1
z
2
z
3
1
1
1
1
]
D > 0 – punkt P leży po tej samej stronie płaszczyzny
co początek układu współrzędnych;
D < 0 – punkt P leży po przeciwnej stronie;
D = 0 – punkt P leży na płaszczyźnie.
Położenie punktu względem płaszczyzny