Rzutowanie obiektów 3D na płaszczyznę 2D

Flash Player 10 i nowsze wersje, Adobe AIR 1.5 i nowsze wersje

Klasa PerspectiveProjection w pakiecie flash.geom umożliwia łatwe zastosowanie prostego rzutu perspektywicznego podczas przemieszczania obiektów wyświetlanych w przestrzeni trójwymiarowej.

Jeśli w sposób jawny nie utworzymy rzutu perspektywicznego dla przestrzeni 3D, mechanizm obsługi geometrii 3D użyje domyślnego obiektu PerspectiveProjection, który istnieje w obiekcie nadrzędnym i jest propagowany do wszystkich jego obiektów podrzędnych.

Oto trzy właściwości obiektu PerspectiveProjection definiujące sposób wyświetlania obiektów w przestrzeni 3D:

  • fieldOfView

  • projectionCenter

  • focalLength

Zmodyfikowanie wartości właściwości fieldOfView automatycznie powoduje zmodyfikowanie właściwości focalLength i na odwrót, ponieważ te właściwości są wzajemnie zależne.

Do obliczania wartości focalLength na podstawie danej wartości fieldOfView służy wzór:

focalLength = stageWidth/2 * (cos(fieldOfView/2) / sin(fieldOfView/2)

Zazwyczaj to właśnie właściwość fieldOfView jest modyfikowana w sposób jawny.

Pole widzenia

Manipulując właściwością fieldOfView klasy PerspectiveProjection, można spowodować, że obiekt wyświetlany 3D zbliżający się do obserwatora będzie widoczny jako coraz większy, a obiekt oddalający się od obserwatora będzie widoczny jako coraz mniejszy.

Właściwość fieldOfView określą kąt z przedziału od 0 do 180, który wyznacza poziom zniekształcenia wprowadzanego przez rzut perspektywiczny. Im większa wartość, tym silniej będzie zniekształcony obiekt poruszający się wzdłuż osi z. Niska wartość fieldOfView powoduje, że skalowanie jest minimalne, a obiekt pozornie tylko nieznacznie oddala się od obserwatora. Wysoka wartość fieldOfView powoduje większe zniekształcenie i pozornie większe oddalenie obiektu. Wartość maksymalna 179,9999... skutkuje skrajnie silnym efektem „rybiego oka”. Maksymalna wartość właściwości fieldOfView wynosi 179,9999..., a wartość minimalna to 0,00001... Wartości wynoszące dokładnie 0 i 180 nie są dozwolone.

Środek rzutowania

Właściwość projectionCenter reprezentuje znikający punkt w rzucie perspektywicznym. Jest stosowana jako przesunięcie względem domyślnego punktu rejestracji (0,0) znajdującego się w lewym górnym rogu stołu montażowego.

W miarę jako obiekt pozornie oddala się od obserwatora, pochyla się w kierunku znikającego punktu, a na koniec znika. Wyobraźmy sobie nieskończenie długi korytarz. Gdy spoglądamy w ten korytarz, krawędzie jego ścian zbiegają się w odległym znikającym punkcie.

Jeśli znikający punkt znajduje się pośrodku stołu montażowego, korytarz zbiega się do środka stołu. Wartość domyślna właściwości projectionCenter odpowiada właśnie środkowi stołu montażowego. Jeśli na przykład chcemy, aby elementy pojawiały się po lewej stronie stołu montażowego, a pozorna głębia trójwymiarowa zajmowała prawą stronę stołu, należy ustawić właściwość projectionCenter na punkt po prawej stronie stołu montażowego, aby tam właśnie znajdował się znikający punkt rzutu 3D.

Ogniskowa

Właściwość focalLength reprezentuje odległość między punktem obserwacji (0,0,0) a położeniem obiektu wyświetlanego na osi z.

Długa ogniskowa daje efekt podobny do fotografowania przez teleobiektyw, tj. wąskie pole widzenia i skrócenie odległości między obiektami. Krótka ogniskowa daje efekt podobny do fotografowania przez obiektyw szerokokątny, który zapewnia szerokie pole widzenia kosztem dużych zniekształceń. Średnia ogniskowa odpowiada w przybliżeniu charakterystyce ludzkiego oka.

Zwykle właściwość focalLength jest dynamicznie przeliczana w trakcie transformacji perspektywicznej, w miarę jak obiekt przemieszcza się. Można jednak jawnie przypisać wartość tej właściwości.

Domyślne wartości rzutu perspektywicznego

Domyślnie utworzony obiekt PerspectiveProjection w obiekcie nadrzędnym ma następujące wartości właściwości:

  • fieldOfView: 55

  • perspectiveCenter: stagewidth/2, stageHeight/2

  • focalLength: stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )

Te wartości obowiązują, jeśli nie utworzymy własnego obiektu PerspectiveProjection.

Możliwe jest utworzenie instancji obiektu PerspectiveProjection w celu modyfikowania właściwości projectionCenter i fieldOfView . W takim przypadku domyślne wartości właściwości nowo utworzonego obiektu są następujące (dla domyślnego rozmiaru stołu montażowego 500 na 500):

  • fieldOfView: 55

  • perspectiveCenter: 250,250

  • focalLength: 480.24554443359375