You are on page 1of 8

1 Matematyka wiat

Wektory, macierze, przeksztacenia. To co najwaniejsze ju mamy. Jednak aby was pognbi jeszcze troch to musz wam
napisa, e to jeszcze nie wszystko ;). Aby cokolwiek zobaczy na ekranie w przestrzeni 3D i aby miao to jaki taki sens
bdzie nam jeszcze potrzebna wiedza o kilku specjalnych przeksztaceniach. W lekcjach o Direct3D mwiem ju o nich
kilka razy, w tutorialach a zwaszcza w tym o vertex shaderach te sporo wspominaem. Jak atwo si domyli dzisiaj
bdziemy mwi od trzech przeksztaceniach, ktre pozwol przenie nam wytwory naszej wyobrani na ekran komputera i
rozkoszowa si nimi do woli. Mowa bdzie o przeksztaceniach wiata, widoku i projekcji:

Przeksztacenie wiata

Kiedy projektujemy pojedynczy model ( nie ca scen ) w jakim programie graficznym to czsto tworzymy model w
rodku ukadu wsprzdnych. Wikszo programw domylnie tak robi, bo po prostu atwiej i prociej jest takim obiektem
manipulowa i w wielu przypadkach podawa rne jego wymiary. Kiedy tworzymy scen, bierzemy nasze wczeniej
przygotowane modele i umieszczamy je gdzie w przestrzeni aby stworzyy nam ( nie zawsze ) co sensownego. Czsto gsto
okazuje si, e modele te s albo za due albo za mae. Aby scena wygldaa jako tako nieraz trzeba take model obrci albo
przesun. Caa ta procedura dostosowywania modeli do sceny bdzie nam odzwierciedla w grafice 3D tak zwane
przeksztacenie wiata. Kady, nowo tworzony model w programie graficznym posiada tak jakby swj wasny ukad
wsprzdnych i jest on umieszczony w jego rodku ( przewanie ), ze wzgldw o ktrych napisaem powyej. Jeli model
umieszczamy w scenie i co tam z nim robimy to jego wsprzdne niewtpliwie si zmieniaj. Wemy najprostsz kul.
Jeli stworzymy j w programie to najkorzystniej bdzie umieci jej rodek w punkcie ( 0, 0, 0 ) prawda ? Okrelenie jej
promienia to ju najprostsza i najwygodniejsza sprawa. Teraz wstawiamy nasz kulk na scen, ale nie ma ona lee na
rodku ale na przykad gdzie zupenie z boku, tak e prawie jej nie wida. Naley wszystkie punkty tworzce kul przesun
w odpowiednie miejsce ( tak samo jak obrci czy przeskalowa ). Mona to zrobi w ptli, biorc kady punkt i wykonujc
na nim podane operacje, ale czy potrzebnie ? Nie na darmo mwilimy w poprzednim tutorialu o przeksztaceniach
podstawowych. Jak wiemy moemy sobie wszystkie wsprzdne punktw pomnoy przez macierze, ktre dokonaj nam
na nich przeksztace. Co lepsze, moemy sobie macierze przeksztace poskada, tak aby kilka przeksztace wykona za
jednym zamachem. Wikszo pakietw graficznych oferuje nam do dyspozycji pewne mechanizmy, ktre w bardzo atwy
sposb umoliwiaj nam dokonanie takich operacji.
Kademu obiektowi na scenie moemy stworzy tak macierz i przez proste wywoanie funkcji moemy si rozkoszowa
ruchem naszego obiektu po scenie. Kady punkt obiektu zostanie automatycznie przez pakiet przeksztacony przez zadane
przez nas przeksztacenie praktycznie bez naszego udziau i zostanie umieszczony we wskazanym przez nas miejscu,
oczywicie jeli chcielibymy robi to sami to te nic nie stoi nam na przeszkodzie. Oglnie wic mwic przeksztacenie
wiata polega na tym, e wsprzdne lokalne obiektu ( te, w ktrych zosta on stworzony ) zostaj przeksztacone na
wsprzdne wiata, ktre obowizuj na naszej scenie tak, eby obiekt ten mg znale si w okrelonym miejscu o
waciwym czasie. Przeksztacenie wiata obejmuje trzy podstawowe operacje jakie moemy wykona na obiekcie, czyli
przesuwanie, skalowanie i obroty. Majc nasz obiekt, moemy stworzy macierz przeksztace i pomnoy wszystkie
wierzchoki obiektu, eby dokona przeksztacenia. W pakietach graficznych takich jak OpenGL czy Direct3D stosuje si
funkcje, ktre pobieraj tak macierz i odpowiednio przeksztacaj przez ni wszystkie punkty tworzce nasze obiekty. Tutaj
uwidacznia si jeszcze jedna zaleta tworzenia obiektw w rodku ukadu wsprzdnych. Przy aplikowaniu im
przeksztacenia wiata ( umieszczaniu ich na scenie ) najatwiej jest okreli takie przeksztacenie, poniewa po wczytaniu na
scen obiekt bdzie na samym jej rodku.
Aby bardziej sobie to uzmysowi wemy sobie may przykad, moe nie najlepszy, ale myl, e dosy wyrazisty. Mamy na
scenie Soce, Ziemi i Ksiyc. Jak to wszystko si porusza mam nadziej, e wszyscy wiedz. Model kadego z obiektw
mamy stworzony w ten sposb, e jego rodek znajduje si w punkcie ( 0, 0, 0 ) i ma jaki tam promie. Teraz wczytujemy je
na scen po kolei. Wyobramy sobie, e chcemy oglda nasz ukad patrzc na Soce, ktre pozostanie nieruchome, wok
niego bdzie kry Ziemia a wok niej z kolei ksiyc. Kademu z obiektw musimy przypisa zatem inne przeksztacenie
wiata. Soca nie bdziemy rusza, bo nie bdzie takiej potrzeby, wic przypiszemy mu takie przeksztacenie, ktre nie
spowoduje zmian w jego wsprzdnych. Czyli musimy pomnoy przez jak macierz, a jak ? Bdzie to macierz
jednostkowa, ktr powinnicie ju pamita. Macierz taka ma wartoci 1 tylko na swojej przektnej i jak kto nie wierzy, e
po pomnoeniu przez macierz wsprzdnych nie dostaniemy tego samego to niech popatrzy:

