tunnel





Tunel - tablice offsetów
1999 (c) Jacek Popławski


 
Tunel na offsetach jest bardzo prostym efektem, ale przynajmniej dla
mnie na początku - bardzo efektownym. Aby go skodować musisz umieć
wczytać lub wygenerować teksturkę 256x256, umieć wyświetlać dane na
ekranie, oraz umieć stworzyć dwie duże tablice (320x200 bajtów).

 
Wyobraź sobie, że masz kwadratową kartkę papieru, którą za chwilę
zwiniesz w rulonik. Może ona wyglądać np. tak:





 
Gdybyśmy ją zwinęli, spojrzeli z przodu (jak w lunetę) i to co widzimy
narysowali na ekranie - to moglibyśmy zauważyć
dwie rzeczy. Po pierwsze - im bliżej środka ekranu, tym głębszą część
kartki widać:




 
Punkt A znajduje się bliżej nas niż punkt B, widać, że jego odległość od środka
(punktu O) jest większa od odległości OB. Gdyby jakiś punkt znajdował się
na zielonym polu - byłby on jeszcze bliżej środka - czyli jeszcze głębiej.
Oznacza to, że im bliżej środka znajduje się dany pixel - tym większa
jest współrzędna Y punktu, który bierzemy z naszej texturki.

 
Potraktujmy teraz ekran jak układ współrzędnych. Druga rzecz dotyczy kąta
jaki tworzy dany punkt z osią OY układu współrzędnych:




 
Widać, że punkt A tworzy kąt mniejszy niż punkt B, a punkt B mniejszy
niż punkt C. Oznacza to, że dla pixela narysowanego w punkcie A będziemy
brali punkt o mniejszej współrzędnej X z teksturki niż dla pixela z punktu
B i C. Po prostu po zwinięciu kartki jej lewa połowa jest blisko osi
OY na ekranie, a im dalej w prawo - tym bardziej się zwija naokoło środka
ekranu.

 
Nasza kartka - teksturka - jest tablicą o rozmiarach 256x256. Musimy
odpowiednio rozmieścić ją za szklaną szybką przed nami... jak?

 
Musimy więc dla każdego pixela na ekranie wyliczyć dwie wartości:
jego odległość od środka ekranu, oraz kąt, jaki tworzy z osią OY. Tak
naprawdę będzie nam potrzebne:
- promień tunela podzielony przez odległość pixela od środka ekranu

- arctangens (odwrotność tangensa) kąta (OY,OA) (dla punktu A)

 
Algorytm rysowania tunelu wygląda tak:


dla każdego pixela na ekranie

  niech tx będzie równe elementowi z pierwszej tablicy dla tego piksela

  niech ty będzie równe elementowi z drugiej tablicy dla tego piksela

  niech color będzie kolorem piksela z texturki z miejsca [tx,ty]

  pokoloruj piksel kolorem color


 
Tablice liczymy według takich wzorów:


t1[x,y] = promień / sqrt(x*x+y*y)
t2[x,y] = 256*arctan(x/y) / (2*pi)

gdzie:

promień - np. równy 1000, od niego zależy czy tunel jest gruby czy cienki

sqrt - oznacza pierwiastek kwadratowy
pi - 3.14... :-)

 
Po obliczeniu tych dwóch tablic, zainicjowaniu trybu graficznego oraz
wykonaniu podanego algorytmu - powinieneś otrzymać na ekranie coś
w rodzaju tunnelu wylepionego twoją teksturką. Jeżeli tak się nie stało,
spróbuj pomyśleć co może być źle (często ludziom nie wychodzi z tablicami,
sprawdź, czy dobrze je liczysz). Jeżeli zupełnie nie masz pojęcia co
popsułeś - napisz do mnie.

 
OK. Tunel już jest... ale jakiś nieruchomy... a tak fajnie byłoby w nim
polecieć w dal.... Jest to (oczywiście) bardzo proste. Jeżeli dla każdego
pixela do wartości tx wziętej z tablicy dodamy pewną stałą wartość - tunel
będzie wyglądał jakby obrócony w prawo (jak mocno? zależy od tej wartości).
Jeżeli dodamy coś do ty - tunel będzie przybliżony. Wystarczy więc zadeklarować
dwie zmienne, które będziemy modyfikować raz na klatkę, aby tunel obracał
się i przybliżał. Można nim kołysać.. przyśpieszać... spowalniać... naprawdę
jest z czym eksperymentować...

 
Prawdziwa zabawa jednak zaczyna się dopiero, gdy zauważymy, ze podane
wzory na tablice nie są jedynymi, jakich możemy użyć... jeżeli zamiast
dzielić promień przez pierwiastek - pomnożymy (oczywiście jednocześnie
mnożąc przez pewną skalę, aby nie wartość nie była zbyt duża) - to otrzymamy
coś w rodzaju odwrotności tunela. To trzeba zobaczyć. :)
W ogóle można próbować poskładać różne funkcje i zobaczyć, co z tego
wyjdzie.

 
Miłej zabawy! :-)


powrót do
Świątyni Assemblera
powrót do Dark Elf Blacky Homepage


strona powstała przy użyciu edytora vi








Wyszukiwarka

Podobne podstrony:
Duffaut Ideas on tunnel stability
Tunnel Rats [2008]
Tunnels & Trolls Goblin Lake
Design of NATM tunnels
Tunnels & Trolls Abyss
Budowa Gotthard Base Tunnel (2)
TUNNEL MIB
Błąd Teredo Tunneling Pseudo Interface w Menedżerze urządzeń
Budowa Gotthard Base Tunnel
Tunnel Rats (2008)
2005 11?ta Tunnel Workshop A Quick and Simple Private Tunnel with Openvpn
An insight into the New Austrian Tunnelling Method (NATM)
Tunnel Forced Air Coolers for Fresh Fruits & Vegetables
Tunnel Rats 2008 DVDRip XviD 5MeOAMTsl
tunnel

więcej podobnych podstron