programowanie asembler algorytmy

grafika trójwymiarowa

Podstawy grafiki trójwymiarowej.

Podstawą tworzenia obiektów trójwymiarowych jest znajomość rzutu perspektywicznego. Jest to zamiana współrzędnych przestrzennych (trójwymiarowych) na współrzędne ekranowe. Oczywiście należy założyć jak będzie wyglądał nasz układ. U mnie wygląda to tak: oś OX zwrócona jest w prawo (tzn. wartości rosną od lewej do prawej, czyli normalnie), oś OY zwrócona jest na dół (czyli odwrotnie niż uczycie się na matematyce - spowodowane to jest tym, że współrzędne ekranowe rosną w miarę przesuwania się w dół), oś OZ skierowana jest wgłąb (czyli wartości rosną w miarę oddalania się do obserwatora). Projekcja (rzut perspektywiczny) odbywa się podobnie jak to się dzieje na matematyce - z pewnością nieraz rysowałeś bryły przestrzenne (chociażby napisy w zeszycie). Wzory na rzut perspektywiczny wyglądają tak:

xe = x * z / (z + d)
ye = y * z / (z + d)

gdzie:

x - współrzędna x punktu
y - współrzędna y punktu
z - współrzędna z punktu
d - odległość ekranu od obserwatora
xe - współrzędna x punktu na ekranie
ye - współrzędna y punktu na ekranie

Jak widać wzory są podobne. Możemy zmniejszyć ilość działań poprzez wprowadzenie dodatkowej zmiennej:

pomoc = z * (z + d)
xe = x * pomoc
ye = y * pomoc

Mamy teraz tylko jedno dzielenie (najwolniejsze z czterech podstawowych działań) i algorytm jest o wiele szybszy (prawie 2x).

I jescze jedno. Dobrze byłoby wypośrodkować nasze punkty tzn. aby punkt o współrzędnych ekranowych (0,0) był na środku ekranu. Robi się to dodając odpowiednio połowę wysokości ekranu do ye i połowę szerokości ekranu do ye.

Spróbuj teraz narysować kilka punktów na ekranie, poruszać nimi. Uważaj, aby nie wychodziły poza ekran.