Nic si nie zmieni ? Wic w naszej aplikacji zaaplikujemy obiektowi Soca tak wanie macierz wiata. Kolej na Ziemi.
Zaoylimy sobie, e ma si obraca wok Soca. Tutaj mamy kolejny dowd na to, e dobrze byo sobie zamodelowa j
w rodku ukadu wsprzdnych. Obracanie wok rodka ukadu mamy przecie wietnie opanowane, prawda ? Wystarczy
wic tylko przesun Ziemi na odpowiedni odlego od Soca, zapewne przeskalowa do waciwych stosunkw i
obrci, nie zapominajc, e Ziemia obraca si te dookoa wasnej osi ;). Nic prostszego ! Tworzymy nasz macierz wiata
dla Ziemi:
2 Matematyka wiat

Sz - macierz skalowania Ziemi,


Tz - macierz przesunicia
Rs - macierz obrotu wok Soca,
Rz - macierz obrotu wok wasnej osi.

Macierz wynikowa:

W = Sz*Rz*Tz*Rs

Pamita musimy koniecznie o kolejnoci przeksztace. Dla naszego przykadu odpowiedni kolejnoci bdzie najpierw
skalowanie Ziemi ( w rodku ukadu wsprzdnych, e nie zmienio to adnych odlegoci ! ), obracanie wok wasnej osi,
nastpnie przesunicia i na kocu obrt. Gdybymy najpierw obrcili nasz Ziemi, wok Soca ktra znajduje si nadal w
rodku ukadu wsprzdnych a potem przesunli to Ziemia bdzie si nam owszem obraca, ale w miejscu i to w dziwny i
nieprzewidziany sposb ! Tak przygotowan macierz aplikujemy naszemu obiektowi symbolizujcemu zielon planet. Dla
macierzy obrotu oczywicie z kad liczon klatk przygotowujemy odpowiednie kty obrotu, ktre odzwierciedl faktyczn
szybko obrotw wok wasnej osi i wok Soca. Nie musze chyba mwi jak bardzo wana jest tutaj synchronizacja
czasowa, ale to temat na zupenie oddzielny artyku.
Ale to jeszcze nie koniec, czas na Ksiyc ! Nie wiem czy on obraca si wok wasnej osi, ale dla uatwienia ;) zamy
sobie, e tak. Jakie macierze bd nam potrzebne ? Ksiyc obraca si wok Ziemi wic na pewno bdzie potrzeba
przesun go na odpowiedni odlego, zaoylimy sobie, e obraca si wok wasnej osi no i zamy jeszcze, e wok
Ziemi te, cho tutaj to mam potne wtpliwoci, no ale jak szale to szale ;). Cay czas rwnie obraca nam si Ziemia
wok Soca, wic o tym te nie mona zapomina. Potrzebne macierze wic:

Sk - macierz skalowania ksiyca,


Tk - macierz przesunicia wzgldem Ziemi,
Rk - macierz obrotu wok wasnej osi,
Rkz - macierz obrotu wok Ziemi,
Rs - macierz obrotu Ziemi wok Soca,
Tz - macierz przesunicia Ziemi wzgldem Soca.

No i kolej na macierz wiata:

W = Sk*Rk*Tk*Rkz*Tz*Rs

Wzr strasznie skomplikowany, ale ze zrozumieniem nie powinno ju by raczej wielkich problemw. Najpierw
odpowiednio skalujemy ( Sk ) ksiyc w rodku ukadu ( eby nie pozmienia odlegoci ! ), nastpnie obracamy go wok
wasnej osi ( Rk ), potem przesuwamy na odlego, w jakiej powinien znajdowa si od Ziemi ( Tk ). Majc taki ukad
moemy go obrci wok naszej planety ( Rkz ). Nie zapominamy jednak cigle, e Ziemia obraca si wok Soca, wic
ksiyc rwnie na tym cierpi. Musimy cao tego przesun na odlego Ziemi od Soca ( Tz ) i obrci ( Rs ).
Uff ! Mam nadziej, e wszystko zostao zrozumiane ;). Oczywicie to co opisaem nie jest w adnym razie ukadem
optymalnym, to tylko ilustracja do czego moe suy macierz wiata, jak tak macierz skonstruowa i jak si ni
posugiwa. Ale ogln ide mam nadziej, e rozumiecie.

