Obrazem dowolnego punktu w rzucie równoległym jest taki
punkt
położony na rzutni, że kierunek wektora
(o ile nie jest to wektor zerowy) jest kierunkiem rzutowania.
Takie rzutowanie równoległe jest powszechnie używane w rysunku technicznym, gdzie jednym z celów jest umożliwienie odtworzenia (restytucji) punktu w przestrzeni na podstawie rysunku. Inna potrzeba, do pewnego czasu dominująca w projektowaniu przemysłowym, to dokonywanie konstrukcji geometrycznych w przestrzeni trójwymiarowej na płaskich rysunkach. Na podstawie tych potrzeb rozwinęła się geometria wykreślna, która obecnie wydaje się być sztuką w zaniku — użycie komputerów zwalnia od wysiłków i coraz częściej przedmiot ten jest wykładany już tylko po to, aby rozwijać wyobraźnię przestrzenną u studentów architektury (tego, niestety, czy na szczęście, komputer nie zastąpi). Istnieją dwa podstawowe podejścia do stosowania rzutowania równoległego w rysunku technicznym: metoda Monge'a6Gaspard Monge, 1746–1818, czyli wykonywanie konstrukcji trójwymiarowych na dwóch obrazach będących rzutami prostopadłymi na dwie, wzajemnie prostopadłe rzutnie, oraz aksonometria.
Podstawowe znaczenie dla aksonometrii ma twierdzenie Pohlkego: dobierając odpowiednio rzutnię i kierunek rzutowania można odwzorować wierzchołki danego czworościanu na figurę podobną do zbioru dowolnych czterech punktów, z których żadne trzy nie leżą na jednej prostej.
Na podstawie tego twierdzenia możemy określić rzut aksonometryczny, wybierając obraz początku układu współrzędnych i trzy wektory (z których żadne dwa nie są liniowo zależne) — obrazy wersorów osi. W ten sposób postąpiliśmy w celu narysowania wykresu funkcji przy użyciu algorytmu z pływającym horyzontem, określając rzut aksonometryczny. Rzuty stosowane najczęściej w rysunku technicznym są pokazane rysunku 5.3
Obrazem punktu w rzucie perspektywicznym jest punkt
,
który jest przecięciem rzutni i prostej przechodzącej przez
i
środek rzutowania (czyli punkt położenia obserwatora).
Rzut równoległy można interpretować jako graniczny przypadek rzutu perspektywicznego, gdy obserwator znajduje się w bardzo dużej odległości.
W rysunkach technicznych części maszyn rzut perspektywiczny bywa używany bardzo rzadko, głównie w rysunkach poglądowych, takich jak schematy montażowe, natomiast często stosuje się go w architekturze. Opracowanie konstrukcji geometrycznych związanych z tym sposobem rzutowania wiąże się z historią malarstwa, którą tu się nie zajmujemy.
Zależnie od położenia rzutni względem głównego obiektu na obrazie, mówimy o perspektywie jednopunktowej, dwupunktowej i trzypunktowej. Z obiektem związane są trzy kierunki osi, jakoś powiązane z obiektem (najbardziej oczywisty związek jest wtedy, gdy obiekt jest prostopadłościanem). Poszczególne przypadki otrzymamy wybierając rzutnię tak, aby jeden, dwa lub trzy spośród tych kierunków nie były równoległe do rzutni.
Przekształcenie rzutowe jest to przekształcenie przestrzeni
rzutowej (tj. afinicznej uzupełnionej o punkty niewłaściwe, czyli
kierunki), któremu odpowiada różnowartościowe (czyli o nieosobliwej
macierzy) przekształcenie liniowe przestrzeni jednorodnej. Macierz
reprezentująca przekształcenie afiniczne we współrzędnych
jednorodnych ma ostatni wiersz o postaci (lub ogólniej
dla dowolnego
). Przekształcenia rzutowe otrzymamy
dopuszczając dowolne liczby w ostatnim wierszu (pod warunkiem
zachowania nieosobliwości macierzy; wymaganie to bierze się stąd, że
punkt
przestrzeni współrzędnych jednorodnych, który jest
obrazem pewnych niezerowych wektorów jeśli macierz jest osobliwa, nie
reprezentuje żadnego punktu przestrzeni rzutowej).
Dowolne przekształcenia rzutowe są nieco rzadziej niż afiniczne stosowane w modelowaniu obiektów, ale przydają się do określenia rzutowania perspektywicznego, a zatem ich implementacja jest zawsze potrzebna w grafice ,,trójwymiarowej” i często realizowana w sprzęcie.
Rzutowanie, tj. odwzorowanie przestrzeni trójwymiarowej na płaszczyznę ekranu, zwykle określa się opisując za pomocą odpowiednich parametrów tzw. wirtualną kamerę, przy czym w różnych pakietach graficznych szczegóły tego postępowania mogą być różne. Wirtualna kamera związana jest z kartezjańskim układem współrzędnych kamery i pierwszy krok rzutowania punktu polega na obliczeniu jego współrzędnych w tym układzie.
Przypuśćmy, że początek układu współrzędnych kamery jest
położeniem obserwatora (albo środkiem obiektywu) i że oś tego
układu jest osią optyczną obiektywu. Rzutnia jest płaszczyzną
prostopadłą do tej osi, tj. jest równoległa do płaszczyzny
układu kamery i leży w odległości
od tej płaszczyzny.
Wyróżnimy klatkę, czyli prostokąt leżący
w rzutni, w którym obraz będzie np. wyświetlony na ekranie
(boki klatki są równoległe do osi
i
). Kierunek rzutowania
lub położenie obserwatora i klatka określają tzw. bryłę
widzenia, będącą zbiorem punktów, których rzuty należą do klatki.
Rzutowanie równoległe polega na zignorowaniu współrzędnej (oś
wyznacza kierunek rzutowania).
Obraz punktu
w rzucie perspektywicznym ma współrzędne
,
i
, przy czym tę ostatnią współrzędną zignorujemy.
Zauważmy, że współrzędne
,
,
w układzie kamery są
(z dokładnością do stałej
) współrzędnymi jednorodnymi obrazu
rozpatrywanego punktu na klatce, przy czym współrzędna
jest
współrzędną wagową. Przypuśćmy, że zamiast współrzędnych
kartezjańskich
,
,
, do reprezentowania punktu używamy
współrzędnych jednorodnych
,
,
,
, takich że
,
,
. Wtedy wektor
możemy poddać przekształceniu, które w przypadku
rzutowania równoległego i perspektywicznego polega na pomnożeniu
go odpowiednio przez macierz
![]() |
Wynikiem mnożenia jest wektor albo
,
a zatem w każdym z tych przypadków otrzymujemy współrzędne
jednorodne odpowiedniego obrazu rzutowanego punktu na płaszczyźnie rzutni.
Po obliczeniu wspołrzędnych jednorodnych wykonuje się dwa dzielenia, a następnie dokonuje jeszcze jednego przekształcenia afinicznego, którego celem jest przejście do współrzędnych urządzenia (jednostką w tym układzie jest szerokość lub wysokość piksela). Współrzędne w układzie urządzenia można następnie zaokrąglić i przystąpić do rysowania.
Zatrzymajmy się jeszcze na kroku poprzednim. Współrzędna
w układzie kamery jest głębokością punktu i jest potrzebna do
rozstrzygania widoczności w algorytmach linii i powierzchni zasłoniętej.
Z dwóch punktów, których obrazem w rzucie jest ten sam punkt, i które
znajdują się przed obserwatorem, widoczny jest punkt o mniejszej
głębokości. Dokonując rzutowania będziemy chcieli otrzymać informację
o głębokości, przy czym ze względów oszczędnościowych (aby dostać
tę informację w jednej operacji mnożenia macierzy
i
) chcemy, aby to była współrzędna jednorodna, taka że
głębokość (lub informacja jej równoważna) jest ilorazem tej
współrzędnej i współrzędnej wagowej.
Dokonując rzutowania równoległego możemy użyć macierzy jednostkowej;
wtedy otrzymamy wynik i obliczymy współrzędne obrazu punktu
na rzutni
,
i głębokość
.
Zauważmy, że rozstrzyganie widoczności jest też możliwe jeśli
zamiast współrzędnej
w układzie kamery znamy dla
każdego punktu odpowiadającą mu liczbę
(dla dowolnej
stałej
oraz
). Dzięki temu podczas rzutowania perspektywicznego
możemy wektor współrzędnych jednorodnych danego punktu w układzie kamery pomnożyć
przez macierz
![]() |
Macierz ta jest nieosobliwa, a iloczynem jej i wektora
jest wektor
. Możemy dalej obliczyć
współrzędne obrazu punktu na rzutni
,
i głębokość
. Jeśli
, to z dwóch punktów,
które mają ten sam obraz w rzucie, bliższy obserwatora jest punkt,
któremu odpowiada mniejsza liczba
.
Określając rzutowanie w programach korzystajacych z różnych pakietów
oprogramowania, należy podać zakres głębokości, tj. granice
przedziału , do którego należą
współrzędne punktów rzutowanej sceny. Jest to potrzebne dlatego, że
informacja o głębokości jest (po przeskalowaniu) zaokrąglana do liczby
całkowitej (np.
- lub
-bitowej) i w testach widoczności dane są
przetwarzane w tej postaci. Przypuśćmy, że punktom o głębokościach
z przedziału
mają odpowiadać
liczby
z przedziału
. Mamy stąd, dla rzutu perspektywicznego,
układ dwóch równań liniowych
![]() |
na podstawie którego możemy obliczyć i
(oczywiście, musi
być spełniony warunek
).
Możemy wprowadzić
analogiczne współczynniki do macierzy rzutowania równoległego
i okeślić je w podobny sposób.
Wiemy już dostatecznie dużo, aby rozszyfrować sposób tworzenia
macierzy rzutowania wykorzystywany przez standard OpenGL.
W standardzie tym bryła widzenia jest poddawana takiemu przekształceniu,
aby jej obraz był kostką . Ma to na celu
umożliwienie wygodnego obcinania rysowanych obiektów (odcinków i wielokątów)
do takiej kostki, a następnie zastosowania algorytmu z buforem głębokości do
rozstrzygania widoczności (współrzędne
punktów w bryle widzenia, należące do przedziału
, sa dalej mnożone przez liczbę
zależną od implementacji
OpenGL'a, może być np.
lub
, i zaokrąglane do liczby całkowitej — to jest już ukryte przed autorem programu korzystającego
z biblioteki OpenGL). Dlatego macierz rzutowania perspektywicznego, tworzona
przez procedurę
glFrustum
, ma postać
![]() |
Symbole ,
,
,
,
i
są współrzędnymi punktów określających
bryłę widzenia: liczby dodatnie
i
(ang. near i far) określają
przednią i tylną płaszczyznę obcinania; współrzędne
(w układzie kamery)
punktów bryły widzenia leżą w przedziale między nimi. Ściana bryły widzenia
równoległa do rzutni położona bliżej środka rzutowania (w płaszczyźnie
)
jest prostokątem, którego wierzchołkami są punkty
,
,
i
. Wyświetlane punkty, po przejściu przez test
widoczności i obliczeniu koloru, są następnie poddawane przekształceniu,
które kwadrat
odwzorowuje na odpowiedni prostokąt
(np. okno) na ekranie. Szczegóły są opisane w dodatku B.
Macierz tworzona przez procedurę glOrtho
realizuje rzutowanie równoległe;
bryła widzenia w układzie kamery jest prostopadłościanem, który zostaje
odwzorowany na kostkę . Macierz ta ma postać
![]() |
Obcinanie, rozstrzyganie widoczności i dalsze etapy rysowania przebiegają tak samo jak w przypadku rzutowania perspektywicznego.
Wrażenie widzenia przestrzennego, czyli postrzeganie głębi obrazu, powstaje w mózgu obserwatora na podstawie dwóch obrazów na siatkówkach dwojga oczu. W świecie zwierząt jest to dość rzadkie zjawisko; zwróćmy uwagę na własności ludzkiego narządu wzroku, które to umożliwiają:
Pola widzenia obojga oczu prawie w całości pokrywają się.
Rozstaw oczu jest ustalony, sporo większy od ich wielkości i porównywalny z wielkością oglądanych obiektów (jeśli oglądamy duże obiekty, np. budynki, to wrażenie trójwymiarowości powstaje na podstawie poprzednich doświadczeń i oglądania obiektu z różnych stron; odległości położeń obserwatora są wtedy porównywalne z wielkością budynku).
Ludzkie oko ma bardzo dużą głębię ostrości (tj. szeroki zakres odległości, w których jednocześnie jest w stanie ,, widzieć ostro”).
Dzięki powyższemu zbiegowi okoliczności wystarczy zapewnić, aby każde oko widziało odpowiedni obraz, którego odległość od oka jest raczej nieistotna. Techniki oglądania ,,obrazów przestrzennych” są następujące:
Użycie kasku z wbudowanymi miniaturowymi monitorami,
Zastosowanie okularów z ciekłymi kryształami; prawa i lewa szyba stają się na przemian nieprzezroczyste, a na ekranie są wtedy wyświetlane obrazy lewy i prawy.
Ta technika umożliwia oglądanie obrazów ,,trójwymiarowych” nie tylko na ekranie monitora lub telewizora, ale także na dużych ekranach, które są ścianami pomieszczenia. W takim pomieszczeniu może przebywać nawet duża grupa osób (z których każda ma swoje okulary), które odbierają poprawnie wrażenia widzenia przestrzennego. Potwierdza to fakt, że stosunkowo łatwo jest wywołać takie wrażenia u ludzi, którzy dobrze tolerują zniekształcenia wywołane wyświetlaniem obrazów otrzymanych z innego niż rzeczywiste położenia obserwatora.
Można użyć kolorowych okularów, np. z czerwoną i zieloną szybą i wyświetlać każdy obraz w innym kolorze (takie rysunki są znane od dawna pod nazwą anaglify).
Istnieją też obrazy ,,magiczne oko”, złożone z pozornie chaotycznych plam, wśród których można dostrzec obiekty trójwymiarowe.
Aby otrzymać odpowiednie dwa obrazy należy określić dwa rzuty
perspektywiczne (po jednym dla każdego oka). Aby to zrobić poprawnie,
trzeba ustalić
odpowiedni układ współrzędnych — prostokątny, o wersorach osi
o identycznej długości, która jest jednostką odległości potrzebną
dalej. Przypuśćmy, że jednostką tą jest cal (
).
Przy użyciu wybranej jednostki należy zmierzyć wymiary ekranu (np. od
do
), a także
odległość widza od płaszczyzny ekranu (np. od
do
,
siedzenie bliżej monitora jest niezdrowe)
i odległość źrenic jego oczu (zwykle
). Na podstawie tych
wymiarów wybieramy środki rzutowania i klatkę (rys. 5.7).
Dla uzyskania dobrego efektu rysowane obiekty powinny mieć wymiary rzędu
wielkości obrazu i znajdować się w odległości od obserwatora mniej
więcej takiej, jak ekran (np. od połowy do dwóch odległości ekranu od
obserwatora). Z moich doświadczeń wynika, że wspomniane wymiary można
mierzyć niezbyt dokładnie, np. obrazy anaglifowe utworzone w celu
wyświetlenia na monitorze czternastocalowym dają się bez problemu
oglądać na monitorze siedemnastocalowym.
Istnieje wiele różnych stosowanych w praktyce odwzorowań przestrzeni w płaszczyznę; mogą one być określone przy użyciu rzutowania na powierzchnie krzywoliniowe, które następnie są przekształcane w płaszczyznę. Warto zauważyć, że obrazem odcinka w takim rzucie może być łuk krzywej, co stanowi utrudnienie podczas wykonywania obrazów.
Teoretycznie najprostsze jest przekształcenie w płaszczyznę powierzchni rozwijalnych, ale rzeczywiście łatwe do zrealizowania jest rozwinięcie tylko powierzchni walcowej. Możemy przyjąć jako rzutnię powierzchnię boczną walca (lub jej fragment), wybrać środek rzutowania w dowolnym punkcie jego osi, a następnie odwzorować rzutnię w płaszczyznę. Takie odwzorowanie nazywa się panoramą i bywa najczęściej stosowane w rysunkach architektonicznych i w wizualizacji danych. Rzadziej są stosowane rzuty na powierzchnie nierozwijalne, np. olorama, czyli rzut na sferę. Odwzorowanie obrazu na sferze (lub innej powierzchni nierozwijalnej) w płaszczyznę wprowadza dodatkowe zniekształcenia, które utrudniają jego oglądanie.
Treść automatycznie generowana z plików źródłowych LaTeXa za pomocą oprogramowania wykorzystującego LaTeXML.
strona główna | webmaster | o portalu | pomoc
© Wydział Matematyki, Informatyki i
Mechaniki UW, 2009-2010. Niniejsze materiały są udostępnione bezpłatnie na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 3.0 Polska.
Projekt współfinansowany przez Unię Europejską w ramach
Europejskiego Funduszu Społecznego.
Projekt współfinansowany przez Ministerstwo Nauki i Szkolnictwa Wyższego i przez Uniwersytet Warszawski.