Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
J.Matulewski,T.Dziubak,M.Sylwestrzak,R.Płoszajczak,Grafika.Fizyka.Metodynumeryczne.
Symulacjefizycznezwizualizacj
ą
3D,Warszawa2010
ISBN978-83-01-16178-1,©byWNPWN2010
42
CzęśćI.GrafikatrójwymiarowawOpenGL
Wpierwszejczęściksiążki,któradotyczywyłącznieOpenGLimożesłużyćtakżejakojego
kurs,starannieunikamichużycia,ograniczającsiędozwykłychtablicC++.
Macierzrzutowania
Poprzełączeniunamacierzrzutowaniawszelkieoperacjenabieżącejmacierzy
wpływająnasposób,wjakiscenawidocznajestnaekranie.Typowefunkcjeużywane
doustaleniaelementówtejmacierzytoglLoadIdentity,glFrustumiglOrtho.
Pierwszawczytujedobieżącejmacierzymacierzjednostkową.Zawszenależyodtego
zacząć,ponieważpozostałefunkcjesłużątylkodomnożeniabieżącejmacierzyprzez
macierzprzekształcenia.JeżelizajrzymydofunkcjiCOknoGL::UstawienieSceny
(listing1.19),znajdziemywywołaniefunkcjiglLoadIdentitytużpoprzełączeniu
macierzyaktywnejnamacierzrzutowania.Jakjużzostałopowiedziane,dwiepozo-
stałefunkcjesłużądomnożeniamacierzyprzezodpowiedniemacierzeprojekcji
macierzrzutuperspektywicznego,wktórymdalszeprzedmiotymniejszeodtych
znajdującychsiębliżej(glFrustum),lubmacierzrzutuizometrycznego,wktórym
wielkościprzedmiotówwmomencierzutowaniazachowanebezwzględunaodle-
głośćodkamery(glOrtho).Postaćmacierzyrzutuizometrycznegojeststosunkowo
prosta;jesttakskonstruowana,abywszystkieskładowezwektorówokreślających
położeniawierzchołkówfigur(werteksów)przyjmowaływartośćrównąpołożeniu
ekranu.Jeżeliekranustawimywpłaszczyźniez0,macierztabędziewyglądała
następująco:
(2.1)
1
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
Macierzrzutuperspektywicznegojestbardziejzłożona.Jednakdlaekranuprze-
chodzącegoprzezpoczątekukładuwspółrzędnych(z0)ikameryustawionej
wpunkcieሺ0,0,݀ሻuzyskamywmiaręprostąjejpostać.Alewprzeciwieństwiedo
macierzyrzutuizometrycznegomożnazapisaćtylkowewspółrzędnychjednorod-
nych(zob.dodatekB):
(2.2)
1
0
0
0
0
1
0
0
1/d
0
0
0
0
1
0
0
Wogólnościmacierzetebardziejskomplikowane.Naszczęście,korzystając
zOpenGL,niemusimydefiniowaćichjawnychpostaciprzygotująjezanasfunkcje