Przeksztacenie widoku

Majc gotowy przykad z naszym mini - ukadem planetarnym wyobramy sobie teraz, e siedzimy w statku kosmicznym
obcych i przylatujemy sobie z jakiej odlegej galaktyki, eby sprawdzi jak radzi sobie ta szalona rasa ludzi. Wlatujemy do
naszego ukadu i ogldamy go sobie dokadnie z kadej strony. Do tej pory widzielimy wszystko z gry, wszystko byo
proste i adne. Ale co bdzie jeli zapragniemy sobie na przykad usi gdzie z boku i popatrze na to wszystko ? Ano
wtedy w grafice 3D przychodzi nam z pomoc wanie przeksztacenie widoku. C to jest takiego.
Ano przeksztacenie widoku powoduje to, e niejako moemy umieci obserwatora ( czyli de facto nas samych :) w naszym
wiecie, w dowolnym jego punkcie i bdziemy mogli sobie spojrze w dowoln stron naszego wiata, kademu obiektowi
przyjrze si bliej. Mwic naukowo i w odniesieniu do wierzchokw zostan one przeksztacone ze wsprzdnych wiata
do wsprzdnych kamery. Efekt patrzenia z dowolnego miejsca w dowolnym kierunku bdziemy mogli zatem osign
stosujc na naszej scenie wanie przeksztacenie widoku a dokadniej mwic mnoc wszystkie wierzchoki na scenie przez
macierz widoku, ktra bdzie symbolizowa to przeksztacenie. Macierz widoku bdzie przeksztaca wszystkie wsprzdne
ze wiata do wsprzdnych kamery bazujc na podstawie pooenia samej kamery ( ktre to pooenie bdzie rodkiem
ukadu wsprzdnych kamery ) oraz kierunku jej patrzenia.
Istnieje wiele sposobw wyznaczania takiej macierzy. W kadym jednak z nich musimy okreli pooenie samej kamery jak
i punktu na ktry ona patrzy. Pooenie to bdziemy okrela oczywicie we wsprzdnych wiata, czyli de facto powiemy
gdzie naprawd znajduje si nasza kamera w stosunku do obiektw. Macierz widoku bdzie obraca i przesuwa obiekty na
scenie, tak aby umieci je w ukadzie wsprzdnych kamery ( to znaczy tak zmieni wsprzdne obiektw, ebymy mieli
wraenie, e patrzymy na nie z okrelonego miejsca ). Jednym ze sposobw jest stworzenie takiej macierzy, na ktr bd si
3 Matematyka wiat

skada macierz przesunicia i macierze obrotw wok kadej z trzech osi. Oglny wzr na macierz widoku przy takim
podejciu przyjmie posta nastpujc:

V = T*Rx*Ry*Rz

