Perspektywa - podstawy świata 3D
Jeżeli chcesz wyświetlać na płaskim ekranie trójwymiarowy świat, musisz dowiedzieć się jak wykonać jego rzut perspektywiczny. Masz do wyboru dwie możliwości: pierwsza to próba wyprowadzenia razem ze mną wzorów na perspektywę, druga - przepisanie ich i zapamiętanie. Jeżeli lubisz matematykę (i znasz twierdzenie Talesa :-) to polecam pierwsze rozwiązanie.
Musimy ustalić jak definiujemy układ współrzędnych.

Jak widzisz na rysunku - oś X biegnie od lewej do prawej, oś Y od dołu do góry, natomiast oś Z leci wgłąb ekranu. Musisz przyzwyczaić się do takiego układu - bo będę go używał cały czas :-)
Spójrz teraz na ekran. Wyobraź sobie, że gdzieś tam - w głębi za szklaną szybką - znajduje się jakiś obiekt. Musimy go zrzutować na ekran. Ty znajdujesz się kilkadziesiąt centymetrów przed ekranem. Obiekt znajduje się za nim. Jak obliczyć gdzie go narysować?

Ten rysunek przedstawia całą sytuację jakby "z góry". Obiekt znajduje się w punkcie a. Obserwator w punkcie o. Ekran jest narysowany poziomo. Ten zielony odcinek to odległość pomiędzy obserwatorem a ekranem. Musimy znaleźć miejsce w którym ekran przecina linia prosta pomiędzy obserwatorem a obiektem. Jest to punkt a'. Ponieważ patrzymy na wszystko z góry - szukamy jego współrzędnej X. (jeżeli nie rozumiesz dlaczego, stań NAD monitorem - widzisz wtedy, gdzie jest prawo a gdzie lewo, ale nie widzisz gdzie jest dół a gdzie góra :-) Pamiętaj tez o tym, że współrzędna Z biegnie wgłąb ekranu.
Z twierdzenia Talesa mamy:
czyli:
Ponieważ punkt b' znajduje się w środku ekranu - ma on współrzędna X równą 0. Długość odcinka a'b' jest więc równa poszukiwanej współrzędnej X punktu a'! Długość ab to po prostu współrzędna X punktu a - czyli obiektu. Długości b'o i bo to odpowiednio: odległość obserwatora od ekranu, oraz różnica współrzędnych Z obiektu i obserwatora.
Nasz wzór możemy więc zapisać trochę czytelniej:
gdzie:
xe - współrzędna pozioma na płaskim ekranie
x - współrzędna X obiektu
z - współrzędna Z obiektu
d - odległość obserwatora od ekranu
Jeżeli zamiast z góry popatrzymy na cały obrazek z boku - będziemy mogli w podobny sposób wyliczyć współrzędną pionową. Gotowy wzór wygląda tak:
Jak widzisz w wyliczaniu współrzędnych ekranowych korzystamy z dzielenia. Jest to najwolniejsze z czterech podstawowych działań. Ponieważ dzielimy przez tą samą liczbę - dobrze będzie podzielić tylko RAZ a potem pomnożyć przez odwrotność. Wyliczamy najpierw:
A potem:
Czyli zamiast dwóch mnożen, dwóch dzieleń i dwóch dodawań - mamy dwa mnożenia, ale tylko jedno dzielenie i jedno dodawanie! Zawsze gdy jakiś wzór będzie często używany (ten będzie praktycznie cały czas), to staraj się obniżyć ilość dzieleń. Dobrze też uprościć pozostałe działania.
Masz już gotowe wzory. Spróbuj teraz narysować na ekranie kilka punktów w przestrzeni. Spróbuj nimi poruszać... uważaj, żeby ci nie wychodziły poza ekran :-) Powodzenia....
Postaraj się dobrze zrozumieć powyższy materiał - bez tego może być trudniej w dalszych lekcjach.
Musimy ustalić jak definiujemy układ współrzędnych.

Jak widzisz na rysunku - oś X biegnie od lewej do prawej, oś Y od dołu do góry, natomiast oś Z leci wgłąb ekranu. Musisz przyzwyczaić się do takiego układu - bo będę go używał cały czas :-)
Spójrz teraz na ekran. Wyobraź sobie, że gdzieś tam - w głębi za szklaną szybką - znajduje się jakiś obiekt. Musimy go zrzutować na ekran. Ty znajdujesz się kilkadziesiąt centymetrów przed ekranem. Obiekt znajduje się za nim. Jak obliczyć gdzie go narysować?

Ten rysunek przedstawia całą sytuację jakby "z góry". Obiekt znajduje się w punkcie a. Obserwator w punkcie o. Ekran jest narysowany poziomo. Ten zielony odcinek to odległość pomiędzy obserwatorem a ekranem. Musimy znaleźć miejsce w którym ekran przecina linia prosta pomiędzy obserwatorem a obiektem. Jest to punkt a'. Ponieważ patrzymy na wszystko z góry - szukamy jego współrzędnej X. (jeżeli nie rozumiesz dlaczego, stań NAD monitorem - widzisz wtedy, gdzie jest prawo a gdzie lewo, ale nie widzisz gdzie jest dół a gdzie góra :-) Pamiętaj tez o tym, że współrzędna Z biegnie wgłąb ekranu.
Z twierdzenia Talesa mamy:
ab / bo = a'b' / b'o
czyli:
a'b' = ab * b'o / bo
Ponieważ punkt b' znajduje się w środku ekranu - ma on współrzędna X równą 0. Długość odcinka a'b' jest więc równa poszukiwanej współrzędnej X punktu a'! Długość ab to po prostu współrzędna X punktu a - czyli obiektu. Długości b'o i bo to odpowiednio: odległość obserwatora od ekranu, oraz różnica współrzędnych Z obiektu i obserwatora.
Nasz wzór możemy więc zapisać trochę czytelniej:
xe = x * z / ( z + d )
gdzie:
xe - współrzędna pozioma na płaskim ekranie
x - współrzędna X obiektu
z - współrzędna Z obiektu
d - odległość obserwatora od ekranu
Jeżeli zamiast z góry popatrzymy na cały obrazek z boku - będziemy mogli w podobny sposób wyliczyć współrzędną pionową. Gotowy wzór wygląda tak:
ye = y * z / ( z + d )
Jak widzisz w wyliczaniu współrzędnych ekranowych korzystamy z dzielenia. Jest to najwolniejsze z czterech podstawowych działań. Ponieważ dzielimy przez tą samą liczbę - dobrze będzie podzielić tylko RAZ a potem pomnożyć przez odwrotność. Wyliczamy najpierw:
pomoc = z / ( z + d )
A potem:
xe = x * pomoc
ye = y * pomoc
ye = y * pomoc
Czyli zamiast dwóch mnożen, dwóch dzieleń i dwóch dodawań - mamy dwa mnożenia, ale tylko jedno dzielenie i jedno dodawanie! Zawsze gdy jakiś wzór będzie często używany (ten będzie praktycznie cały czas), to staraj się obniżyć ilość dzieleń. Dobrze też uprościć pozostałe działania.
Masz już gotowe wzory. Spróbuj teraz narysować na ekranie kilka punktów w przestrzeni. Spróbuj nimi poruszać... uważaj, żeby ci nie wychodziły poza ekran :-) Powodzenia....
Postaraj się dobrze zrozumieć powyższy materiał - bez tego może być trudniej w dalszych lekcjach.
Autorem tekstu jest:
Jacek Popławski
Materiał dodany przez użytkownika: alphan
