wtorek, 7 września 2010

[WPF 3D] Rodzaje kamer 3D [PL]

Tytuł mógłby wskazywać, że omówię technologię lub produkty pozwalające nakręcić video w 3D, jednak niezupełnie o to mi chodzi. W tym wpisie chciałbym się skupić raczej nad rodzajami kamer wykorzystywany w scenach 3D tworzonych w oparciu o WPF 3D.
Niniejszy wpis poza prezentacją różnych i niezależnych od konkretnego wykorzystania treści stanowi również opis pewnych zagadnień związanych z projektem Mesh Diagram 3D.Informacje dotyczące projektu oznaczone są etykietą MeshDiagram3D.
Otóż wybierając i konfigurując kamerę dla naszej sceny 3D, wybieramy tak naprawdę nasz punkt obserwacji sceny. W WPF3D możemy wybrać spośród dwóch dostępnych klas, pełniących funkcję kamery w scenie: PerspectiveCamera i OrthographicCamera. Dla każdej z kamer wskazujemy pozycja naszej kamery w przestrzeni (Position) oraz kierunek, w jakim skierowana kamera (LookDirection – kierunek „patrzenia”). Dodatkowo do dyspozycji mamy też parametry określające zakres widzenia naszej kamery: jak blisko (NearPlaneDistance) i jak daleko (FarPlaneDistance) może znajdować się obiekt w scenie, by był widzialny. Istotny jest również parametr wskazujący wektor "ku górze" kamery (UpDirection), który ustawiamy ta by scena nie była "do góry nogami" ;).
Dlaczego jednak są dwie kamery? Otóż typ kamery determinuje coś jeszcze – typ wykorzystanej projekcji – jakiej poddawany jest trójwymiarowy obiekt, by znaleźć się na dwuwymiarowej płaszczyźnie ekranu.

PerspectiveCamera

Kamera PerspectiveCamera dostarcza nam widoku typu perspektywa. W takim widoku obraz ulega pewnej deformacji. Widać charakterystyczne "zmniejszanie się" przedstawianych na obrazie obiektów wraz z ich oddalaniem się od kamery (punktu obserwacji). Linie równoległe do siebie w rzeczywistości, w perspektywie stają się zbieżne i spotykają się w pewnym oddalonym punkcie (często niebędącym elementem sceny). Wydaje się, że spośród dwóch dostępnych kamer (sposobów obrazowania i projekcji) kamera PerspectiveCamera jest bardziej naturalna i wydaje się lepiej odwzorowywać przestrzeń na płaskiej powierzchni. Oprócz wspomnianych wcześniej parametrów, konieczne jest ustawienie parametru FieldOfView, którego wartością jest kąt patrzenia kamery wyrażony w stopniach.

OrthographicCamera

Kamera OrthographicCamera zapewnia widok ortogonalny, a więc taki, w którym linie równoległe w przestrzeni są też rysowane równolegle na ekranie (w obszarze kontrolki Viewport3D). Obraz tworzony przez tę kamerę wydaje się bardziej nienaturalny i w pewien sposób uproszczony, to uproszczenie może jednak być wykorzystane przy budowie lepszego i wygodniej obsługiwanego GUI dla użytkownika. Oprócz wspomnianych wcześniej parametrów, konieczne jest ustawienie parametru Width, który określa szerokość całego planu.
UWAGA: pominięcie dodatkowych parametrów dla każdej z kamer (FieldOfView i Width), może doprowadzić do sytuacji, w której obraz utworzony poprzez projekcję 3D->2D będzie pusty.

Porównanie kamer 3D

Poniższy rysunek został przygotowany, tak by zaprezentowana była ta sama scena przy pomocy dwóch różnych typów kamer.
Do wygenerowania sceny zostały wykorzystane opisane wcześniej ustawienia (patrz opis „Niech stanie się światłość!”), natomiast ustawienia kamer były następujące:

  • <PerspectiveCamera FarPlaneDistance="100" LookDirection="-10,-11,-12" UpDirection="0,1,0" NearPlaneDistance="1" Position="10,11,12" FieldOfView="70" />

  • <OrthographicCamera FarPlaneDistance="100" LookDirection="-10,-11,-12" UpDirection="0,1,0" NearPlaneDistance="1" Position="10,11,12" Width="30" />
Promuj

6 komentarzy:

Posty powiązane / Related posts