V to oczywicie nasza szukana macierz widoku, T to macierz przesunicia a kolejne R-y to macierze obrotw dla
poszczeglnych osi. Macierze przesunicia i obrotw s tworzone na podstawie jak ju wspomniaem wczeniej pooenia
kamery we wsprzdnych wiata. Zacznijmy od przesunicia - jeli kamera jest na przykad pooona w punkcie ( 10, 20,
100 ). Wtedy kady obiekt bdziemy musieli przesun dokadnie o -10 jednostek wzdu osi X, -20 wzdu osi Y i -100
wzdu osi Z. Dlaczego ? Ano wyobramy sobie, e w tym punkcie, w ktrym mamy kamer mamy te jaki inny punkcik,
ktry moemy widzie. Jeli na ten punkt popatrzymy si przez kamer to gdzie on si znajdzie ? No chyba oczywiste ! W
samym rodku kamery, prawda ? A wic de facto w punkcie ( 0, 0, 0 ) :), jasne ? Mam nadziej, e oczywiste dla wszystkich.
Teraz obroty.
Je tworzy si ze wzgldu na to, jak osie ukadu wsprzdnych kamery s ustawione wzgldem osi ukadu wsprzdnych
wiata, czyli tak naprawd bdzie tutaj bra udzia kierunek patrzenia kamery i kty jakie tworzy z osiami ukadu
wsprzdnych wiata. Dla przykadu, jeli kamera, o ktrej mwilimy wczeniej jest skierowana w ten sposb, e patrzy
bezporednio w d, wtedy jej o Z jest obrcona wzgldem osi Z ukadu wiata o 90 stopni. Macierze obrotw obracaj nam
obiekty o dan wielko ale odwrotnie. Czyli jeli obrcimy kamer o 60 stopni w gr to faktycznie musimy obrci obiekty
o 60 stopni w d aby osign zamierzony efekt. Jeli nie wierzycie to wyobracie sobie, e chodzimy sobie po budynku i
nagle patrzymy w gr. Co dzieje si z obiektami ? Nagle znikaj ale... na dole ekranu ! Wic tak naprawd to obracamy
obiekty a nie kamer.
Innym sposobem tworzenia macierzy widoku jest sposb bardziej bezporedni, z ktrego korzystaj midzy innymi funkcje z
Direct3D. Skorzystamy tutaj z wasnoci macierzy ortogonalnej, o ktrej ju bya mowa. Aby stworzy macierz widoku
skorzystamy ze wsprzdnych kamery umieszczonych we wsprzdnych wiata, aby okreli pooenie osi ukadu kamery.
Nazwijmy sobie dla uatwienia sprawy punkt na ktry patrzymy punktem celu kamery. Najpierw policzymy sobie wektor,
ktry czy pooenie kamery z punktem celu wanie poprzez odjcie od celu punktu pooenia kamery. Otrzymamy w ten
sposb pewien wektor, nazwijmy go n. Nastpnie wykonajmy iloczyn wektorowy tego wektora z osi Y ukadu
wsprzdnych wiata. W jego wyniku otrzymamy wektor prostopady do tych, ktre bior udzia w naszym iloczynie ( co
wiemy ) i bdzie on skierowany w prawo od paszczyzny jak tworz te dwa wektory ( radz sobie przypomnie lekcj o
wektorach ;). W nastpnej kolejnoci normalizujemy go i otrzymujemy wektor, nazwijmy go u. Ale to nie koniec, bo
bdziemy jeszcze potrzebowa do naszych rozwaa jeszcze jednego wektora. Stwrzmy iloczyn wektorowy wektorw n i u,
czyli tego, ktry determinuje kierunek patrzenia kamery i wektora skierowanego w prawo. Po wykonaniu tego dziaania
dostaniemy wektor skierowany w gr, prostopady do paszczyzny tworzonej przez wektory n i u - nazwijmy go sobie v.
Wektory n, u i v okrelaj nam w tym momencie ukad wsprzdnych kamery w stosunku do ukadu wsprzdnych wiata,
co atwo sobie chyba wyobrazi. Aby zrozumie na czym polega caa idea tworzenia macierzy w ten sposb bdzie nam
potrzebna wiedza o dwch rzeczach. Po pierwsze jak tworzy si oglnie macierz widoku i to omwilimy sobie powyej oraz
jak dziaa macierz ortogonalna i to te powinnimy wiedzie z poprzednich lekcji.

W ostatnim wierszu macierzy widoku powinnimy mie wsprzdne oznaczajce wektor przesunicia wszystkich punktw
wiata aby znalazy si one we wsprzdnych kamery. S nam potrzebne trzy skadowe - x, y i z. Skd je policzy ?
Wrmy na chwil do lekcji o wektorach i do pewnej sztuczki zwizanej z iloczynem skalarnym wektorw. Jeli
wykonalimy iloczyn dla takich dwch wektorw, z ktrych jeden by wektorem jednostkowym to otrzymywalimy wtedy
kt pomidzy wektorami, pomnoony przez dugo wektora, ktry nie by wektorem jednostkowym. W rzeczywistoci, jeli
pamitamy rysunek rzutowalimy niejako wektor nie jednostkowy na prost, ktra zawieraa wektor jednostkowy i tam
powstawa odcinek bdcy dugoci wyliczon z iloczynu skalarnego. T wanie sztuczk zastosujemy teraz tutaj:

Wektor biay to wektor jednostkowy u, czerwony to drugi z wektorw biorcych udzia w iloczynie skalanym v, natomiast
zielony wyznacza warto jak bdzie mia odcinek po zrzutowaniu wektora nie jednostkowego na prost zawierajc ten
drugi.

Jak powiedzielimy sobie, potrzebujemy trzech skadowych, aby mc przesun wszystkie punkty do ukadu wsprzdnych
kamery. Wiemy te, e potrzebujemy wektorw jednostkowych. Te ostatnie wemiemy oczywicie z ukadu kamery - bd
to wektory n, u i v, ktre obliczalimy kilka linii wyej. Wszystkie one bd znormalizowane, czyli dokadnie wanie takie,
jakich potrzebujemy. Teraz chcemy wiedzie o ile przesuwa punkty w osiach X, Y i Z aby znalazy si one w ukadzie
4 Matematyka wiat

kamery.
Ca operacj moe pokaemy sobie na przykadzie skadowej x, bo nie ma chyba wikszego sensu robi tego dla
wszystkich, nadmieni naley, e wektory i skadowe bd powizane w sposb nastpujcy ze sob - odlego x policzymy
z wektora u, y z wektora v a skadow z z wektora kierunkowego czyli n. Ale powracajc do skadowej x - w ukadzie
kamery za t o jest odpowiedzialny wektor u, wic posumy si nim. Przeksztacanie do ukadu wsprzdnych kamery
polega jak wiemy na tym, eby tak poustawia punkty, eby robiy wraenie widzianych z jakiego punktu rnego od ( 0, 0,
0 ). I wrmy do przykadu z punktem, ktry ley w tym samym miejscu co kamera. Jeli przepuci go przez macierz
widoku to powinien on mie dokadnie wsprzdne ( 0, 0, 0 ), bo ley w tym samym miejscu co kamera, o tym ju
mwilimy. Pamitamy na pewno sztuczki z przesuwaniem wektorw w przestrzeni i wiemy, e nie wpywa to na iloczyn
skalarny, prawda ? Przesumy wic sobie wektor oznaczajcy pooenie naszej kamery ( c ) tak, aby jego pocztek pokrywa
si z ukadem wsprzdnych kamery.

