Pakiet | flash.geom |
Klasa | public class Matrix3D |
Dziedziczenie | Matrix3D Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Pojedyncza macierz może łączyć wiele transformacji i stosować je jednocześnie do trójwymiarowego obiektu wyświetlanego. Na przykład macierz można zastosować do współrzędnych trójwymiarowych w celu wykonania obrotu, a następnie translacji.
Jawne ustawienie właściwości z
lub dowolnej z właściwości obrotu lub skalowania obiektu wyświetlanego powoduje automatyczne utworzenie odpowiedniego obiektu Matrix3D.
Dostęp do obiektu Matrix3D trójwymiarowego obiektu wyświetlanego można uzyskać za pomocą właściwości transform.matrix3d
. Dwuwymiarowe obiekty nie mają obiektów Matrix3D.
Właściwość z
obiektu dwuwymiarowego jest równa zero, a właściwość matrix 3D
ma wartość null
.
Uwaga: Jeśli ten sam obiekt Matrix3D jest przypisany do dwóch różnych obiektów wyświetlanych, zgłoszony zostanie błąd wykonania.
Klasa Matrix3D zawiera macierz kwadratową 4x4, tj. tabelę złożoną z czterech wierszy i kolumn obiektów Number zawierającą dane transformacji. Pierwsze trzy wiersze macierzy zawierają dane dla każdej trójwymiarowej osi (x, y, z). W ostatniej kolumnie zapisane są informacje o translacji. Dane o orientacji i skalowaniu są przechowywane w pierwszych trzech kolumnach. Współczynniki skalowania to liczby na przekątnej macierzy w pierwszych trzech kolumnach. Oto reprezentacja elementów obiektu Matrix3D:
Znajomość operacji na macierzach nie jest konieczna, aby korzystać z klasy Matrix3D. Klasa oferuje konkretne metody, które upraszczają zadania transformacji i rzutowania, takie jak appendTranslation()
, appendRotation()
lub interpolateTo()
. Aby uzyskać dostęp do podstawowych elementów macierzy, można korzystać z metod decompose()
i recompose()
lub właściwości rawData
.
Obiekty wyświetlane buforują właściwości obrotu osi, aby umożliwić odrębne obroty poszczególnych osi i zarządzać różnymi kombinacjami obrotów. Gdy metoda obiektu Matrix3D zostanie wywołana w celu dokonania transformacji obiektu wyświetlanego, pamięć podręczna obrotów obiektu zostaje unieważniona.
Powiązane elementy interfejsu API
flash.geom.Transform
flash.geom.PerspectiveProjection
flash.geom.Vector3D
flash.geom.Orientation3D
flash.geom.Utils3D
flash.geom.Matrix
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
determinant : Number [tylko do odczytu]
Wartość Number określająca, czy macierz jest odwracalna. | Matrix3D | ||
position : Vector3D
Obiekt Vector3D zawierający pozycję, tj. współrzędne trójwymiarowe (x,y,z) obiektu wyświetlanego w klatce referencyjnej transformacji. | Matrix3D | ||
rawData : Vector.<Number>
Wektor 16 liczb, z których każde 4 elementy stanowią kolumnę w macierzy 4x4. | Matrix3D |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
Tworzy obiekt Matrix3D. | Matrix3D | ||
Dołącza macierz, mnożąc inny obiekt Matrix3D przez bieżący obiekt Matrix3D. | Matrix3D | ||
Stosuje przyrostowy obrót do obiektu Matrix3D. | Matrix3D | ||
Stosuje do obiektu Matrix3D przyrostowe przeskalowanie wzdłuż osi x, y i z. | Matrix3D | ||
Stosuje do obiektu Matrix3D przyrostową translację, tj. zmianę położenia wzdłuż osi x, y i z. | Matrix3D | ||
Zwraca nowy obiekt Matrix3D będący dokładną kopią bieżącego obiektu Matrix3D. | Matrix3D | ||
Kopiuje obiekt Vector3D do określonej kolumny wywołującego obiektu Matrix3D. | Matrix3D | ||
Kopiuje określoną kolumnę wywołującego obiektu Matrix3D do obiektu Vector3D. | Matrix3D | ||
Kopiuje wszystkie dane macierzy ze źródłowego obiektu Matrix3D do wywołującego obiektu Matrix3D. | Matrix3D | ||
Kopiuje wszystkie dane wektora ze źródłowego obiektu wektora do wywołującego obiektu Matrix3D. | Matrix3D | ||
Kopiuje wszystkie dane macierzy z wywołującego obiektu Matrix3D do podanego wektora. | Matrix3D | ||
Kopiuje obiekt Vector3D do określonego wiersza wywołującego obiektu Matrix3D. | Matrix3D | ||
Kopiuje określony wiersz wywołującego obiektu Matrix3D do obiektu Vector3D. | Matrix3D | ||
Matrix3D | |||
Zwraca ustawienia translacji, obrotu i skali macierzy transformacji jako obiekt Vector złożony z trzech obiektów Vector3D. | Matrix3D | ||
Stosuje macierz transformacji, z wyjątkiem elementów translacji, w celu dokonania transformacji obiektu Vector 3D ze współrzędnych jednej przestrzeni na współrzędne innej przestrzeni. | Matrix3D | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Przekształca bieżącą macierz w macierz jednostkową. | Matrix3D | ||
[statyczny]
Interpoluje przekształcenie translacji, obrotu i skalowania jednej macierzy w kierunku tego przekształcenia macierzy docelowej. | Matrix3D | ||
Interpoluje tę macierz w kierunku przekształceń translacji, obrotu i skalowania macierzy docelowej. | Matrix3D | ||
Odwraca bieżącą macierz | Matrix3D | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Obraca obiekt wyświetlany w taki sposób, aby był zwrócony do określonej pozycji. | Matrix3D | ||
Dołącza macierz na początku transformacji, mnożąc bieżący obiekt Matrix3D przez inny obiekt Matrix3D. | Matrix3D | ||
Poprzedzająco stosuje przyrostowy obrót do obiektu Matrix3D. | Matrix3D | ||
Poprzedzająco stosuje do obiektu Matrix3D przyrostowe przeskalowanie wzdłuż osi x, y i z. | Matrix3D | ||
Poprzedzająco stosuje do obiektu Matrix3D przyrostową translację, tj. zmianę położenia wzdłuż osi x, y i z. | Matrix3D | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia wartości translacji, obrotu i skali w macierzy. | Matrix3D | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Stosuje macierz transformacji w celu dokonania transformacji obiektu Vector3D ze współrzędnych jednej przestrzeni na współrzędne innej przestrzeni. | Matrix3D | ||
Stosuje macierz transformacji w celu dokonania transformacji obiektu Vector zawierającego obiekty Number z jednej przestrzeni współrzędnych na inną. | Matrix3D | ||
Przekształca bieżący obiekt Matrix3D w macierz, w której wiersze są zamienione na kolumny, a kolumny na wiersze. | Matrix3D | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
determinant | właściwość |
determinant:Number
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Wartość Number określająca, czy macierz jest odwracalna.
Obiekt Matrix3D musi być odwracalny. W celu stwierdzenia, czy obiekt Matrix3D jest odwracalny, można użyć właściwości determinant
, czyli wyznacznika macierzy. Jeśli wyznacznik jest równy zero, macierz odwrócona nie istnieje. Na przykład jeśli cały wiersz lub cała kolumna macierzy zawiera zera lub jeśli dwa wiersze lub dwie kolumny są równe, wyznacznik będzie równy zero. Wyznacznik jest także używany do rozwiązywania szeregu równań.
Wyznacznik mają tylko macierze kwadratowe, takie jak klasa Matrix3D.
Implementacja
public function get determinant():Number
Powiązane elementy interfejsu API
position | właściwość |
position:Vector3D
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Obiekt Vector3D zawierający pozycję, tj. współrzędne trójwymiarowe (x,y,z) obiektu wyświetlanego w klatce referencyjnej transformacji. Właściwość position
zapewnia bezpośredni dostęp do wektora translacji macierzy obiektu wyświetlanego, bez konieczności dekompozycji i ponownej kompozycji macierzy.
Za pomocą właściwości position
można pobierać i ustawiać wartości elementów translacji w macierzy transformacji.
Implementacja
public function get position():Vector3D
public function set position(value:Vector3D):void
Powiązane elementy interfejsu API
rawData | właściwość |
rawData:Vector.<Number>
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Wektor 16 liczb, z których każde 4 elementy stanowią kolumnę w macierzy 4x4.
Jeśli właściwość rawData
jest macierzą nieodwracalną, generowany jest wyjątek. Obiekt Matrix3D musi być odwracalny. Jeśli potrzebna jest macierz nieodwracalna, należy utworzyć podklasę obiektu Matrix3D.
Implementacja
public function get rawData():Vector.<Number>
public function set rawData(value:Vector.<Number>):void
Powiązane elementy interfejsu API
Matrix3D | () | Konstruktor |
public function Matrix3D(v:Vector.<Number> = null)
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Tworzy obiekt Matrix3D. Obiekt Matrix3D można zainicjować za pomocą wektora zawierającego 16 liczb, gdzie każde cztery elementy definiują kolumnę. Po utworzeniu obiektu Matrix3D można uzyskiwać dostęp do elementów jego macierzy za pośrednictwem właściwości rawData
.
Jeśli nie jest zdefiniowany żaden parametr, konstruktor generuje obiekt Matrix3D będący macierzą jednostkową. W zapisie macierzowym wszystkie elementy macierzy jednostkowej na przekątnej głównej mają wartości jeden, a pozostałe elementy tej macierzy mają wartość zero. Właściwość rawData
macierzy jednostkowej jest równa: 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
. Wartość położenia lub translacji macierzy jednostkowej wynosi Vector3D(0,0,0)
, ustawienie obrotu to Vector3D(0,0,0)
, a wartość skali to Vector3D(1,1,1)
.
v:Vector.<Number> (default = null ) — Wektor 16 liczb, z których każde 4 elementy stanowią kolumnę w macierzy 4x4.
|
Powiązane elementy interfejsu API
append | () | metoda |
public function append(lhs:Matrix3D):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Dołącza macierz, mnożąc inny obiekt Matrix3D przez bieżący obiekt Matrix3D. Wynikiem jest kombinacja transformacji opisanych przez obie macierze. Jeden obiekt Matrix3D można mnożyć przez wiele macierzy. Wynikowy obiekt Matrix3D zawiera wynik wszystkich transformacji.
Mnożenie macierzy różni się od dodawania macierzy. Mnożenie macierzy nie jest przemienne. Innymi słowy, A razy B nie równa się B razy A. Metoda append()
wykonuje mnożenie od lewej strony, co oznacza że obiekt Matrix3D lhs
znajduje się po lewej stronie operatora mnożenia.
thisMatrix = lhs * thisMatrix;
Po pierwszym wywołaniu metody append()
wprowadza ona modyfikacje względem przestrzeni nadrzędnej. Kolejne wywołania operują na klatce referencyjnej dołączonego obiektu Matrix3D.
Metoda append()
zastępuje macierz bieżącą macierzą dołączoną. Aby dołączyć dwie macierze bez zmiany macierzy bieżącej, należy skopiować macierz bieżącą za pomocą metody clone()
, a następnie zastosować metodę append()
do kopii.
Parametry
lhs:Matrix3D — Macierz po lewej stronie jest mnożona przez bieżący obiekt Matrix3D.
|
Powiązane elementy interfejsu API
appendRotation | () | metoda |
public function appendRotation(degrees:Number, axis:Vector3D, pivotPoint:Vector3D = null):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Stosuje przyrostowy obrót do obiektu Matrix3D. Zastosowanie obiektu Matrix3D do obiektu wyświetlanego powoduje wykonanie obrotu po innych transformacjach opisanych przez obiekt Matrix3D.
Obrót obiektu wyświetlanego jest zdefiniowany przez oś, stopień przyrostowego obrotu wokół osi oraz opcjonalny punkt będący środkiem obrotu obiektu. Osią może być dowolny kierunek ogólny. Najbardziej popularne osie są następujące: X_AXIS
(Vector3D(1,0,0)
), Y_AXIS
(Vector3D(0,1,0)
) i Z_AXIS
(Vector3D(0,0,1)
). W terminologii lotniczej obrót wokół osi y jest nazywany odchyleniem. Obrót wokół osi x jest nazywany pochyleniem. Obrót wokół osi z jest nazywany przechyłem.
Kolejność przekształceń ma znaczenie. Obrót, po którym następuje translacja daje inny efekt niż translacja, po której następuje obrót.
Obrót nie jest bezwzględny. Następuje względem bieżącej pozycji i orientacji. Aby wprowadzić bezwzględną zmianę w macierzy transformacji, należy skorzystać z metody recompose()
. Metoda appendRotation()
różni się też pod względem działania od właściwości obrotu obiektu wyświetlanego, np. właściwości rotationX
. Właściwość obrotu jest zawsze uwzględniana przed translacjami, podczas gdy metoda appendRotation()
jest wykonywana względem aktualnego stanu macierzy. Aby uzyskać efekt podobny do uzyskiwanego za pomocą macierzy obrotu obiektu wokół osi, należy użyć metody prependRotation()
, która wykonuje obrót przed innymi transformacjami w macierzy.
Zastosowanie metody appendRotation()
do obiektu Matrix3D obiektu wyświetlanego powoduje unieważnienie wartości właściwości obrotu obiektu zapisanych w pamięci podręcznej.
Jednym ze sposobów obrócenia obiektu wyświetlanego wokół konkretnego punktu względem jego położenia jest translacja obiektu do określonego punktu, obrócenie obiektu za pomocą metody appendRotation()
i translacja obiektu z powrotem do pierwotnego położenia. W poniższym przykładzie trójwymiarowy obiekt wyświetlany myObject
obraca się w osi Y wokół współrzędnych (10,10,0).
myObject.z = 1; myObject.transform.matrix3D.appendTranslation(10,10,0); myObject.transform.matrix3D.appendRotation(1, Vector3D.Y_AXIS); myObject.transform.matrix3D.appendTranslation(-10,-10,0);
Parametry
degrees:Number — Stopień obrotu.
| |
axis:Vector3D — Oś lub kierunek obrotu. Najczęściej stosowane osie są następujące: X_AXIS (Vector3D(1,0,0) ), Y_AXIS (Vector3D(0,1,0) ) i Z_AXIS (Vector3D(0,0,1) ). Ten wektor powinien mieć długość równą jeden.
| |
pivotPoint:Vector3D (default = null ) — Punkt określający środek obrotu obiektu. Domyślnym środkiem obrotu obiektu jest jego punkt pasowania.
|
Powiązane elementy interfejsu API
appendScale | () | metoda |
public function appendScale(xScale:Number, yScale:Number, zScale:Number):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Stosuje do obiektu Matrix3D przyrostowe przeskalowanie wzdłuż osi x, y i z. Zastosowanie obiektu Matrix3D do obiektu wyświetlanego powoduje wykonanie skalowania po innych transformacjach opisanych przez obiekt Matrix3D. Domyślny współczynnik skali to (1.0, 1.0, 1.0).
Skala jest zdefiniowana jako zestaw trzech przyrostowych zmian wzdłuż trzech osi (x,y,z). Każdą oś można pomnożyć przez inną liczbę. Zastosowanie zmiany skali do obiektu wyświetlanego powoduje jego powiększenie lub zmniejszenie. Na przykład ustawienie wartości osi x, y i z na dwa powoduje dwukrotne powiększenie obiektu, natomiast ustawienie wartości osi na 0.5
powoduje zmniejszenie obiektu o połowę. Aby mieć pewność, że przeskalowanie będzie miało wpływ tylko na jedną oś, należy ustawić pozostałe parametry na jeden. Wartość jeden oznacza brak skalowania wzdłuż danej osi.
Metodę appendScale()
można stosować do zmiany rozmiaru oraz do realizacji zniekształceń, takich jak skrócenie lub wydłużenie obiektu wyświetlanego, a także do powiększania (zoom) i zmniejszania konkretnego obszaru. Transformacje skali są wykonywane automatycznie podczas obrotów i translacji obiektu wyświetlanego.
Kolejność transformacji jest istotna. Zmiana rozmiaru, po której następuje translacja daje inny efekt niż translacja, po której następuje zmiana rozmiaru.
Parametry
xScale:Number — Mnożnik skalowania obiektu wzdłuż osi x.
| |
yScale:Number — Mnożnik skalowania obiektu wzdłuż osi y.
| |
zScale:Number — Mnożnik skalowania obiektu wzdłuż osi z.
|
Powiązane elementy interfejsu API
appendTranslation | () | metoda |
public function appendTranslation(x:Number, y:Number, z:Number):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Stosuje do obiektu Matrix3D przyrostową translację, tj. zmianę położenia wzdłuż osi x, y i z. Zastosowanie obiektu Matrix3D do obiektu wyświetlanego powoduje wykonanie translacji po innych transformacjach opisanych przez obiekt Matrix3D.
Translacja jest zdefiniowana jako zestaw trzech przyrostowych zmian wzdłuż trzech osi (x,y,z). Zastosowanie transformacji do wyświetlanego obiektu powoduje przemieszczenie go z bieżącego położenia wzdłuż osi x, y i z o odległości określone przez parametry. Aby mieć pewność, że translacja będzie miała wpływ tylko na jedną współrzędną (oś), należy ustawić pozostałe parametry na zero. Parametr zerowy oznacza, że nie nastąpi zmiana położenia wzdłuż danej osi.
Translacje są względne. Nowe położenie jest ustalane względem bieżącego położenia i orientacji macierzy. Aby wprowadzić bezwzględną zmianę w macierzy przekształcenia, należy skorzystać z metody recompose()
. Znaczenie ma także kolejność transformacji. Translacja, po której następuje obrót, da inny efekt niż obrót, po którym następuje translacja.
Parametry
x:Number — Przyrostowa translacja wzdłuż osi x.
| |
y:Number — Przyrostowa translacja wzdłuż osi y.
| |
z:Number — Przyrostowa translacja wzdłuż osi z.
|
Powiązane elementy interfejsu API
clone | () | metoda |
copyColumnFrom | () | metoda |
public function copyColumnFrom(column:uint, vector3D:Vector3D):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Kopiuje obiekt Vector3D do określonej kolumny wywołującego obiektu Matrix3D.
Parametry
column:uint — Kolumna docelowa operacji kopiowania.
| |
vector3D:Vector3D — Obiekt Vector3D, z którego należy skopiować dane.
|
copyColumnTo | () | metoda |
public function copyColumnTo(column:uint, vector3D:Vector3D):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Kopiuje określoną kolumnę wywołującego obiektu Matrix3D do obiektu Vector3D.
Parametry
column:uint — Kolumna, z której należy skopiować dane.
| |
vector3D:Vector3D — Obiekt docelowy Vector3D operacji kopiowania.
|
copyFrom | () | metoda |
public function copyFrom(sourceMatrix3D:Matrix3D):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Kopiuje wszystkie dane macierzy ze źródłowego obiektu Matrix3D do wywołującego obiektu Matrix3D.
Parametry
sourceMatrix3D:Matrix3D — Obiekt Matrix3D, z którego należy skopiować dane.
|
copyRawDataFrom | () | metoda |
public function copyRawDataFrom(vector:Vector.<Number>, index:uint = 0, transpose:Boolean = false):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Kopiuje wszystkie dane wektora ze źródłowego obiektu wektora do wywołującego obiektu Matrix3D. Opcjonalny parametr index umożliwia wybranie dowolnej pozycji początkowej w wektorze.
Parametry
vector:Vector.<Number> — Obiekt wektora, z którego należy skopiować dane.
| |
index:uint (default = 0 )
| |
transpose:Boolean (default = false )
|
copyRawDataTo | () | metoda |
public function copyRawDataTo(vector:Vector.<Number>, index:uint = 0, transpose:Boolean = false):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Kopiuje wszystkie dane macierzy z wywołującego obiektu Matrix3D do podanego wektora. Opcjonalny parametr index umożliwia wybranie dowolnej docelowej pozycji początkowej w wektorze.
Parametry
vector:Vector.<Number> — Obiekt wektora, do którego należy skopiować dane.
| |
index:uint (default = 0 )
| |
transpose:Boolean (default = false )
|
copyRowFrom | () | metoda |
public function copyRowFrom(row:uint, vector3D:Vector3D):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Kopiuje obiekt Vector3D do określonego wiersza wywołującego obiektu Matrix3D.
Parametry
row:uint — Wiersz, do którego należy skopiować dane.
| |
vector3D:Vector3D — Obiekt Vector3D, z którego należy skopiować dane.
|
copyRowTo | () | metoda |
public function copyRowTo(row:uint, vector3D:Vector3D):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Kopiuje określony wiersz wywołującego obiektu Matrix3D do obiektu Vector3D.
Parametry
row:uint — Wiersz, z którego należy skopiować dane.
| |
vector3D:Vector3D — Obiekt Vector3D, do którego mają zostać skopiowane dane.
|
copyToMatrix3D | () | metoda |
decompose | () | metoda |
public function decompose(orientationStyle:String = "eulerAngles"):Vector.<Vector3D>
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Zwraca ustawienia translacji, obrotu i skali macierzy transformacji jako obiekt Vector złożony z trzech obiektów Vector3D. Pierwszy obiekt Vector3D zawiera elementy translacji. Drugi obiekt Vector3D zawiera elementy obrotu. Trzeci obiekt Vector3D zawiera elementy skali.
Niektóre metody klasy Matrix3D, takie jak interpolateTo()
, automatycznie dokonują dekompozycji i ponownej kompozycji macierzy w celu dokonania odpowiedniej transformacji.
Aby zmodyfikować transformację macierzy z uwzględnieniem bezwzględnej nadrzędnej klatki referencyjnej, należy pobrać ustawienia za pomocą metody decompose()
i wprowadzić odpowiednie zmiany. Zmodyfikowaną transformację można ustawić w obiekcie Matrix3D za pomocą metody recompose()
.
Parametr metody decompose()
określa styl orientacji, jaki ma być używany dla transformacji. Orientacja domyślna to eulerAngles
; w tym przypadku orientacja jest zdefiniowana za pomocą trzech odrębnych kątów obrotu dla poszczególnych osi. Obroty są wykonywane jeden po drugim i nie wpływają wzajemnie na swoje osie. Właściwości obrotu osi obiektu wyświetlanego powodują transformacją ze stylem orientacji eulerAngles. Pozostałe opcje stylu orientacji to axisAngle
oraz quaternion
. Orientacja według osi i kąta jest zdefiniowana przez kombinację osi i kąta. Oś, wokół której obracany jest obiekt, to wektor jednostkowy reprezentujący kierunek. Kąt określa wielkość obrotu wokół wektora. Kierunek decyduje także o tym, w którą stronę jest zwrócony obiekt wyświetlany, a kąt określa, która strona obiektu jest zwrócona do góry. Orientacja axisAngle jest używana w metodach appendRotation()
i prependRotation()
. W orientacji quaternion stosowane są liczby zespolone i czwarty element wektora. Orientację wyznaczają trzy osie obrotu (x,y,z) oraz kąt obrotu (w). Orientacja kwaternionowa jest używana w metodzie interpolate()
.
Parametry
orientationStyle:String (default = "eulerAngles ") — Parametr opcjonalny określający styl orientacji używany przy transformacjach macierzowych. Wyróżnia się trzy typy stylów orientacji: eulerAngles (stała EULER_ANGLES ), axisAngle (stała AXIS_ANGLE ) i quaternion (stała QUATERNION ). Dodatkowe informacje o stylach orientacji zawiera opis klasy geom.Orientation3D .
|
Vector.<Vector3D> — Obiekt Vector złożony z trzech obiektów Vector3D zawierających odpowiednio ustawienia translacji, obrotu i skali.
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
decompose()
i recompose()
do poziomego rozciągania elipsy w miarę jej zbliżania się do znikającego punktu. Pierwszy obiekt Vector3D zwrócony przez metodę decompose()
zawiera współrzędne translacji. Trzeci obiekt Vector3D zawiera ustawienia skali. Metoda incrementBy()
obiektu Vector3D zwiększa bezwzględne ustawienia translacji i skali macierzy.
package { import flash.display.MovieClip; import flash.display.Shape; import flash.geom.*; import flash.events.Event; public class Matrix3DdecomposeExample extends MovieClip { private var ellipse:Shape = new Shape(); public function Matrix3DdecomposeExample():void { ellipse.x = (this.stage.stageWidth / 2); ellipse.y = (this.stage.stageHeight - 40); ellipse.z = 1; ellipse.graphics.beginFill(0xFF0000); ellipse.graphics.lineStyle(2); ellipse.graphics.drawEllipse(0, 0, 50, 40); ellipse.graphics.endFill(); addChild(ellipse); ellipse.addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(e:Event):void { var v3:Vector.<Vector3D> = new Vector.<Vector3D>(3); v3 = ellipse.transform.matrix3D.decompose(); v3[0].incrementBy(new Vector3D(0,0,1)); v3[2].incrementBy(new Vector3D(0.01,0,0)); ellipse.transform.matrix3D.recompose(v3); } } }
deltaTransformVector | () | metoda |
public function deltaTransformVector(v:Vector3D):Vector3D
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Stosuje macierz transformacji, z wyjątkiem elementów translacji, w celu dokonania transformacji obiektu Vector 3D ze współrzędnych jednej przestrzeni na współrzędne innej przestrzeni. Zwrócony obiekt Vector3D zawiera nowe współrzędne po zastosowaniu obrotu i skalowania. W przypadku zastosowania przez metodę deltaTransformVector()
macierzy zawierającej tylko translację, zwrócony obiekt Vector3D będzie identyczny z oryginalnym obiektem Vector3D.
Metody deltaTransformVector()
można używać w celu uwzględnienia przez obiekt w jednej przestrzeni współrzędnych obrotów drugiego obiektu wyświetlanego. Obrót obiektu nie jest kopiowany; nastąpi jedynie zmiana położenia obiektu uwzględniająca zmianę obrotu. Na przykład, aby użyć wywołania API display.Graphics
do narysowania obracającego się trójwymiarowego obiektu wyświetlanego, należy odwzorować obracane współrzędne obiektu na punkt dwuwymiarowy. Najpierw należy pobrać współrzędne trójwymiarowego obiektu po każdym obrocie, korzystając z metody deltaTransformVector()
. Następnie należy zastosować metodę local3DToGlobal()
obiektu wyświetlanego w celu przetłumaczenia współrzędnych trójwymiarowych na punkty dwuwymiarowe. Następnie można użyć punktów dwuwymiarowych do narysowania obracającego się obiektu trójwymiarowego.
Uwaga: Ta metoda automatycznie ustawia składnik w przekazywanego obiektu Vector3D na 0.0.
Parametry
v:Vector3D — Obiekt Vector3D zawierający współrzędne podlegające transformacji.
|
Vector3D — Obiekt Vector3D zawierający przetransformowane współrzędne.
|
Powiązane elementy interfejsu API
identity | () | metoda |
public function identity():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Przekształca bieżącą macierz w macierz jednostkową. Wszystkie elementy macierzy jednostkowej na przekątnej głównej mają wartości jeden, a pozostałe elementy tej macierzy mają wartość zero. W rezultacie uzyskuje się macierz, której właściwość rawData
ma wartość 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
, ustawienie obrotu ma wartość Vector3D(0,0,0)
, ustawienie pozycji lub translacji ma wartość Vector3D(0,0,0)
, a skala ma wartość Vector3D(1,1,1)
. Oto reprezentacja macierzy jednostkowej.
Obiekt poddany transformacji poprzez zastosowanie macierzy jednostkowej nie ulega zmianie. Innymi słowy, pomnożenie macierzy przez macierz jednostkową daje w wyniku macierz identyczną z oryginalną.
interpolate | () | metoda |
public static function interpolate(thisMat:Matrix3D, toMat:Matrix3D, percent:Number):Matrix3D
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Interpoluje przekształcenie translacji, obrotu i skalowania jednej macierzy w kierunku tego przekształcenia macierzy docelowej.
Metoda interpolate()
pozwala uniknąć pewnych niepożądanych skutków użycia właściwości obrotu obiektu wokół osi. Metoda interpolate()
unieważnia zapisaną w pamięci podręcznej właściwość obrotu obiektu wyświetlanego i przekształca elementy orientacji macierzy obiektu wyświetlanego do orientacji typu quaternion, a dopiero potem dokonuje interpolacji. Ta metoda gwarantuje najkrótszą, najbardziej efektywną ścieżkę obrotu. Generuje ponadto płynny obrót, przy którym obiekt nie traci stopni swobody. Sytuacja taka może wystąpić w przypadku orientacji eulerAngles, gdy obliczenia są realizowane dla każdej osi z osobna. W trakcie obrotu wokół dwóch lub większej liczby osi może dojść do równoległego ich ustawienia, co prowadzi do nieoczekiwanych wyników. Obrót z orientacją typu quaternion jest wolny od tego efektu.
Kolejne wywołania metody interpolate()
umożliwiają uzyskanie efektu szybkiego rozpoczęcia ruchu obiektu, a następnie powolnego zbliżania się do innego obiektu wyświetlanego. Na przykład jeśli ustawimy parametr thisMat
na zwrócony obiekt Matrix3D, parametr toMat
na obiekt Matrix3D skojarzony z docelowym obiektem wyświetlanym, a parametr percent
na 0.1
, to obiekt wyświetlany zbliży się o dziesięć procent do obiektu docelowego. W kolejnych wywołaniach lub w kolejnych klatkach obiekt będzie zbliżał się do celu o 10% pozostałej odległości, aż do osiągnięcia celu.
Parametry
thisMat:Matrix3D — Obiekt Matrix3D przeznaczony do interpolacji.
| |
toMat:Matrix3D — Docelowy obiekt Matrix3D.
| |
percent:Number — Wartość z przedziału od 0 do 1 określająca procent zbliżenia obiektu Matrix3D thisMat do docelowego obiektu Matrix3D.
|
Matrix3D — Obiekt Matrix3D z elementami, których wartości znajdują się pomiędzy wartościami macierzy źródłowej a wartościami macierzy docelowej. Po zastosowaniu zwróconej macierzy do obiektu wyświetlanego this obiekt zbliża się o określony procent do obiektu docelowego.
|
Powiązane elementy interfejsu API
interpolateTo | () | metoda |
public function interpolateTo(toMat:Matrix3D, percent:Number):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Interpoluje tę macierz w kierunku przekształceń translacji, obrotu i skalowania macierzy docelowej.
Metoda interpolateTo()
pozwala uniknąć niepożądanych skutków użycia właściwości obrotu obiektu wyświetlanego wokół osi. Metoda interpolateTo()
unieważnia zapisaną w pamięci podręcznej właściwość obrotu obiektu wyświetlanego i przekształca elementy orientacji macierzy obiektu wyświetlanego do orientacji typu quaternion, a dopiero potem dokonuje interpolacji. Ta metoda gwarantuje najkrótszą, najbardziej efektywną ścieżkę obrotu. Generuje ponadto płynny obrót, przy którym obiekt nie traci stopni swobody. Sytuacja taka może wystąpić w przypadku orientacji eulerAngles, gdy obliczenia są realizowane dla każdej osi z osobna. W trakcie obrotu wokół dwóch lub większej liczby osi może dojść do równoległego ich ustawienia, co prowadzi do nieoczekiwanych wyników. Obrót z orientacją typu quaternion jest wolny od tego efektu.
Uwaga: W przypadku interpolacji wartość skali macierzy jest zerowana, a macierz jest normalizowana.
Kolejne wywołania metody interpolateTo()
umożliwiają uzyskanie efektu szybkiego rozpoczęcia ruchu obiektu, a następnie powolnego zbliżania się do innego obiektu wyświetlanego. Na przykład ustawienie parametru percent na 0.1
spowoduje zbliżenie obiektu wyświetlanego o dziesięć procent do obiektu docelowego określonego przez parametr toMat
. W kolejnych wywołaniach lub w kolejnych klatkach obiekt będzie zbliżał się do celu o 10% pozostałej odległości, aż do osiągnięcia celu.
Parametry
toMat:Matrix3D — Docelowy obiekt Matrix3D.
| |
percent:Number — Wartość z przedziału od 0 do 1 określająca położenie obiektu wyświetlanego względem celu. Im wartość bliższa jest 1,0 , tym bliżej swojej bieżącej pozycji znajduje się obiekt wyświetlany. Im wartość bliższa jest 0 , tym bliżej celu znajduje się obiekt wyświetlany.
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
ellipse2
zbliża się do drugiego trójwymiarowego obiektu wyświetlanego o nazwieellipse1
. Obiekt ellipse2
podąża za obiektem ellipse1
, próbując go „dogonić”. Jeśli obiekt ellipse1
nie obróci się wokół swojej osi y, ellipse2
dogoni go i znajdzie się na obiekcie ellipse1
. Obie elipsy są rysowane w ten sam sposób, ale umieszczone w różnych położeniach w globalnym trójwymiarowym układzie współrzędnych.
package { import flash.display.MovieClip; import flash.display.Shape; import flash.display.Graphics; import flash.geom.*; import flash.events.Event; public class InterpolateToExample extends MovieClip { private var ellipse1:Shape = new Shape(); private var ellipse2:Shape = new Shape(); public function InterpolateToExample():void { ellipse1 = myEllipses(250, 100, 500, 0xFF0000); addChild(ellipse1); ellipse2 = myEllipses(-30, 120, 1, 0x00FF00); addChild(ellipse2); addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function myEllipses(x:Number, y:Number, z:Number, c:Number):Shape { var s:Shape = new Shape(); s.x = x; s.y = y; s.z = z; s.graphics.beginFill(c); s.graphics.lineStyle(2); s.graphics.drawEllipse(100, 50, 100, 80); s.graphics.endFill(); return s; } private function enterFrameHandler(e:Event) { ellipse1.rotationY += 1; ellipse2.transform.matrix3D.interpolateTo(ellipse1.transform.matrix3D, 0.1); } } }
invert | () | metoda |
public function invert():Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Odwraca bieżącą macierz Odwrócona macierz ma ten sam rozmiar co oryginalna, ale realizuje transformację przeciwną do oryginalnej. Na przykład jeśli oryginalna macierz obracała obiekt wokół osi x w jednym kierunku, odwrócona macierz będzie obracać obiekt wokół tej osi w kierunku przeciwnym. Zastosowanie macierzy odwróconej do obiektu cofa transformację wykonaną przez oryginalną macierz. Przemnożenie macierzy przez jej macierz odwróconą daje w wyniku macierz jednostkową.
Może być używana do dzielenia macierzy. Sposób na podzielenie macierzy A przez macierz B polega na pomnożeniu macierzy A przez wynik odwrócenia macierzy B. Odwrócona macierz może być także wykorzystana w przestrzeni kamery. Gdy kamera porusza się w przestrzeni globalnej, obiekt w przestrzeni globalnej musi poruszać się w kierunku przeciwnym, aby widok globalny został przetransformowany na przestrzeń kamery lub przestrzeń widoku. Na przykład gdy kamera przybliża się, obiekty będą się powiększać. Innymi słowy, jeśli kamera przemieszcza się w dół globalnej osi z, obiekt przesuwa się w górę wzdłuż globalnej osi z.
Metoda invert()
zastępuje bieżącą macierz macierzą odwróconą. Aby odwrócić macierz bez zmiany macierzy źródłowej, należy najpierw skopiować macierz źródłową za pomocą metody clone()
, a następnie zastosować metodę invert()
do kopii.
Obiekt Matrix3D musi być odwracalny.
ZwracaBoolean — Zwraca wartość true , jeśli macierz została pomyślnie odwrócona.
|
Powiązane elementy interfejsu API
pointAt | () | metoda |
public function pointAt(pos:Vector3D, at:Vector3D = null, up:Vector3D = null):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Obraca obiekt wyświetlany w taki sposób, aby był zwrócony do określonej pozycji. Ta metoda umożliwia miejscową modyfikację orientacji. Wektor kierunku „do przodu” obiektu wyświetlanego (tj. obiekt Vector3D at
) wskazuje na określoną pozycję globalną. Kierunek „do góry” obiektu wyświetlanego określany jest za pomocą obiektu Vector3D up
.
Metoda pointAt()
unieważnia wartość właściwości obrotu obiektu wyświetlanego zapisaną w pamięci podręcznej. Metoda dokonuje dekompozycji macierzy obiektu wyświetlanego i modyfikuje elementy obrotu w celu obrócenia obiektu do określonej pozycji. Następnie dokonuje ponownej kompozycji (aktualizacji) macierzy obiektu wyświetlanego, co powoduje zrealizowanie transformacji. Jeśli obiekt jest zwrócony w stronę ruchomego celu, np. pozycji poruszającego się obiektu, to każde kolejne wywołanie metody spowoduje obrócenie obiektu w stronę aktualnego położenia ruchomego celu.
Uwaga: Jeśli metoda Matrix3D.pointAt()
zostanie użyta bez ustawienia opcjonalnych parametrów, obiekt docelowy nie będzie domyślnie zwrócony do określonej pozycji globalnej. Należy ustawić wartość półosi -y (0,-1,0) dla parametru at
oraz półoś -z (0,0,-1) dla parametru up
.
Parametry
pos:Vector3D — Globalna pozycja obiektu docelowego. Globalność oznacza, że transformacja obiektu jest zdefiniowana względem przestrzeni i współrzędnych globalnych. Wszystkie obiekty mają pozycje w przestrzeni globalnej.
| |
at:Vector3D (default = null ) — Wektor względem obiektu definiujący kierunek, w którym zwrócony jest obiekt wyświetlany. Transformacje względem obiektu odbywają się względem przestrzeni obiektu, tj. własnej klatki referencyjnej i układu współrzędnych obiektu. Wartością domyślną jest półoś +y (0,1,0).
| |
up:Vector3D (default = null ) — Wektor względem obiektu definiujący stronę „do góry” dla obiektu wyświetlanego. Jeśli obiekt jest narysowany tak, że obserwator patrzy na niego z góry, półoś +z jest jego wektorem „w górę“. Przekształcenia względem obiektu odbywają się w stosunku do przestrzeni obiektu, tj. własnego punktu odniesienia i układu współrzędnych obiektu. Wartością domyślną jest półoś +z (0,0,1).
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
pointAt()
, aby zobrazować ich wpływ na ruch trójkąta.
package { import flash.display.MovieClip; import flash.display.Shape; import flash.display.Graphics; import flash.geom.*; import flash.events.Event; public class PointAtExample extends MovieClip { private var ellipse:Shape = new Shape(); private var triangle:Shape = new Shape(); public function PointAtExample():void { ellipse.graphics.beginFill(0xFF0000); ellipse.graphics.lineStyle(2); ellipse.graphics.drawEllipse(30, 40, 50, 40); ellipse.graphics.endFill(); ellipse.x = 100; ellipse.y = 150; ellipse.z = 1; triangle.graphics.beginFill(0x0000FF); triangle.graphics.moveTo(0, 0); triangle.graphics.lineTo(40, 40); triangle.graphics.lineTo(80, 0); triangle.graphics.lineTo(0, 0); triangle.graphics.endFill(); triangle.x = 200; triangle.y = 50; triangle.z = 1; addChild(ellipse); addChild(triangle); ellipse.addEventListener(Event.ENTER_FRAME, ellipseEnterFrameHandler); triangle.addEventListener(Event.ENTER_FRAME, triangleEnterFrameHandler); } private function ellipseEnterFrameHandler(e:Event) { if(e.target.y > 0) { e.target.y -= 1; e.target.x -= 1; } } private function triangleEnterFrameHandler(e:Event) { e.target.transform.matrix3D.pointAt(ellipse.transform.matrix3D.position, Vector3D.X_AXIS, Vector3D.Y_AXIS); } } }
prepend | () | metoda |
public function prepend(rhs:Matrix3D):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Dołącza macierz na początku transformacji, mnożąc bieżący obiekt Matrix3D przez inny obiekt Matrix3D. Wynikiem jest kombinacja transformacji opisanych przez obie macierze.
Mnożenie macierzy różni się od dodawania macierzy. Mnożenie macierzy nie jest przemienne. Innymi słowy, A razy B nie równa się B razy A. Metoda prepend()
wykonuje mnożenie od prawej strony, co oznacza że obiekt Matrix3D rhs
znajduje się po prawej stronie operatora mnożenia.
thisMatrix = thisMatrix * rhs
Metoda prepend()
wprowadza modyfikacje względem przestrzeni obiektu. Innymi słowy, są one zawsze realizowane względem początkowej klatki referencyjnej obiektu.
Metoda prepend()
zastępuje bieżącą macierz macierzą dołączoną. Aby dołączyć w ten sposób dwie macierze bez zmiany bieżącej macierzy, należy najpierw skopiować bieżącą macierz za pomocą metody clone()
, a następnie zastosować metodę prepend()
do kopii.
Parametry
rhs:Matrix3D — Macierz, przez którą mnożony jest bieżący obiekt Matrix3D.
|
Powiązane elementy interfejsu API
prependRotation | () | metoda |
public function prependRotation(degrees:Number, axis:Vector3D, pivotPoint:Vector3D = null):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Poprzedzająco stosuje przyrostowy obrót do obiektu Matrix3D. Zastosowanie obiektu Matrix3D do obiektu wyświetlanego powoduje wykonanie obrotu przed innymi transformacjami opisanymi przez obiekt Matrix3D.
Obrót obiektu wyświetlanego jest zdefiniowany przez oś, stopień przyrostowego obrotu wokół osi oraz opcjonalny punkt będący środkiem obrotu obiektu. Osią może być dowolny kierunek ogólny. Najbardziej popularne osie są następujące: X_AXIS
(Vector3D(1,0,0)
), Y_AXIS
(Vector3D(0,1,0)
) i Z_AXIS
(Vector3D(0,0,1)
). W terminologii lotniczej obrót wokół osi y jest nazywany odchyleniem. Obrót wokół osi x jest nazywany pochyleniem. Obrót wokół osi z jest nazywany przechyłem.
Kolejność przekształceń ma znaczenie. Obrót, po którym następuje translacja daje inny efekt niż translacja, po której następuje obrót.
Obrót nie jest bezwzględny. Efekt jest realizowany względem obiektu, tj. punktu odniesienia pierwotnej pozycji i orientacji. Aby wprowadzić bezwzględną zmianę w macierzy transformacji, należy skorzystać z metody recompose()
.
Zastosowanie metody prependRotation()
do obiektu Matrix3D obiektu wyświetlanego powoduje unieważnienie wartości właściwości obrotu obiektu zapisanych w pamięci podręcznej.
Jednym ze sposobów obrócenia obiektu wyświetlanego wokół konkretnego punktu względem jego położenia jest translacja obiektu do określonego punktu, obrócenie obiektu za pomocą metody prependRotation()
i translacja obiektu z powrotem do pierwotnego położenia. W poniższym przykładzie trójwymiarowy obiekt ekranowy myObject
obraca się w osi Y wokół współrzędnych (10,10,0).
myObject.z = 1; myObject.transform.matrix3D.prependTranslation(10,10,0); myObject.transform.matrix3D.prependRotation(1, Vector3D.Y_AXIS); myObject.transform.matrix3D.prependTranslation(-10,-10,0);
Parametry
degrees:Number — Stopień obrotu.
| |
axis:Vector3D — Oś lub kierunek obrotu. Najczęściej stosowane osie są następujące: X_AXIS (Vector3D(1,0,0) ), Y_AXIS (Vector3D(0,1,0) ) i Z_AXIS (Vector3D(0,0,1) ). Ten wektor powinien mieć długość równą jeden.
| |
pivotPoint:Vector3D (default = null ) — Punkt określający środek obrotu. Domyślnym środkiem obrotu obiektu jest jego punkt rejestracji.
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
package { import flash.display.MovieClip; import flash.display.Shape; import flash.geom.*; import flash.events.MouseEvent; public class Matrix3DprependRotationExample extends MovieClip { private var ellipse:Shape = new Shape(); public function Matrix3DprependRotationExample():void { ellipse.graphics.beginFill(0xFF0000); ellipse.graphics.lineStyle(2); ellipse.graphics.drawEllipse(-50, -40, 100, 80); ellipse.graphics.endFill(); ellipse.x = (this.stage.stageWidth / 2); ellipse.y = (this.stage.stageHeight / 2); ellipse.z = 1; addChild(ellipse); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } private function mouseMoveHandler(e:MouseEvent):void { var y:int; var x:int; if(e.localX > ellipse.x) { y = (Math.round(e.localX) / 100); } else { y = -(Math.round(e.localX) / 10); } if(e.localY > ellipse.y) { x = (Math.round(e.localY) / 100); } else { x = -(Math.round(e.localY) / 100); } ellipse.transform.matrix3D.prependRotation(y, Vector3D.Y_AXIS); ellipse.transform.matrix3D.prependRotation(x, Vector3D.X_AXIS); } } }
prependScale | () | metoda |
public function prependScale(xScale:Number, yScale:Number, zScale:Number):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Poprzedzająco stosuje do obiektu Matrix3D przyrostowe przeskalowanie wzdłuż osi x, y i z. Zastosowanie obiektu Matrix3D do obiektu wyświetlanego powoduje wykonanie skalowania przed innymi transformacjami opisanymi przez obiekt Matrix3D. Zmiany są realizowane względem obiektu, tj. klatki referencyjnej oryginalnej pozycji i orientacji. Domyślny współczynnik skali to (1.0, 1.0, 1.0).
Skala jest zdefiniowana jako zestaw trzech przyrostowych zmian wzdłuż trzech osi (x,y,z). Każdą oś można pomnożyć przez inną liczbę. Zastosowanie zmiany skali do obiektu wyświetlanego powoduje jego powiększenie lub zmniejszenie. Na przykład ustawienie wartości osi x, y i z na dwa powoduje dwukrotne powiększenie obiektu, natomiast ustawienie wartości osi na 0.5
powoduje zmniejszenie obiektu o połowę. Aby mieć pewność, że przeskalowanie będzie miało wpływ tylko na jedną oś, należy ustawić pozostałe parametry na jeden. Wartość jeden oznacza brak skalowania wzdłuż danej osi.
Metody prependScale()
można używać zarówno do skalowania, jak i do zniekształcania obiektu wyświetlanego, np. rozciągania go lub skracania. Może również służyć do powiększania (zoom) i pomniejszania określonego obszaru. Transformacje skali są wykonywane automatycznie podczas obrotów i translacji obiektu wyświetlanego.
Kolejność transformacji jest istotna. Zmiana rozmiaru, po której następuje translacja daje inny efekt niż translacja, po której następuje zmiana rozmiaru.
Parametry
xScale:Number — Mnożnik skalowania obiektu wzdłuż osi x.
| |
yScale:Number — Mnożnik skalowania obiektu wzdłuż osi y.
| |
zScale:Number — Mnożnik skalowania obiektu wzdłuż osi z.
|
Powiązane elementy interfejsu API
prependTranslation | () | metoda |
public function prependTranslation(x:Number, y:Number, z:Number):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Poprzedzająco stosuje do obiektu Matrix3D przyrostową translację, tj. zmianę położenia wzdłuż osi x, y i z. Zastosowanie obiektu Matrix3D do obiektu wyświetlanego powoduje wykonanie translacji przed innymi transformacjami opisanymi przez obiekt Matrix3D.
Translacja określa odległość, o jaką obiekt wyświetlany przemieści się z bieżącego położenia wzdłuż osi x, y i z. Metoda prependTranslation()
realizuje translację jako zestaw trzech przyrostowych zmian wzdłuż trzech osi (x,y,z). Aby translacja wpływała tylko na jedną współrzędną (oś), należy ustawić pozostałe parametry na zero. Parametr zerowy oznacza, że nie nastąpi zmiana położenia wzdłuż danej osi.
Translacje są względne. Efekt jest realizowany względem obiektu, tj. klatki referencyjnej oryginalnej pozycji i orientacji. Aby wprowadzić bezwzględną zmianę w macierzy przekształcenia, należy skorzystać z metody recompose()
. Znaczenie ma także kolejność transformacji. Translacja, po której następuje obrót, da inny efekt niż obrót, po którym następuje translacja. Po zastosowaniu metody prependTranslation()
wyświetlany obiekt będzie dalej przemieszczał się w kierunku, w którym jest zwrócony, niezależnie od pozostałych transformacji. Na przykład jeśli obiekt wyświetlany był zwrócony ku dodatniej półosi x, będzie dalej przemieszczał się w kierunku określonym przez metodę prependTranslation()
, niezależnie od tego, jak zostanie obrócony. Aby translacja została przeprowadzona po innych transformacjach, należy użyć metody appendTranslation()
.
Parametry
x:Number — Przyrostowa translacja wzdłuż osi x.
| |
y:Number — Przyrostowa translacja wzdłuż osi y.
| |
z:Number — Przyrostowa translacja wzdłuż osi z.
|
Powiązane elementy interfejsu API
Przykład ( Sposób korzystania z tego przykładu )
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.geom.*; import flash.events.MouseEvent; public class Matrix3DprependTranslationExample extends MovieClip { private var ellipse:Sprite = new Sprite(); public function Matrix3DprependTranslationExample():void { ellipse.x = this.stage.stageWidth / 2; ellipse.y = this.stage.stageHeight - 100; ellipse.z = 1; ellipse.graphics.beginFill(0xFF0000); ellipse.graphics.lineStyle(2); ellipse.graphics.drawEllipse(0, 0, 60, 50); ellipse.graphics.endFill(); addChild(ellipse); ellipse.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler); ellipse.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); } private function mouseOverHandler(e:MouseEvent):void { if(ellipse.y > 0) { ellipse.transform.matrix3D.prependTranslation(0, -10, 0); } } private function mouseOutHandler(e:MouseEvent):void { if(ellipse.y > 0) { ellipse.transform.matrix3D.prependTranslation(0, -10, 0); } else { ellipse.transform.matrix3D.prependTranslation(0, (this.stage.stageHeight - 100), 0); } } } }
recompose | () | metoda |
public function recompose(components:Vector.<Vector3D>, orientationStyle:String = "eulerAngles"):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Ustawia wartości translacji, obrotu i skali w macierzy. W przeciwieństwie do zmian przyrostowych wprowadzanych przez właściwości obrotu obiektu wyświetlanego lub metody obrotu obiektu Matrix3D, zmiany wprowadzane przez metodę recompose()
są zmianami bezwzględnymi. Metoda recompose()
nadpisuje transformację macierzy.
Aby zmodyfikować transformację macierzy z uwzględnieniem bezwzględnej nadrzędnej klatki referencyjnej, należy pobrać ustawienia za pomocą metody decompose()
i wprowadzić odpowiednie zmiany. Zmodyfikowaną transformację można ustawić w obiekcie Matrix3D za pomocą metody recompose()
.
Parametr metody recompose()
określa styl orientacji użyty do transformacji. Orientacja domyślna to eulerAngles
; w tym przypadku orientacja jest zdefiniowana za pomocą trzech odrębnych kątów obrotu dla poszczególnych osi. Obroty są wykonywane jeden po drugim i nie wpływają wzajemnie na swoje osie. Właściwości obrotu osi obiektu wyświetlanego powodują transformacją ze stylem orientacji eulerAngles. Pozostałe opcje stylu orientacji to axisAngle
oraz quaternion
. Orientacja axisAngle jest zdefiniowana przez kombinację osi i kąta. Oś, wokół której obracany jest obiekt, to wektor jednostkowy reprezentujący kierunek. Kąt określa wielkość obrotu wokół wektora. Kierunek decyduje także o tym, w którą stronę jest zwrócony obiekt wyświetlany, a kąt określa, która strona obiektu jest zwrócona do góry. Orientacja axisAngle jest używana w metodach appendRotation()
i prependRotation()
. W orientacji quaternion stosowane są liczby zespolone i czwarty element wektora. Orientacja jest reprezentowana przez trzy osie obrotu (x,y,z) oraz kąt obrotu (w). Orientacja kwaternionowa jest używana w metodzie interpolate()
.
Parametry
components:Vector.<Vector3D> — Obiekt Vector złożony z trzech obiektów Vector3D, które zastępują elementy translacji, obrotu i skali w obiekcie Matrix3D.
| |
orientationStyle:String (default = "eulerAngles ") — Parametr opcjonalny określający styl orientacji używany w przekształceniach macierzowych. Wyróżnia się trzy typy stylów orientacji: eulerAngles (stała EULER_ANGLES ), axisAngle (stała AXIS_ANGLE ) i quaternion (stała QUATERNION ). Dodatkowe informacje o stylach orientacji zawiera opis klasy geom.Orientation3D .
|
Boolean — Zwraca wartość false , jeśli jakikolwiek z elementów obiektu Vector3D w wektorze components nie istnieje lub ma wartość NULL.
|
Powiązane elementy interfejsu API
transformVector | () | metoda |
public function transformVector(v:Vector3D):Vector3D
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Stosuje macierz transformacji w celu dokonania transformacji obiektu Vector3D ze współrzędnych jednej przestrzeni na współrzędne innej przestrzeni. Zwrócony obiekt Vector3D zawiera nowe współrzędne po transformacji. Wszystkie transformacje opisane w macierzy, w tym translacja, są stosowane do obiektu Vector3D.
Jeśli wynik działania metody transformVector()
został zastosowany do pozycji obiektu wyświetlanego, tylko pozycja tego obiektu ulegnie zmianie. Elementy obrotu i skali obiektu wyświetlanego nie ulegają zmianie.
Uwaga: Ta metoda automatycznie ustawia składnik w przekazywanego obiektu Vector3D na 1.0.
Parametry
v:Vector3D — Obiekt Vector3D zawierający współrzędne podlegające transformacji.
|
Vector3D — Obiekt Vector3D zawierający przetransformowane współrzędne.
|
Powiązane elementy interfejsu API
transformVectors | () | metoda |
public function transformVectors(vin:Vector.<Number>, vout:Vector.<Number>):void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Stosuje macierz transformacji w celu transformacji obiektu Vector zawierającego obiekty Number z jednego układu współrzędnych na inny. Metoda tranformVectors()
odczytuje każdą trójkę obiektów Number w obiekcie Vector vin
jako współrzędne trójwymiarowe (x,y,z) i umieszcza przetransformowane współrzędne trójwymiarowe w obiekcie Vector vout
. Wszystkie transformacje macierzowe, w tym translacja, są stosowane do obiektu Vector vin
. Metody transformVectors()
można użyć do renderowania i transformowania obiektu trójwymiarowego w postaci siatki. Siatka jest to zbiór wektorów definiujących kształt obiektu.
Parametry
vin:Vector.<Number> — Obiekt Vector zawierający obiekty Number, gdzie każde trzy obiekty Number są trójwymiarowymi współrzędnymi (x,y,z) przeznaczonymi do transformacji.
| |
vout:Vector.<Number> — Obiekt Vector zawierający obiekty Number, gdzie każde trzy obiekty Number są przetransformowanymi współrzędnymi trójwymiarowymi (x,y,z).
|
Powiązane elementy interfejsu API
transpose | () | metoda |
public function transpose():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Przekształca bieżący obiekt Matrix3D w macierz, w której wiersze są zamienione na kolumny, a kolumny na wiersze. Na przykład jeśli właściwość rawData
bieżącego obiektu Matrix3D zawierała wektor 16 liczb 1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34
, metoda transpose()
odczyta każde cztery elementy jako jeden wiersz i przekształci wiersze w kolumny. Wynikiem będzie macierz, której właściwość rawData
będzie zawierać liczby: 1,11,21,31,2,12,22,32,3,13,23,33,4,14,24,34
.
Metoda transpose()
zastępuje macierz bieżącą macierzą przetransponowaną. Aby przetransponować macierz bez zmiany macierzy bieżącej, należy najpierw skopiować macierz bieżącą za pomocą metody clone()
, a następnie zastosować metodę transpose()
do kopii.
Macierz ortogonalna to taka macierz kwadratowa, dla której wynik transpozycji jest równy wynikowi odwrócenia.
Tue Jun 12 2018, 12:06 PM Z