Laboratorium_grafika3D_2.pdf

(92 KB) Pobierz
Microsoft Word - Laboratorium_grafika3D_2.doc
Laboratorium nr 2
1/6
Instrukcja
laboratoryjna
2
Grafika Komputerowa 3D
Temat: Manipulowanie przestrzeniĢ
Przygotował: mgr inŇ. Maciej Lasota
1) Manipulowanie przestrzeniĢ
IstniejĢ dwa typy układów współrzħdnych:
1.
lewoskrħtny układ współrzħdnych,
2.
prawoskrħtny układ współrzħdnych.
RóŇniĢ siħ one miħdzy sobĢ kierunkiem osi „Z” w układzie kartezjaıskim
trójwymiarowym. W bibliotece OpenGL obowiĢzuje układ prawoskr ħ tny (Direct3D
umoŇliwia korzystanie z obydwu typów układów współrzħdnych). Fizyczne zamienienie
jednego układu w drugi nie jest moŇliwe. MoŇliwe jest natomiast „udawanie” układu
lewoskrħtnego i odwrotnie poprzez umieszczanie przed kaŇdĢ współrzħdnĢ wierzchołka osi
„Z” znaku minusa.
+Y
-X
-Z
ekran
monitora
+X
+Z
-Y
Układ współrz ħ dny prawoskr ħ tny
442055041.001.png
Laboratorium nr 2
2/6
+Y
-X
+Z
ekran
monitora
+X
-Z
-Y
Układ współrz ħ dny lewoskr ħ tny
2) Rzutowanie
Rzutowanie jest operacjĢ polegajĢcĢ na tym, aby odpowiednie piksele na płaskim
ekranie były wyĻwietlane w taki sposób, by sprawiaę wraŇenie trójwymiarowej głħbi
(przestrzeni 3D). Rzutowanie równieŇ pozwala tworzyę przestrzeı dwuwymiarowĢ 2D dziħki
odpowiedniemu przekształceniu.
OpenGL wyposaŇony jest w specjalne funkcje, dziħki którym moŇna uzyskaę
odpowiedni efekt rzutowania. WyróŇniamy dwa typy rzutowania:
1.
rzutowanie perspektywiczne (wykorzystywane w grach 3D),
2.
rzutowanie ortogonalne (wykorzystywane w programach typu CAD/CAM).
2.1.) Rzutowanie perspektywiczne
W rzutowaniu perspektywicznym obiekty połoŇone dalej od kamery sĢ mniejsze od
tych połoŇonych bliŇej. OpenGL udostħpnia specjalnĢ funkcjħ, która tworzy odpowiedniĢ
macierz perspektywy.
void gluPerspective(GLdouble n, GLdouble a, GLdouble zN, GLdouble zF)
442055041.002.png
Laboratorium nr 2
3/6
Funkcja przyjmuje cztery parametry. Pierwszy parametr okreĻla kĢt widzenia (w
stopniach, zalecana wartoĻę 60 stopni) w pionie. Drugi parametr okreĻla stosunek szerokoĻci
do wysokoĻci okna (zazwyczaj podaje siħ szerokoĻę okna, w którym wyĻwietlana jest grafika
podzielonĢ przez wysokoĻę). Dwa ostatnie parametry okreĻlajĢ granicħ przedniĢ i tylnĢ, z
reguły parametr „zN” przyjmuje wartoĻę 1.0.
Widok perspektywiczny tworzy stoŇek widzenia, którego granicami sĢ właĻnie granica
przednia i tylna. Wszystko co jest w stoŇku pojawia siħ na ekranie, obiekty znajdujĢce siħ
poza stoŇkiem nie sĢ wyĻwietlane.
zN
a
zF
Funkcja gluPerspective jak moŇna zauwaŇyę, nie naleŇy do biblioteki OpenGL jest
ona czħĻci biblioteki GLU (biblioteki pomocniczej) . OryginalnĢ funkcjĢ słuŇĢcĢ do
ustawiania rzutowania perspektywicznego w bibliotece OpenGL jest glFrustum ,
gluPerspective jest jedynie nakładkĢ na tĢ funkcje.
void glFrustum(GLdouble left, GLdouble right, GLdouble bottom,
GLdouble top, GLdouble zN, GLdouble zF)
Funkcja przyjmuje szeĻę parametrów. Pierwsze dwa parametry okreĻla prawĢ i lewĢ
współrzħdnĢ pionowej linii obcinania. Kolejne dwa parametry okreĻlajĢ górna i dolnĢ
współrzħdnĢ poziomej linii obcinania. Dwa ostatnie parametry okreĻlajĢ granicħ przedniĢ i
tylnĢ.
2.2.) Rzutowanie ortogonalne
Nazywane inaczej rzutowaniem prostokĢtnym lub równoległym. Polega ono na tym,
Ňe kaŇdy obiekt znajdujĢcy siħ w obszarze rysowania niezaleŇnie od swojej odległoĻci od
kamery ma dokładnie tĢ samĢ wielkoĻę.
442055041.003.png
Laboratorium nr 2
4/6
W OpenGL dostħpna jest specjalna funkcja, która tworzy rzutowanie ortogonalne.
void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,
GLdouble near, GLdouble far)
Funkcja glOrtho tworzy tzw. bryłħ widzenia (bryłħ obcinania). Parametry „left” oraz
„right” okreĻlajĢ szerokoĻę bryły, parametry „bottom” oraz „top” jej wysokoĻę. Dwa ostatnie
parametry „near” i „far” okreĻlajĢ głħbiħ.
W obrħbie bryły widzenia tworzone sĢ obiekty, które sĢ wyĻwietlane na ekranie. To
czy obiekt pojawi siħ na ekranie zaleŇy od tego czy znajdzie siħ on w obszarze
prostopadłoĻcianu. Rzutowanie ortogonalne wykorzystywane jest czħsto w grach 2D oraz
programach typu CAD/CAM.
+Y
top
-Z
far
-X
left
right
+X
near
botom
+Z
-Y
442055041.004.png
Laboratorium nr 2
5/6
3) Kamera
Oprócz samego rzutowania w OpenGL bardzo waŇnĢ rzeczĢ jest kamera. Kamera
okreĻla połoŇenie obserwatora (w przestrzeni 3D) wzglħdem obserwowanych obiektów.
OpenGL posiada funkcjħ tworzĢcĢ macierz kamery.
void gluLookAt(GLdouble x, GLdouble y, GLdouble z, GLdouble centerx,
GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy,
GLdouble upz)
Funkcja przyjmuje dziewiħę argumentów. Pierwsze trzy argumenty (x,y,z) okreĻlajĢ
połoŇenie kamery w przestrzeni trójwymiarowej. Kolejne trzy argumenty (centerx, centery,
centerz) okreĻlajĢ punkt na który skierowana jest kamera (patrzy kamera). Ostatnie trzy
argumenty (upx, upy, upz) okreĻlajĢ wektor pionu kamery, dziħki tym parametrom moŇliwe
jest obracanie kamery.
4) Macierz rzutowania i modelowania
OpenGL oblicza według nastħpujĢcego wzoru pozycj ħ punktu w przestrzeni:
[WYJ ĺ CIOWY POZYCJA PUNKTU] = [MACIERZ RZUTOWANIA] *
[MACIERZ MODELOWANIA] * [WEJSCIOWA POZYCJA PUNKTU]
Dodatkowo w skład macierzy modelowania wchodzĢ dwie osobne macierze
(traktowane jako całoĻę). PierwszĢ z nich jest macierz przekształceı (zwiĢzana z translacjĢ,
rotacjĢ i skalowaniem), drugĢ zaĻ macierz kamery.
4.1.) Macierz rzutowania (projekcji)
Jak sama nazwa wskazuje zwiĢzana jest z rzutowaniem. Aby umoŇliwię rzutowanie
perspektywiczne lub ortogonalne naleŇy przełĢczyę siħ na macierz rzutowania. Do tego celu
słuŇy odpowiednia funkcja.
void glMatrixMode(GL_PROJECTION)
 
Zgłoś jeśli naruszono regulamin