Teraz zgodnie reguami sztuczek na wektorach rzutujemy sobie wektor c na prost zawierajc wektor jednostkowy u.
Otrzymana dugo bdzie dokadnie tym, czego szukamy - iloci jednostek, o jakie naley przesun punkt aby znalaz si
on w ukadzie wsprzdnych wiata. Zauwamy te, e punkt niejako cofamy do rodka naszego ukadu, wic musimy
odwrci zwrot tego wektora, o ktry bdziemy cofa, w macierzy oglnej bdzie to bardzo dobrze wida. Trzeba przyzna,
e ten pomys podoba mi si o wiele bardziej ni skadanie macierzy z transformacji i poszczeglnych obrotw. Oczywicie
analogicznie bdzie dla pozostaych skadowych, mam nadziej, e bdziecie potrafili sobie to wyobrazi bez wikszych
problemw.

Teraz czas na reszt skadowych w macierzy, czyli na obroty. Albo moemy pomnoy poszczeglne macierze obrotw i
zoy nasz macierz w cao albo moemy zauway pewn rzecz. Wektory ukadu kamery, ktre wyznaczalimy w jaki
tam sposb wyznaczaj nam orientacj kamery w przestrzeni wzgldem ukadu wiata. Majc ukad wsprzdnych i
wektory kamery bdziemy widzie bardzo dokadnie jak kamera jest pooona w wiecie, gdzie patrzy, gdzie ma gr i tak
dalej. Wektory te mamy znormalizowane. Wrmy zatem na chwilk do lekcji o przeksztaceniach i macierzach
ortogonalnych. Czy ju wiecie skd wemiemy cz macierzy odpowiedzialn za obroty ? Skoro nasze wektory bd
znormalizowane ( jednostkowe ) i bd w stosunku do siebie ortogonalne to bdziemy mogli zamiast sinusw i cosinusw
wstawi wsprzdne tych wektorw, bo wartoci kolejnych ich wsprzdnych przecie bd cile odpowiada wartociom
w kolumnach macierzy. Macierz na przeksztacenie widoku zatem przyjmie posta:

Przeksztacenie projekcji

No i ju prawie docieramy do koca w naszych rozwaaniach. Potrafimy umieci obiekty w wiecie, potrafimy
przeksztaci je tak aby widzie je w zasadzie z dowolnego miejsca. Ale wszystko to ma jeden may szkopu - dzieje si w
wiecie 3D. Kto powie, no oczywicie e tak, przecie nam o to wanie chodzi. No i po troch bdzie mie racj, ale nie
moemy zapomina, e nasz monitor ma jedn bardzo istotn wad. Jego ekran jest plaski i nie ma trzeciego wymiaru ! Czy
wic w tym miejscu zakoczy si nasza przygoda z grafik 3D ? Postarajmy si aby tak nie byo.
Wyobramy sobie zatem, e mamy tak wirtualn kamer, ktr moemy w zasadzie umieci sobie w wiecie w dowolnym
5 Matematyka wiat

