|
Rzutowanie z 3d na płaszczyznę
27-01-2007
Wyróżniamy dwa rodzaje takich rzutów:
Rzut równoległy – stosowany np. w projektach, nie zachowuje perspektywy – obiekt po zrzutowaniu zajmuje taką samą powierzchnię niezależnie od odległości. W prostym przypadku mamy więc że x = x0 a y = y0. Jednak w rzucie równoległym możliwe jest także zdefiniowanie innego kąta patrzenia, zatem pełna zależność między obiektem a jego rzutem wygląda następująco:
x = x0 + Cx * z
y = y0 + Cy * z
gdzie:
Cx = ctg (alfa) * cos (beta)
Cy = ctg (alfa) * sin (beta)
gdzie alfa i beta są kątami jak na rysunku poniżej pokazującym odwzorowanie punktu P0 na punkt P znajdujący się na płaszczyźnie
Rzut perspektywiczny – jest używany w grach 3d i ogólnie wszędzie tam gdzie istotne jest oddanie perspektywy. Aby zrealizować taki rzut należy w pierwszej kolejności przyjąć kąt widzenia alfa – na jego podstawie obliczane jest położenie punktu E (punkt obserwatora):
E= ctg (alfa) * resx;
gdzie resx jest rozdzielczością poziomą ekranu.
Następnie można przejść do rzutowania punktów 3d na płaszczyznę widzenia ograniczonej rozdzielczością ekranu i będącą w odległości E przed obserwatorem. Na tą płaszczyznę rzutujemy jedynie obiekty o współrzędnych z dodatnich (nie interesują nas obiekty będące za nami). Współrzędne obiektu na płaszczyźnie obliczamy na podstawie twierdzenia Talesa:
x= x0 * E / (z0+E)
y= y0 * E / (z0+E)

|