Wprowadzenie do 3D




Każdy od zapłodnienia (a nawet przed ;) ma do czynienia z trówjymiarem :)
Dotychczas rysowaliśmy np. sprite'y na płaszczyźnie o danych punktach dla płaszczyzny x i y.
Od szkoły podstawowej każdy słyszał zapewne o graniastosłupach. Własnie dzięki nim można dość dobrze zrozumieć oraz poznać ten nasz trówjwymar :)




Dobra przejdźmy do teorii:

Jak obliczyć współżędne na płaszczyznach (xp, yp, zp) dla puntku w przestrzeni?

Mamy dany punkt w przestrzeni [punkt(x,y,z)] punkt(30,40,50);
Weź kartkę (najlepiej w kratkę), długopis lub ołówek w rękę i narysuj graniastosłup prawidłowy o wymiarach a i b = 2cm, wysokość graniastosłupa = 2cm, i w ten sposób wyszedł nam sześcian :)
Teraz narysuj punkt tak jak to jest na rysunku:

Przeprowadź przez ten punkt 3 osie x,y,z

X
Y
Z

Teraz narysuj 3 płaszczyzny (kwadraty - osobno) o wymiarach a = 4 cm
Na każdym narysuj punkt mniej więcej w odległości 3 kratek od krawędzi lewej i górnej.

Teraz małe wyjasnienie dlaczego koło każdej nazwy płaszczyzny xp, yp oraz zp napisałem coś w naiwasie :)
Otóż jeżeli mamy punkty: x = 30, y = 40, z = 50 to:
Rysujemy kolejnie na płaszczyźnie xp odległość x oraz y, na płaszczyźnie yp odległość x,z, a na zp odległość z, y.
Ale dlaczego tak a nie inaczej mamy narysować punkt na danej płaszczyźnie??? - odpowiedź jest prosta --> bo tak ma być i już :P
Spójż na poniższy rysunek:


X
Y
Z
Rozumiesz? - jeżeli nie popatrz na:

i zamień x, y na nazwy wg koloru :)
z tego można wywnioskować następujące rzeczy:

Pozycja punktu w przestrzeni na płaszczyźnie xp to pozycja punktu (x,y)
Pozycja punktu w przestrzeni na płaszczyźnie yp to pozycja punktu (x,z)
Pozycja punktu w przestrzeni na płaszczyźnie zp to pozycja punktu (z,y)

Do czego wam to posłuży nie wiem :) nawet nie wiem po co ja wam to wyjaśniam :)))

Do przerysowania tego wszystiego na ekran posłuży nam procedurka, którą szukałem przez ponad 2 miesiące :) Ale i tak nie wiem czy dobre to będzie :)
Właśnie te przerysowanie było "chyba" waszym napoważniejszym problemem :)

Ta rysuje pozycję x dla punktu
function XS(x,z:integer):integer;
begin
if z+dist<>0 then
Xs:=round(X*dist/(Z+dist))+(screen.width div 2);
Xs := result;
end;



Ta rysuje pozycję y dla punktu
function YS(y,z:integer):integer;
begin
if z+dist<>0 then
Ys:=round(Y*dist/(Z+dist))+(screen.height div 2);
Ys := result;
end;


Małe objaśnienie
a) dist - nasz dystans
b) (screen.width div 2) i (screen.height div 2) wycentrowanie (tego co narysujemy), takie wycentrowanie :)

Kod przykładowej aplikacji (nie DelphiX) mozecie ściągnąć tutaj, pokazuje ona jak w prosty sposób można narysować bryłę w przestrzeni znając tylko punkty x,y,z ;]


====================
A teraz ZONK :) Wy nie musicie tego wiedzieć :) wystarczy, że będziecie mogli umieć wyobrazić sobie co wy tam rysujecie, poprzez określanie punktów w przestrzeni, a potem za pomocą jednej procki przerysujecie to na ekranik :)