miejscu, skierowa w dowoln stron. Kamer to moemy porusza w dowolny sposb tworzc animacje lub oglda obiekty
z rnych stron. Aby jednak byo mona wykorzysta nasz kamer do czego konkretnego musimy sobie powiedzie o
czym takim jak rzut. Z czym to si je ? Definicja mwi, e rzut przeksztaca punkt w n-wymiarowym ukadzie
wsprzdnych na punkt w ukadzie, ktrego wymiar jest mniejszy ni n. W naszym oglnie przyjtym przypadku bdziemy
sobie przeksztaca prawie realny wiat 3D na paski ekran monitora czyli na ukad o wymiarze 2D. Niewtpliwie wic nasze
kombinowanie z punktami bdzie powizane z rzutem. Rzuty ( bo jest ich wiele ) moemy podzieli na kilka rodzajw, w
zalenoci od parametrw. W grafice komputerowej zajmowa si bdziemy gwnie tak zwanymi planarnymi rzutami
geometrycznymi. Rzuty te charakteryzuj si tym, e rzutowanie naszych punktw z przestrzeni 3D bdzie si odbywa na
paszczyzn 2D a promienie rzutujce bd liniami prostymi. Co to promienie rzutujce i paszczyzna wyjani si ju za
momencik a teraz zajmijmy si rodzajami rzutw. Paskie rzuty o ktrych tutaj mwimy mona podzieli na dwa
podstawowe - perspektywiczne i rwnolege. Rnica pomidzy nimi tkwi w tym, gdzie ley rodek rzutowania, czyli punkt
z ktrego wychodz promienie rzutujce. Jeli rodek rzutowania jest w skoczonej odlegoci od paszczyzny na ktr
rzutujemy to taki rzut bdziemy nazywa perspektywicznym - czyli bdziemy mieli do czynienia ze zjawiskiem perspektywy
na scenie, ale o tym dalej. Jeli rodek rzutowania bdzie lea w odlegoci nieskoczonej ( w nieskoczonoci ) od
paszczyzny to taki rzut nazwiemy rwnolegym.
Jeli do obiektu zastosujemy rzut perspektywiczny to otrzymamy to co dobrze znamy z fotografii czy choby z tego co
widzimy ma co dzie, czyli tak zwany skrt perspektywy. Im dalej bdziemy od rodka rzutowania bdzie obiekt tym jego
obraz na paszczynie rzutowania bdzie mniejszy - myl e nie trudno to sobie chyba wyobrazi, prawda ? Natomiast rzut
rwnolegy daje obraz mniej realistyczny - nie ma skrtu perspektywy i wielkoci obiektw nie zmieniaj si. Rzuty takie
mona stosowa do pomiaru odlegoci na przykad, zreszt te go doskonale znacie na przykad z rysunku technicznego jak
sdz. Jakby tego byo mao poszczeglne rzuty moemy podzieli na jeszcze wicej kategorii, o ktrych jednak tylko moe
wspomnijmy. Perspektywiczne rzuty mog dzieli si na jedno-, dwu- i trzypunktowe, w zalenoci od tego ile maj tak
zwanych podstawowych punktw zbienoci, ktre jak atwo si domyle s miejsca gdzie zbiegaj si linie. Nazywaj si
podstawowymi poniewa punkty te mieszcz si na osiach ukadu wsprzdnych i std moe ich by co najwyej trzy. My
w naszych rozwaaniach raczej bdziemy si zajmowa tylko pierwszym przypadkiem, czyli rzutami jednopunktowymi
perspektywicznymi. Natomiast rzuty rwnolege s bardziej skomplikowane - w zalenoci od kierunku rzutowania, to
znaczy kta pod jakim promie rzutujcy przecina paszczyzn rzutowania moemy wyrni rzuty prostoktne lub ukone
Rzuty prostoktne znamy te doskonale z lekcji rysunku technicznego - widok z boku, z gry, z przodu plus dodatkowo rzuty
aksonometryczne, w tym izometrie - a moe niektrzy z was mieli te styczno z rzutami ukonymi i takimi terminami jak
rzut ukony wojskowy, kawaleryjski i tym podobne. eby usystematyzowa troch ten podzia moe krciutkie
podsumowanie:

Rzuty:

Perspektywiczne
o Jednopunktowe
o Dwupunktowe
o Trzypunktowe
Rwnolege
o Prostoktne
widok z boku
widok z przodu
widok z gry
Aksonometryczne
Izometryczne
Inne
o Ukone
Wojskowe
Kawaleryjskie
Inne

Sposobw tworzenia macierzy projekcji jest kilka, kady pakiet do tworzenia grafiki 3D stosuje swj wasny, ale nie
bdziemy ich wszystkich tutaj omawia, skupimy si moe na tych, ktre s zawarte w SDK do DirectX. Oczywicie oglne
zasady s podobne do wszystkich i moe od nich zaczniemy. W wikszoci naszych przykadw uywa bdziemy
oczywicie rzutowania perspektywicznego, eby otrzyma zudzenie wiata widzianego naszymi oczami i dlatego przede
wszystkim omwimy sobie tworzenie macierzy projekcji dla tego typu rzutu.
Z punktu widzenia Direct3D przeksztacenie projekcji skada si z dwch oddzielnych przeksztace - perspektywy i
skalowania. Jak doskonale wiemy z wasnego dowiadczenia czowiek nie ma oczu wok gowy i widzi tylko wycinek
przestrzeni. Wycinek takie charakteryzuje si tym, e obiekty widzimy w zasadzie tylko w pewnym zakresie, od tych ktre s
najbliej nas do tych, ktre le czasem nawet bardzo daleko. W zasadzie pole widzenia nie jest ograniczone ale rne
czynniki, takie jak atmosfera, przeszkody terenu i tym podobne powoduj, e nie widzimy dalej ni na kilkaset do kilku
tysicy metrw, ale moe nie kmy si o szczegy. W komputerowej rzeczywistoci nasz wiat zawsze bdzie
ograniczony i to z kilku powodw - mocy obliczeniowej nie wystarczajcej do zwizualizowania nieskoczonej iloci
obiektw, skoczonych wielkoci typw liczb i tym podobnych rzeczy. Biorc rzecz praktycznie, niewiele bdzie nam to
6 Matematyka wiat

przeszkadza i moemy sobie spokojnie zaoy, e nasz widzialny wycinek moe by ograniczony. atwo te myl sobie
wyobrazi to, e im bliej bdzie do naszego oka, tym wycinek widzialny bdzie mniejszy. Moe ten rysunek wyjani wam
pogldowo o co chodzi:

Da si tutaj zauway, e widzialny obraz nie zaczyna si koniecznie od samego pooenia naszego oka ( kamery ).
Wyobramy sobie na przykad sobie, e stoimy w bardzo ciemnym pokoju i patrzymy na wiat przez otwarte okno. Stoimy w
pewnej odlegoci od okna. To co widzimy rozpoczyna si dopiero w momencie kiedy koczy si pokj i jest ciana z oknem
a koczy gdzie na horyzoncie, albo czym, co nam przysoni widok. Jeli podejdziemy bliej okna to nasz widoczny
wycinek troch si bdzie zmienia ( wyprbujcie w wolnej chwili ). Zauwamy rwnie wan rzecz - przednia paszczyzna
obcinania zaznaczona na rysunku bdzie nasz paszczyzn, na ktr bdziemy rzutowa wszystkie obiekty, ktre znajd si
w widocznym wycinku czyli bdzie nasz paszczyzn rzutowania lub krtko mwic rzutni. Pokamy sobie moe jeszcze
jeden rysuneczek, na ktrym bdziemy sobie analizowa nasze obliczenia:

Kady rodzaj rzutu, o ktrych wspominaem wyej mona okreli za pomoc macierzy 4x4 a jak t macierz wyznaczy ?
Przypatrzmy si bliej rzutowi perspektywicznemu i zamy sobie, e gdzie w widocznym wycinku mamy punkt P. Punkt
P ma zosta zrzutowany na paszczyzn rzutowania ( kolor niebieski ). Zauwamy na rysunku powyej, e kamera ley w
odlegoci D od pocztku tego kawaka naszej przestrzeni, ktrego uywalimy podczas tworzenia macierzy widoku. Tam
wszystkie nasze punkty zostay tak przeksztacone, e znalazy si w ukadzie wsprzdnych kamery. W tym ukadzie teraz
okrelamy sobie granice naszego widocznego wycinka. Korzystajc z rnych matematycznych sztuczek i kombinowania
dojdziemy w kocu do tego, e wsprzdne naszego punktu Pp ( zrzutowanego punktu P na nasz rzutni ) trzeba bdzie
podzieli w jaki sposb przez wielko D. Dla nas bdzie to po prostu wspczynnik o jaki bdziemy skalowa nasze
obiekty - wiemy doskonale, e im dalej bdziemy od naszego obiektu tym bdzie on mniejszy, wydaje nam si to zupenie
naturalne. Macierz, ktra spowoduje nam takie zachowanie wierzchokw a co za tym idzie i caych obiektw bdzie
wyglda tak:

Poniewa nasza paszczyzna rzutowania ley w odlegoci D od naszego oka wic aby wszystko nam grao koniecznym
bdzie jeszcze przesunicie wszystkich punktw o t wanie odlego, tak aby przednia paszczyzna obcinania znalaza si
7 Matematyka wiat

w punkcie, w ktrym aktualnie pooona jest kamera. Macierz przesunicia potrafimy sobie wyznaczy, bo jest zupenie
banalna i wyglda dla naszego przypadku tak:

Mnoc teraz macierz przesunicia ( aby punkty i paszczyzna rzutowania znalazy si nam we waciwym miejscu ) przez
macierz perspektywy ( aby obiekty zrobiy si wiksze lub mniejsze ) otrzymamy tak zwan poczon macierz projekcji.
Moemy sobie to wyobrazi w ten sposb, e nasz widoczny wycinek jest przesuwany do rodka ukadu wsprzdnych a
nastpnie od strony przedniej paszczyzny obcinania jest on powikszany tak aby wsprzdne rogw ograniczajcych
przedni jak i tyln paszczyzn obcinania mieciy si w zakresie od -1 do 1. Przednia paszczyzna obcinania bdzie leaa w
punkcie 0 jeli chodzi o wsprzdn z natomiast tylna w punkcie o wsprzdnej z rwnej 1.
Ta macierz zbudowana w oparciu o odlego kamery od bliszej paszczyzny obcinania bdzie nam skalowa i przesuwa
obiekty, tak eby wszystko adnie wygldao. Jednak nie bierze ona pod uwag dwch wanych aspektw sprawy. Po
pierwsze wartoci z naszych punktw bd si mieci w bardzo maym przedziale bo od 0 do 1 co moe bardzo utrudni
potem nam przeprowadzenie porwna odlegoci i prawidowe malowanie niewidocznych cian. Po drugie - wrmy
jeszcze do naszego przykadu z oknem. Zauwamy, e okno nasze moe by rnej wielkoci, przy czym nie zmienia ono
swego pooenia wzgldem nas ! Okno wic moe by szersze i wysze a co to dla nas oznacza ? To tak samo jak oglda
film w dobrym kinie i w sabym telewizorze - w kinie na obrazie panoramicznym zobaczymy o wiele wicej ni na obcitym
do granic moliwoci obrazie telewizyjnym. U nas, jeli zmienia bdziemy rozmiary naszego okna zmienia si bdzie na
pewno nasz widoczny wycinek, prawda ? A wic bdziemy mogli widzie na przykad wicej obiektw albo wiksz cz
sceny, oczywicie wszystko w granicach rozsdku, ale pole do popisu mamy dosy spore. Niestety nasza przed chwil
wyprowadzona macierz nie uwzgldnia takiego typu dziaa, w aden sposb nie moemy w niej okreli wielkoci naszego
okna a jak atwo si przekona nie bdzie to nic innego jak kt naszego widzenia. Jeli nasze okno byoby odpowiednio due
to moglibymy niemal widzie ca przestrze od lewa do prawa nieograniczeni adnym wycinkiem czyli obraz w zakresie
prawie 180 stopni. Powstaje wic pytanie jak to przenie do przeksztacenia projekcji eby miao wpyw na nasz obraz.
Poniewa mylimy o rozszerzaniu naszego pola widzenia no to pewnie przyjdzie nam dokona jakiego skalowania. A
dlaczego ? No popatrzmy - obraz nam si poszerza, widzimy coraz szerzej i wicej, ale niestety ( ! ) nasz monitor jak mia te
-nacie cali tak ma dalej i nic a nic nie chce si rozcign. Skoro nie moe gra do Mahometa to Mahomet przyjdzie do gry
i aby uzyska efekt "rozcigania" obrazu my bezczelnie go po prostu zmniejszymy. Poniewa rozmiary naszego okna bdzie
mona zmienia zarwno w pionie i poziomie wic skalowa te bdziemy w tych samych kierunkach. Pamitacie macierz
skalowania ? Dwa pierwsze skadniki na przektnej suyy za wspczynniki skalowania dla osi X i Y a my oznaczmy sobie
je u nas w i h ( jak szeroko i wysoko z angielskiego ). O ile naley przeskalowa nasz scen wraz ze zmian rozmiarw
? Przypatrzmy si naszemu rysunkowi prezentujcemu t operacje powyej, jak wida szeroko przedniej paszczyzny
obcinania mona policzy z nastpujcego wzoru:

Poniewa my bdziemy zwikszali ( lub zmniejszali ) nasz kt widzenia wic wspczynnik skalowania dla osi Y troch
prostszy ni to co powyej przyjmie posta:

I chyba nie musz dodawa, e dla osi X bdzie bardzo podobnie:

Co natomiast z odlegoci Z ? Napisaem, e przedzia od 0 do 1 bdzie stanowczo za may, eby dobrze sobie potem radzi
z wykrywaniem niewidocznych cian, zwaszcza dla z-buforw o maej rozdzielczoci. Przeksztacenie projekcji najpierw
powodowao to, e wsprzdne z obiektw byy ciskane do przedziau ( 0, 1 ) wic teraz naleaoby zadba o to, eby te
wsprzdne jako poszerzy. do tego celu posuy nam wanie czynnik Q:
8 Matematyka wiat

gdzie Zf to dalsza paszczyzna obcinania a Zn blisza.


Rwnania w postaci macierzowej dla wymienionych przeze mnie operacji mona zapisa jako:

W ostatnim wierszu tej macierzy projekcji mamy jeszcze przesunicie o warto -Zn*Q. Spowoduje to przesunicie
wszystkich punktw o przeskalowane odlegoci w ty, aby rodek naszej sceny znajdowa si w rodku ukadu projekcji.

Czasem zdarza si, e zamiast podawa kty widzenia w poszczeglnych osiach my podamy sobie szeroko naszego okna w
jednostkach wystpujcych na przykad na scenie. Cae przeksztacenie projekcji tak przeksztaca nam dane aby zmieciy si
one w szecianie o wsprzdnych od -1 do 1 w osiach X i Y oraz 0 do 1 w osi Z. Robi si to po to aby atwiej mona byo
zaimplementowa algorytmy obcinania w tak zwanej kanonicznej bryle widzenia 0 bry t jest szecian o ktrym wanie
mowa. Obcinanie w kanonicznej bryle widzenia jest o wiele prostsze i co najwaniejsze szybsze ni w kadej innej.
Czasem w naszej aplikacji zdarza si, e wygodniej nam bdzie poda wymiary okna, przez jakie patrzymy na nasz wiat ni
kt patrzenia. Majc odlego do przedniej paszczyzny obcinania Zn bdziemy mogli sobie jednak w atwy sposb
wyznaczy czynniki skalujce nasze obiekty w osiach X i Y ze wzgldu na wielko okna. Kiedy nie bdziemy posugiwa
si ktami moemy posuy si prostymi zalenociami:

Zn to oczywicie odlego od przedniej paszczyzny obcinania, Vw i Vh to szeroko i wysoko naszego okna wyraona
we wsprzdnych ukadu kamery.

I to byoby w zasadzie na tyle z zastosowa macierzy i przeksztace w 3D dla osigania jaki bardzo specyficznych efektw,
w zasadzie takich ktre potrafi da nam naprawd wraenia podobne do tych, z prawdziwego wiata. Niektre rzeczy mog
wam si wyda zakrcone, ze szczeglnym wskazaniem na macierz projekcji, ale tak jak napisaem wikszo omwionego
tutaj materiau znajduje tak wanie realizacj w bibliotece Direct3D. Nic oczywicie nie stoi na przeszkodzie, ebycie
sobie mogli napisa wasne sposoby przeksztacania sceny, niekiedy moe nawet bardziej optymalne ni te, przedstawione
tutaj. Nam to na razie w zupenoci wystarczy do dalszego dziaania i teraz bdziemy mogli si zaj naprawd bardziej
interesujcymi rzeczami w grafice 3D ni tylko obracajce si szeciany. Mam nadziej, e wikszo tego materiau jest dla
was w miar zrozumiaa, dzikuj za uwag i zabieram si za nastpny artykulik ;). Do zobaczenia nastpnym razem...

You might also like