Pacchetto | flash.geom |
Classe | public class Matrix3D |
Ereditarietà | Matrix3D Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Una singola matrice può combinare varie trasformazioni e applicarle immediatamente a un oggetto di visualizzazione tridimensionale. Una matrice può ad esempio essere applicata alle coordinate tridimensionali per eseguire una rotazione seguita da una conversione.
Quando si imposta esplicitamente la proprietà z
o una qualsiasi delle proprietà rotazione o scala di un oggetto di visualizzazione, viene automaticamente creato un oggetto Matrix3D corrispondente.
Potete accedere a un oggetto Matrix3D dell'oggetto di visualizzazione tridimensionale attraverso la proprietà transform.matrix3d
. Gli oggetti bidimensionali non hanno un oggetto Matrix3D.
Il valore della proprietà z
di un oggetto bidimensionale è zero e il valore della proprietà matrix3D
è null
.
Nota: se lo stesso oggetto Matrix3D viene assegnato a due diversi oggetti di visualizzazione, viene generato un errore di runtime.
La classe Matrix3D utilizza una matrice quadrata 4x4: una tabella di quattro righe e colonne di numeri che includono i dati per la trasformazione. Le prime tre righe della matrice includono i dati per ogni asse tridimensionale (x,y,z). Nell'ultima colonna sono presenti le informazioni sulla conversione. L'orientamento e il ridimensionamento dei dati sono inclusi nelle prime tre colonne. I fattori di scala sono i numeri diagonali nelle prime tre colonne. Di seguito è riportata una rappresentazione di elementi Matrix3D:
Non è richiesto che conosciate la matematica delle matrici per utilizzare la classe Matrix3D. Fornisce metodi specifici che semplificano l'attività di trasformazione e proiezione, ad esempio appendTranslation()
, appendRotation()
o interpolateTo()
. Per accedere agli elementi sottostanti della matrice, potete anche utilizzare i metodi decompose()
e recompose()
o la proprietà rawData
.
Gli oggetti di visualizzazione memorizzano nella cache le proprietà di rotazione degli assi, in modo da avere una rotazione separata per ogni asse e gestire le diverse combinazioni delle rotazioni. Quando viene chiamato un metodo di un oggetto Matrix3D per trasformare un oggetto di visualizzazione, la cache di rotazione degli oggetti viene invalidata.
Altri esempi
Elementi API correlati
flash.geom.Transform
flash.geom.PerspectiveProjection
flash.geom.Vector3D
flash.geom.Orientation3D
flash.geom.Utils3D
flash.geom.Matrix
Proprietà | Definito da | ||
---|---|---|---|
constructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. | Object | ||
determinant : Number [sola lettura]
Un numero che determina se una matrice è invertibile. | Matrix3D | ||
position : Vector3D
Un oggetto Vector3D che include la posizione, le coordinate tridimensionali (x,y,z) di un oggetto di visualizzazione all'interno di un fotogramma di riferimento della trasformazione. | Matrix3D | ||
rawData : Vector.<Number>
Un vettore di 16 numeri, in cui ogni gruppo di quattro elementi è una colonna di una matrice 4x4. | Matrix3D |
Metodo | Definito da | ||
---|---|---|---|
Crea un oggetto Matrix3D. | Matrix3D | ||
Aggiunge la matrice moltiplicando un altro oggetto Matrix3D per l'oggetto Matrix3D corrente. | Matrix3D | ||
Aggiunge una rotazione incrementale a un oggetto Matrix3D. | Matrix3D | ||
Aggiunge una modifica in scala incrementale lungo gli assi x, y e z a un oggetto Matrix3D. | Matrix3D | ||
Aggiunge una conversione incrementale, un riposizionamento lungo gli assi x, y e z, a un oggetto Matrix3D. | Matrix3D | ||
Restituisce un nuovo oggetto Matrix3D che è la copia esatta dell'oggetto Matrix3D corrente. | Matrix3D | ||
Copia un oggetto Vector3D in una colonna specifica dell'oggetto Matrix3D chiamante. | Matrix3D | ||
Copia la colonna specifica dell'oggetto Matrix3D chiamante nell'oggetto Vector3D. | Matrix3D | ||
Copia tutti i dati di matrice dall'oggetto Matrix3D di origine all'oggetto Matrix3D chiamante. | Matrix3D | ||
Copia tutti i dati di vettore dall'oggetto vettore di origine all'oggetto Matrix3D chiamante. | Matrix3D | ||
Copia tutti i dati di matrice dall'oggetto Matrix3D chiamante al vettore fornito. | Matrix3D | ||
Copia un oggetto Vector3D in una riga specifica dell'oggetto Matrix3D chiamante. | Matrix3D | ||
Copia la riga specifica dell'oggetto Matrix3D chiamante nell'oggetto Vector3D. | Matrix3D | ||
Matrix3D | |||
Restituisce le impostazioni di conversione, rotazione e ridimensionamento della matrice di trasformazione come vettore di tre oggetti Vector3D. | Matrix3D | ||
Utilizza la matrice di trasformazione senza gli elementi di conversione per trasformare un oggetto Vector3D da una coordinata dello spazio a un'altra. | Matrix3D | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Converte la matrice corrente in una matrice di identità o di unità. | Matrix3D | ||
[statico]
Esegue l'interpolazione delle trasformazioni di traslazione, rotazione e scala di una matrice verso quelle della matrice di destinazione. | Matrix3D | ||
Esegue l'interpolazione di questa matrice verso le trasformazioni di traslazione, rotazione e scala della matrice di destinazione. | Matrix3D | ||
Inverte la matrice corrente. | Matrix3D | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Ruota l'oggetto di visualizzazione in modo che sia rivolto verso una posizione specificata. | Matrix3D | ||
Anteporre una matrice moltiplicando l'oggetto Matrix3D corrente per un altro oggetto Matrix3D. | Matrix3D | ||
Antepone una rotazione incrementale a un oggetto Matrix3D. | Matrix3D | ||
Antepone una modifica in scala incrementale lungo gli assi x, y e z a un oggetto Matrix3D. | Matrix3D | ||
Antepone una conversione incrementale, un riposizionamento lungo gli assi x, y e z, a un oggetto Matrix3D. | Matrix3D | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Configura le impostazioni di conversione, rotazione e ridimensionamento della matrice di trasformazione. | Matrix3D | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce la rappresentazione in formato stringa dell'oggetto specificato. | Object | ||
Utilizza una matrice di trasformazione per trasformare un oggetto Vector3D da una coordinata dello spazio a un'altra. | Matrix3D | ||
Utilizza la matrice di trasformazione per trasformare un vettore di numeri da uno spazio di coordinate a un altro. | Matrix3D | ||
Converte l'oggetto Matrix3D corrente in una matrice in cui righe e colonne sono scambiate. | Matrix3D | ||
Restituisce il valore di base dell'oggetto specificato. | Object |
determinant | proprietà |
determinant:Number
[sola lettura] Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Un numero che determina se una matrice è invertibile.
Un oggetto Matrix3D deve essere invertibile. Potete usare la proprietà determinant
per verificare se l'oggetto Matrix3D è invertibile. Se determinant è pari a zero, non esiste un inverso della matrice. Se ad esempio un'intera riga o colonna di una matrice è pari a zero o se due righe o colonne sono uguali, determinant è pari a zero. La proprietà determinant viene utilizzata anche per risolvere una serie di equazioni.
Solo una matrice quadrata, come la classe Matrix3D, ha una proprietà determinant.
Implementazione
public function get determinant():Number
Elementi API correlati
position | proprietà |
position:Vector3D
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Un oggetto Vector3D che include la posizione, le coordinate tridimensionali (x,y,z) di un oggetto di visualizzazione all'interno di un fotogramma di riferimento della trasformazione. La proprietà position
consente di accedere immediatamente al vettore di conversione della matrice dell'oggetto di visualizzazione, senza la necessità di scomporre e ricomporre la matrice.
Con la proprietà position
, potete ottenere e impostare gli elementi di conversione della matrice di trasformazione.
Implementazione
public function get position():Vector3D
public function set position(value:Vector3D):void
Elementi API correlati
rawData | proprietà |
rawData:Vector.<Number>
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Un vettore di 16 numeri, in cui ogni gruppo di quattro elementi è una colonna di una matrice 4x4.
Se la proprietà rawData
è impostata su una matrice non invertibile, viene generata un'eccezione. L'oggetto Matrix3D deve essere invertibile. Se è necessaria una matrice non invertibile, create una sottoclasse dell'oggetto Matrix3D.
Implementazione
public function get rawData():Vector.<Number>
public function set rawData(value:Vector.<Number>):void
Elementi API correlati
Matrix3D | () | Funzione di costruzione |
public function Matrix3D(v:Vector.<Number> = null)
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Crea un oggetto Matrix3D. Gli oggetti Matrix3D possono essere inizializzati con un vettore di 16 numeri, in cui ogni gruppo di quattro elementi è una colonna. Dopo avere creato un oggetto Matrix3D, potete accedere agli elementi della relativa matrice con la proprietà rawData
.
Se non viene definito un parametro, la funzione di costruzione genera un oggetto Matrix3D di identità o unità. Nella notazione di matrici, una matrice di identità ha un valore uno per tutti gli elementi nella posizione diagonale principale e un valore zero per tutti gli altri elementi. Il valore della proprietà rawData
di una matrice di identità è: 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
. Il valore della posizione o conversione della matrice di identità è Vector3D(0,0,0)
, l'impostazione della rotazione è Vector3D(0,0,0)
il valore di scala è Vector3D(1,1,1)
.
v:Vector.<Number> (default = null ) — Un vettore di 16 numeri, in cui ogni gruppo di quattro elementi è una colonna di una matrice 4x4.
|
Elementi API correlati
append | () | metodo |
public function append(lhs:Matrix3D):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Aggiunge la matrice moltiplicando un altro oggetto Matrix3D per l'oggetto Matrix3D corrente. Il risultato combina entrambe le trasformazioni mediante matrice. Potete moltiplicare un oggetto Matrix3D per molte matrici. L'oggetto Matrix3D finale contiene il risultato di tutte le trasformazioni.
La moltiplicazione di matrici è diversa dalla somma di matrici. La moltiplicazione di matrici non è commutativa. In altre parole, A per B non è uguale a B per A. Con il metodo append()
, la moltiplicazione viene eseguita dal lato sinistro; ciò significa che l'oggetto Matrix3D lhs
si trova sul lato sinistro dell'operatore di moltiplicazione.
thisMatrix = lhs * thisMatrix;
La prima volta che si chiama il metodo append()
, viene effettuata una modifica relativa allo spazio principale. Le chiamate successive sono relative al fotogramma di riferimento dell'oggetto Matrix3D aggiunto.
Il metodo append()
sostituisce la matrice corrente con quella aggiunta. Se desiderate aggiungere due matrici senza modificare la matrice corrente, copiate la matrice corrente con il metodo clone()
, quindi applicate il metodo append()
alla copia.
Parametri
lhs:Matrix3D — Una matrice sinistrorsa che viene moltiplicata per l'oggetto Matrix3D corrente.
|
Elementi API correlati
appendRotation | () | metodo |
public function appendRotation(degrees:Number, axis:Vector3D, pivotPoint:Vector3D = null):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Aggiunge una rotazione incrementale a un oggetto Matrix3D. Quando l'oggetto Matrix3D viene applicato a un oggetto di visualizzazione, la matrice esegue la rotazione dopo altre trasformazioni nell'oggetto Matrix3D.
La rotazione dell'oggetto di visualizzazione è definita da un asse, un grado incrementale di rotazione intorno all'asse e da un punto "pivot" opzionale per il centro della rotazione dell'oggetto. L'asse può essere una qualsiasi direzione generale. Gli assi comuni sono X_AXIS
(Vector3D(1,0,0)
), Y_AXIS
(Vector3D(0,1,0)
) e Z_AXIS
(Vector3D(0,0,1)
). Secondo la terminologia utilizzata in aviazione, la rotazione intorno all'asse y è detta imbardata. La rotazione intorno all'asse x è detta beccheggio. La rotazione intorno all'asse z è detta rollio.
L'ordine di trasformazione è significativo. Una rotazione seguita da una trasformazione di conversione produce un effetto diverso rispetto a una conversione seguita da una trasformazione di rotazione.
L'effetto di rotazione non è assoluto. È relativo alla posizione e all'orientamento correnti. Per effettuare modifiche assolute alla matrice di trasformazione, utilizzate il metodo recompose()
. Il metodo appendRotation()
è diverso anche dalla proprietà di rotazione dell'asse dell'oggetto di visualizzazione, ad esempio la proprietà rotationX
. La proprietà di rotazione viene sempre eseguita prima di qualsiasi conversione, mentre il metodo appendRotation()
viene eseguito in relazione agli elementi già presenti nella matrice. Per accertarsi di ottenere un effetto simile alla proprietà di rotazione dell'asse dell'oggetto di visualizzazione, utilizzate il metodo prependRotation()
, che esegue la rotazione prima di altre trasformazioni nella matrice.
Quando la trasformazione del metodo appendRotation()
viene applicata a un oggetto Matrix3D di un oggetto di visualizzazione, i valori della proprietà di rotazione dell'oggetto di visualizzazione memorizzati nella cache vengono invalidati.
Un modo per ottenere che un oggetto di visualizzazione ruoti intorno a un punto specifico relativo alla sua posizione, consiste nell'impostare la conversione dell'oggetto sul punto specificato, ruotare l'oggetto utilizzando il metodo appendRotation()
e riconvertire l'oggetto nella posizione originale. Nell'esempio seguente, l'oggetto di visualizzazione tridimensionale myObject
esegue una rotazione dell'asse y intorno alla coordinata (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);
Parametri
degrees:Number — Il grado di rotazione.
| |
axis:Vector3D — L'asse o la direzione di rotazione. Gli assi abituali sono X_AXIS (Vector3D(1,0,0) ), Y_AXIS (Vector3D(0,1,0) ) e Z_AXIS (Vector3D(0,0,1) ). Questo vettore deve avere una lunghezza pari a 1.
| |
pivotPoint:Vector3D (default = null ) — Un punto che determina il centro della rotazione di un oggetto. Il punto "pivot" predefinito per un oggetto è il suo punto di registrazione.
|
Elementi API correlati
appendScale | () | metodo |
public function appendScale(xScale:Number, yScale:Number, zScale:Number):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Aggiunge una modifica in scala incrementale lungo gli assi x, y e z a un oggetto Matrix3D. Quando l'oggetto Matrix3D viene applicato a un oggetto di visualizzazione, la matrice esegue le modifiche in scala dopo altre trasformazioni nell'oggetto Matrix3D. Il fattore di scala predefinito è (1.0, 1.0, 1.0).
Il ridimensionamento in scala è definito come un insieme di tre modifiche incrementali lungo gli assi (x,y,z). Potete moltiplicare ogni asse con un numero diverso. Quando le modifiche in scala vengono applicate a un oggetto di visualizzazione, le dimensioni dell'oggetto aumentano o diminuiscono. Impostando ad esempio gli assi x, y e z su due, si raddoppiano le dimensioni dell'oggetto, mentre impostando gli assi su 0.5
si dimezzano le dimensioni. Per accertarsi che la trasformazione in scala abbia effetto solo su un asse specifico, impostate gli altri parametri su zero. Un parametro pari a uno significa nessuna modifica in scala lungo l'asse specifico.
Il metodo appendScale()
può essere utilizzato per il ridimensionamento oltre che per la gestione delle distorsioni, ad esempio l'allungamento o la contrazione di un oggetto di visualizzazione, oppure per l'ingrandimento o la riduzione di una posizione. Le trasformazioni in scala vengono eseguite automaticamente durante la rotazione e conversione dell'oggetto di visualizzazione.
L'ordine di trasformazione è significativo. Un ridimensionamento seguito da una trasformazione di conversione produce un effetto diverso rispetto a una conversione seguita da una trasformazione di ridimensionamento.
Parametri
xScale:Number — Un moltiplicatore utilizzato per modificare in scala l'oggetto lungo l'asse x.
| |
yScale:Number — Un moltiplicatore utilizzato per modificare in scala l'oggetto lungo l'asse y.
| |
zScale:Number — Un moltiplicatore utilizzato per modificare in scala l'oggetto lungo l'asse z.
|
Elementi API correlati
appendTranslation | () | metodo |
public function appendTranslation(x:Number, y:Number, z:Number):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Aggiunge una conversione incrementale, un riposizionamento lungo gli assi x, y e z, a un oggetto Matrix3D. Quando l'oggetto Matrix3D viene applicato a un oggetto di visualizzazione, la matrice esegue le modifiche di conversione dopo altre trasformazioni nell'oggetto Matrix3D.
La conversione è definita come un insieme di tre modifiche incrementali lungo gli assi (x,y,z). Quando la trasformazione viene applicata a un oggetto di visualizzazione, questo viene spostato dalla posizione corrente lungo gli assi x, y e z secondo quanto specificato dai parametri. Per accertarsi che la conversione abbia effetto solo su un asse specifico, impostate gli altri parametri su zero. Un parametro pari a zero significa nessuna modifica lungo l'asse specifico.
Le modifiche di conversione non sono assolute. Sono relative alla posizione e all'orientamento correnti della matrice. Per effettuare modifiche assolute alla matrice di trasformazione, utilizzate il metodo recompose()
. Anche l'ordine di trasformazione è significativo. Una conversione seguita da una trasformazione di rotazione produce un effetto diverso rispetto a una rotazione seguita da una conversione.
Parametri
x:Number — Una conversione incrementale lungo l'asse x.
| |
y:Number — Una conversione incrementale lungo l'asse y.
| |
z:Number — Una conversione incrementale lungo l'asse z.
|
Elementi API correlati
clone | () | metodo |
public function clone():Matrix3D
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Restituisce un nuovo oggetto Matrix3D che è la copia esatta dell'oggetto Matrix3D corrente.
RestituisceMatrix3D — Un nuovo oggetto Matrix3D che è la copia esatta dell'oggetto Matrix3D corrente.
|
copyColumnFrom | () | metodo |
public function copyColumnFrom(column:uint, vector3D:Vector3D):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Copia un oggetto Vector3D in una colonna specifica dell'oggetto Matrix3D chiamante.
Parametri
column:uint — La colonna di destinazione della copia.
| |
vector3D:Vector3D — L'oggetto Vector3D da cui copiare i dati.
|
copyColumnTo | () | metodo |
public function copyColumnTo(column:uint, vector3D:Vector3D):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Copia la colonna specifica dell'oggetto Matrix3D chiamante nell'oggetto Vector3D.
Parametri
column:uint — La colonna da cui copiare i dati.
| |
vector3D:Vector3D — L'oggetto Vector3D di destinazione della copia.
|
copyFrom | () | metodo |
public function copyFrom(sourceMatrix3D:Matrix3D):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Copia tutti i dati di matrice dall'oggetto Matrix3D di origine all'oggetto Matrix3D chiamante.
Parametri
sourceMatrix3D:Matrix3D — L'oggetto Matrix3D da cui copiare i dati.
|
copyRawDataFrom | () | metodo |
public function copyRawDataFrom(vector:Vector.<Number>, index:uint = 0, transpose:Boolean = false):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Copia tutti i dati di vettore dall'oggetto vettore di origine all'oggetto Matrix3D chiamante. Il parametro opzionale index permette di selezionare qualunque slot iniziale nel vettore.
Parametri
vector:Vector.<Number> — L'oggetto vettore da cui copiare i dati.
| |
index:uint (default = 0 )
| |
transpose:Boolean (default = false )
|
copyRawDataTo | () | metodo |
public function copyRawDataTo(vector:Vector.<Number>, index:uint = 0, transpose:Boolean = false):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Copia tutti i dati di matrice dall'oggetto Matrix3D chiamante al vettore fornito. Il parametro opzionale index permette di selezionare qualunque slot iniziale di destinazione nel vettore.
Parametri
vector:Vector.<Number> — L'oggetto vettore in cui copiare i dati.
| |
index:uint (default = 0 )
| |
transpose:Boolean (default = false )
|
copyRowFrom | () | metodo |
public function copyRowFrom(row:uint, vector3D:Vector3D):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Copia un oggetto Vector3D in una riga specifica dell'oggetto Matrix3D chiamante.
Parametri
row:uint — La riga in cui copiare i dati.
| |
vector3D:Vector3D — L'oggetto Vector3D da cui copiare i dati.
|
copyRowTo | () | metodo |
public function copyRowTo(row:uint, vector3D:Vector3D):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11, AIR 3.0, Flash Lite 4 |
Copia la riga specifica dell'oggetto Matrix3D chiamante nell'oggetto Vector3D.
Parametri
row:uint — La riga da cui copiare i dati.
| |
vector3D:Vector3D — L'oggetto Vector3D in cui copiare i dati.
|
copyToMatrix3D | () | metodo |
decompose | () | metodo |
public function decompose(orientationStyle:String = "eulerAngles"):Vector.<Vector3D>
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Restituisce le impostazioni di conversione, rotazione e ridimensionamento della matrice di trasformazione come vettore di tre oggetti Vector3D. Il primo oggetto Vector3D include gli elementi di conversione. Il secondo oggetto Vector3D include gli elementi di rotazione. Il terzo oggetto Vector3D include gli elementi di scala.
Alcuni metodi Matrix3D, ad esempio il metodo interpolateTo()
, scompone e ricompone automaticamente la matrice per eseguire la trasformazione.
Per modificare la trasformazione della matrice con un fotogramma di riferimento principale assoluto, recuperate le impostazioni con il metodo decompose()
e apportate le modifiche appropriate. Potete quindi impostare l'oggetto Matrix3D sulla trasformazione modificata utilizzando il metodo recompose()
.
Il parametro del metodo decompose()
specifica lo stile di orientamento destinato ad essere utilizzato per la trasformazione. L'orientamento predefinito è eulerAngles
, che definisce l'orientamento con tre angoli di rotazione distinti per ogni asse. Le rotazioni si verificano consecutivamente e non modificano l'asse l'uno dall'altro. Le proprietà di rotazione degli assi dell'oggetto eseguono la trasformazione dello stile di orientamento degli angoli di Eulero. Le altre opzioni dello stile di orientamento sono axisAngle
e quaternion
. L'orientamento dell'angolo assiale utilizza una combinazione di un asse e un angolo per determinare l'orientamento. L'asse intorno al quale viene ruotato l'oggetto è un vettore unitario che rappresenta una direzione. L'angolo rappresenta la grandezza della rotazione intorno al vettore. La direzione determina inoltre il punto verso sui è rivolto un oggetto di visualizzazione, mentre l'angolo determina quale lato è in alto. I metodi appendRotation()
e prependRotation()
utilizzano l'orientamento dell'angolo assiale. L'orientamento del quaternione utilizza numeri complessi e il quarto elemento di un vettore. I tre assi di rotazione (x,y,z) e un angolo di rotazione (w) rappresentano l'orientamento. Il metodo interpolate()
utilizza quaternioni.
Parametri
orientationStyle:String (default = "eulerAngles ") — Un parametro opzionale che determina lo stile di orientamento utilizzato per la trasformazione della matrice. I tre tipi di stili di orientamento sono eulerAngles (costante EULER_ANGLES ), axisAngle (costante AXIS_ANGLE ), e quaternion (costante QUATERNION ). Per ulteriori informazioni sul diverso stile di orientamento, fate riferimento alla classe geom.Orientation3D .
|
Vector.<Vector3D> — Un vettore di tre oggetti Vector3D, ognuno contenente rispettivamente le impostazioni di conversione, rotazione e ridimensionamento.
|
Elementi API correlati
Esempio ( Come utilizzare questo esempio )
decompose()
e recompose()
per fare in modo che un'ellisse si allunghi orizzontalmente mentre si sposta verso il punto di fuga. Il primo oggetto Vector3D restituito dal metodo decompose()
include le coordinate di conversione. Il terzo oggetto Vector3D include le impostazioni di scala. Il metodo incrementBy()
dell'oggetto Vector3D aumenta le impostazioni di ridimensionamento e assolute della matrice.
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 | () | metodo |
public function deltaTransformVector(v:Vector3D):Vector3D
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Utilizza la matrice di trasformazione senza gli elementi di conversione per trasformare un oggetto Vector3D da una coordinata dello spazio a un'altra. L'oggetto Vector3D restituito include le nuove coordinate dopo che sono state applicate le trasformazioni di rotazione e ridimensionamento. Se il metodo deltaTransformVector()
applica una matrice che contiene solo una trasformazione di conversione, l'oggetto Vector3D restituito coincide con l'oggetto Vector3D originale.
Potete utilizzare il metodo deltaTransformVector()
per fare in modo che un oggetto di visualizzazione in uno spazio di coordinate risponda alla trasformazione di rotazione di un secondo oggetto di visualizzazione. L'oggetto non copia la rotazione; cambia solo al propria posizione per riflettere le modifiche nella rotazione. Per utilizzare ad esempio l'API display.Graphics
per disegnare un oggetto di visualizzazione tridimensionale rotante, dovete mappare le coordinate di rotazione dell'oggetto a un punto bidimensionale. Innanzitutto, recuperate le coordinate tridimensionali dell'oggetto dopo ogni rotazione utilizzando il metodo deltaTransformVector()
. Applicate quindi il metodo local3DToGlobal()
dell'oggetto di visualizzazione per convertire le coordinate tridimensionali in punti bidimensionali. Potete quindi utilizzare i punti bidimensionali per disegnare l'oggetto tridimensionale rotante.
Nota: questo metodo imposta automaticamente il componente w del Vector3D passato su 0.0.
Parametri
v:Vector3D — Un oggetto Vector3D contenente le coordinate da trasformare.
|
Vector3D — Un oggetto Vector3D con le coordinate trasformate.
|
Elementi API correlati
identity | () | metodo |
public function identity():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Converte la matrice corrente in una matrice di identità o di unità. Una matrice di identità ha un valore uno per gli elementi sulla diagonale principale e un valore zero per tutti gli altri elementi. Il risultato è una matrice in cui il valore rawData
è 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
e la rotazione è impostata su Vector3D(0,0,0)
, la posizione o la conversione è impostata su Vector3D(0,0,0)
e la scala su Vector3D(1,1,1)
. Di seguito è riportata una rappresentazione di una matrice di identità.
Un oggetto trasformato applicando una matrice di identità non esegue alcuna trasformazione. In altre parole, se una matrice viene moltiplicata per una matrice di identità, il risultato è una matrice uguale (identica) alla matrice originale.
interpolate | () | metodo |
public static function interpolate(thisMat:Matrix3D, toMat:Matrix3D, percent:Number):Matrix3D
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Esegue l'interpolazione delle trasformazioni di traslazione, rotazione e scala di una matrice verso quelle della matrice di destinazione.
Il metodo interpolate()
evita alcuni dei risultati indesiderati che possono verificarsi quando si utilizzano metodi quali le proprietà di rotazione degli assi dell'oggetto di visualizzazione. Il metodo interpolate()
invalida il valore memorizzato nella cache della proprietà di rotazione dell'oggetto di visualizzazione e converte gli elementi di orientamento della matrice dell'oggetto di visualizzazione in un quaternione prima dell'interpolazione. Questo metodo assicura il percorso di rotazione più breve ed efficiente. Genera inoltre una rotazione omogenea e senza "gimbal lock". Un "gimbal lock" (accavallamento degli assi) può verificarsi quando si utilizzano gli angoli di Eulero, dove ogni asse viene gestita indipendentemente. Durante la rotazione intorno a due o più assi, questi possono allinearsi provocando risultati imprevisti. La rotazione basata su quaternione evita il "gimbal lock".
Le chiamate consecutive al metodo interpolate()
possono produrre l'effetto in cui un oggetto di visualizzazione inizia ad avvicinarsi a un altro oggetto di visualizzazione prima rapidamente e poi lentamente. Se ad esempio impostate il parametro thisMat
sull'oggetto Matrix3D restituito, il parametro toMat
sull'oggetto Matrix3D associato all'oggetto di visualizzazione target e il parametro percent
su 0.1
, l'oggetto di visualizzazione si sposta del 10% verso l'oggetto target. Alle chiamate successive o nei fotogrammi successivi, l'oggetto si sposta il 10% del rimanente 90%, quindi il 10% della distanza rimanente e continua finché non raggiunge il target.
Parametri
thisMat:Matrix3D — L'oggetto Matrix3D da interpolare.
| |
toMat:Matrix3D — L'oggetto Matrix3D target.
| |
percent:Number — Un valore tra 0 e 1 che determina la percentuale di interpolazione dell'oggetto Matrix3D thisMat verso l'oggetto Matrix3D target.
|
Matrix3D — Un oggetto Matrix3D con elementi che inseriscono i valori della matrice tra la matrice originale e la matrice target. Quando la matrice restituita viene applicata all'oggetto di visualizzazione this , l'oggetto si sposta più vicino all'oggetto target in base alla percentuale specificata.
|
Elementi API correlati
interpolateTo | () | metodo |
public function interpolateTo(toMat:Matrix3D, percent:Number):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Esegue l'interpolazione di questa matrice verso le trasformazioni di traslazione, rotazione e scala della matrice di destinazione.
Il metodo interpolateTo()
evita i risultati indesiderati che possono verificarsi quando si utilizzano metodi quali le proprietà di rotazione degli assi dell'oggetto di visualizzazione. Il metodo interpolateTo()
invalida il valore memorizzato nella cache della proprietà di rotazione dell'oggetto di visualizzazione e converte gli elementi di orientamento della matrice dell'oggetto di visualizzazione in un quaternione prima dell'interpolazione. Questo metodo assicura il percorso di rotazione più breve ed efficiente. Genera inoltre una rotazione omogenea e senza "gimbal lock". Un "gimbal lock" (accavallamento degli assi) può verificarsi quando si utilizzano gli angoli di Eulero, dove ogni asse viene gestita indipendentemente. Durante la rotazione intorno a due o più assi, questi possono allinearsi provocando risultati imprevisti. La rotazione basata su quaternione evita il "gimbal lock".
Nota: in caso di interpolazione, il valore di ridimensionamento della matrice viene ripristinato e la matrice viene normalizzata.
Le chiamate consecutive al metodo interpolateTo()
possono produrre l'effetto in cui un oggetto di visualizzazione inizia ad avvicinarsi a un altro oggetto di visualizzazione prima rapidamente e poi lentamente. Se ad esempio il parametro percent è impostato su 0.1
, l'oggetto di visualizzazione si sposta del 10% verso l'oggetto target specificato dal parametro toMat
. Alle chiamate successive o nei fotogrammi successivi, l'oggetto si sposta il 10% del rimanente 90%, quindi il 10% della distanza rimanente e continua finché non raggiunge il target.
Parametri
toMat:Matrix3D — L'oggetto Matrix3D target.
| |
percent:Number — Un valore tra 0 e 1 che determina la posizione dell'oggetto di visualizzazione relativa al target. Più il valore si avvicina a 1.0 , più l'oggetto di visualizzazione è vicino alla sua posizione corrente. Più il valore si avvicina a 0 , più l'oggetto di visualizzazione è vicino al target.
|
Elementi API correlati
Esempio ( Come utilizzare questo esempio )
ellipse2
, un oggetto di visualizzazione tridimensionale, si sposta verso ellipse1
, un altro oggetto di visualizzazione tridimensionale. ellipse2
segue ellipse1
tentando di raggiungerlo. Se ellipse1
non ruota intorno al proprio asse y, ellipse2
raggiunge e si sovrappone a ellipse1
. Le due ellissi vengono disegnate allo stesso modo ma inserite in posizioni diverse nello spazio dell'ambiente tridimensionale.
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 | () | metodo |
public function invert():Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Inverte la matrice corrente. Una matrice invertita ha le stesse dimensioni di quella originale, ma esegue la trasformazione opposta alla matrice originale. Se ad esempio la matrice originale fa in modo che un oggetto ruoti intorno all'asse x in una direzione, l'inverso della matrice imprime all'oggetto una rotazione intorno all'asse nella direzione opposta. Se si applica una matrice invertita a un oggetto, viene annullata la trasformazione eseguita dalla matrice originale. Se una matrice viene moltiplicata per la sua matrice inversa, il risultato è una matrice di identità.
Un inverso di una matrice può essere utilizzato per dividere una matrice per un'altra. Per dividere la matrice A per la matrice B, moltiplicate la matrice A per l'inverso della matrice B. La matrice inversa può essere utilizzata con lo spazio di una videocamera. Quando la videocamera si sposta nello spazio dell'ambiente, l'oggetto nell'ambiente deve spostarsi nella direzione opposta per consentire la trasformazione dalla visualizzazione dell'ambiente allo spazio della videocamera o di visualizzazione. Se ad esempio la videocamera si avvicina, gli oggetti diventano più grandi. In altre parole, se la videocamera si sposta in basso lungo l'asse z dell'ambiente, gli oggetti si spostano in alto lungo l'asse z dell'ambiente.
Il metodo invert()
sostituisce la matrice corrente con una invertita. Se desiderate invertire una matrice senza modificare la matrice corrente, copiate per prima cosa la matrice corrente con il metodo clone()
, quindi applicate il metodo invert()
alla copia.
L'oggetto Matrix3D deve essere invertibile.
RestituisceBoolean — Restituisce true se la matrice è stata invertita correttamente.
|
Elementi API correlati
pointAt | () | metodo |
public function pointAt(pos:Vector3D, at:Vector3D = null, up:Vector3D = null):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Ruota l'oggetto di visualizzazione in modo che sia rivolto verso una posizione specificata. Questo metodo consente la modifica in posizione dell'orientamento. Il vettore della direzione avanti dell'oggetto di visualizzazione (l'oggetto Vector3D at
) punta alla posizione relativa all'ambiente specificata. La direzione su dell'oggetto di visualizzazione viene specificata con l'oggetto Vector3D up
.
Il metodo pointAt()
invalida il valore memorizzato nella cache della proprietà di rotazione dell'oggetto di visualizzazione. Il metodo scompone la matrice dell'oggetto di visualizzazione e modifica gli elementi di rotazione in modo che l'oggetto ruoti nella posizione specificata. Ricompone (aggiorna) quindi la matrice dell'oggetto di visualizzazione, che esegue la trasformazione. Se l'oggetto punta a un target in movimento, ad esempio alla posizione di un oggetto in movimento, a ogni successiva chiamata il metodo farà ruotare l'oggetto verso il target in movimento.
Nota: se si usa il metodo Matrix3D.pointAt()
senza impostare i parametri opzionali, un oggetto target non punta per impostazione predefinita a una posizione relativa al mondo. Dovete impostare i valori at
sull'asse -y (0,-1,0) e up
sull'asse -z (0,0,-1).
Parametri
pos:Vector3D — La posizione relativa all'ambiente dell'oggetto target. Con "relativa all'ambiente" viene definita la trasformazione dell'oggetto in relazione allo spazio e alle coordinate dell'ambiente in cui sono posizionati tutti gli oggetti.
| |
at:Vector3D (default = null ) — Il vettore relativo all'oggetto che definisce la direzione verso cui punta l'oggetto. Con "relativo all'oggetto" viene definita la trasformazione dell'oggetto in relazione allo spazio dell'oggetto, il fotogramma di riferimento stesso dell'oggetto e il sistema di coordinate. Il valore predefinito è l'asse +y (0,1,0).
| |
up:Vector3D (default = null ) — Il vettore relativo all'oggetto che definisce la direzione "su" per l'oggetto di visualizzazione. Se disegnate l'oggetto rivolto dall'alto verso il basso, l'asse +z rappresenta il suo vettore "su". Con "relativo all'oggetto" viene definita la trasformazione dell'oggetto in relazione allo spazio dell'oggetto, il fotogramma di riferimento stesso dell'oggetto e il sistema di coordinate. Il valore predefinito è l'asse +z (0,0,1).
|
Elementi API correlati
Esempio ( Come utilizzare questo esempio )
pointAt()
per vedere l'impatto sul movimento del triangolo.
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 | () | metodo |
public function prepend(rhs:Matrix3D):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Anteporre una matrice moltiplicando l'oggetto Matrix3D corrente per un altro oggetto Matrix3D. Il risultato combina entrambe le trasformazioni mediante matrice.
La moltiplicazione di matrici è diversa dalla somma di matrici. La moltiplicazione di matrici non è commutativa. In altre parole, A per B non è uguale a B per A. Con il metodo prepend()
, la moltiplicazione viene eseguita dal lato destro; ciò significa che l'oggetto Matrix3D rhs
si trova sul lato destro dell'operatore di moltiplicazione.
thisMatrix = thisMatrix * rhs
Le modifiche apportate mediante il metodo prepend()
sono relative allo spazio dell'oggetto. In altre parole, sono sempre relative al fotogramma iniziale di riferimento dell'oggetto.
Il metodo prepend()
sostituisce la matrice corrente con quella anteposta. Se desiderate anteporre due matrici senza modificare la matrice corrente, copiate per prima cosa la matrice corrente con il metodo clone()
, quindi applicate il metodo prepend()
alla copia.
Parametri
rhs:Matrix3D — Un lato destro della matrice per cui viene moltiplicato l'oggetto Matrix3D corrente.
|
Elementi API correlati
prependRotation | () | metodo |
public function prependRotation(degrees:Number, axis:Vector3D, pivotPoint:Vector3D = null):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Antepone una rotazione incrementale a un oggetto Matrix3D. Quando l'oggetto Matrix3D viene applicato a un oggetto di visualizzazione, la matrice esegue la rotazione prima di altre trasformazioni nell'oggetto Matrix3D.
La rotazione dell'oggetto di visualizzazione è definita da un asse, un grado incrementale di rotazione intorno all'asse e da un punto "pivot" opzionale per il centro della rotazione dell'oggetto. L'asse può essere una qualsiasi direzione generale. Gli assi comuni sono X_AXIS
(Vector3D(1,0,0)
), Y_AXIS
(Vector3D(0,1,0)
) e Z_AXIS
(Vector3D(0,0,1)
). Secondo la terminologia utilizzata in aviazione, la rotazione intorno all'asse y è detta imbardata. La rotazione intorno all'asse x è detta beccheggio. La rotazione intorno all'asse z è detta rollio.
L'ordine di trasformazione è significativo. Una rotazione seguita da una trasformazione di conversione produce un effetto diverso rispetto a una conversione seguita da una rotazione.
L'effetto di rotazione non è assoluto. L'effetto è relativo all'oggetto, relativo al fotogramma di riferimento della posizione e dell'orientamento originali. Per effettuare modifiche assolute alla trasformazione, utilizzate il metodo recompose()
.
Quando la trasformazione del metodo prependRotation()
viene applicata a un oggetto Matrix3D di un oggetto di visualizzazione, i valori della proprietà di rotazione dell'oggetto di visualizzazione memorizzati nella cache vengono invalidati.
Un modo per ottenere che un oggetto di visualizzazione ruoti intorno a un punto specifico relativo alla sua posizione, consiste nell'impostare la conversione dell'oggetto sul punto specificato, ruotare l'oggetto utilizzando il metodo appendRotation()
e riconvertire l'oggetto nella posizione originale. Nell'esempio seguente, l'oggetto di visualizzazione tridimensionale myObject
esegue una rotazione dell'asse y intorno alla coordinata (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);
Parametri
degrees:Number — Il grado di rotazione.
| |
axis:Vector3D — L'asse o la direzione di rotazione. Gli assi abituali sono X_AXIS (Vector3D(1,0,0) ), Y_AXIS (Vector3D(0,1,0) ) e Z_AXIS (Vector3D(0,0,1) ). Questo vettore deve avere una lunghezza pari a 1.
| |
pivotPoint:Vector3D (default = null ) — Un punto che determina il centro della rotazione. Il punto "pivot" predefinito per un oggetto è il suo punto di registrazione.
|
Elementi API correlati
Esempio ( Come utilizzare questo esempio )
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 | () | metodo |
public function prependScale(xScale:Number, yScale:Number, zScale:Number):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Antepone una modifica in scala incrementale lungo gli assi x, y e z a un oggetto Matrix3D. Quando l'oggetto Matrix3D viene applicato a un oggetto di visualizzazione, la matrice esegue le modifiche in scala prima delle altre trasformazioni nell'oggetto Matrix3D. Le modifiche sono relative all'oggetto, relative al fotogramma di riferimento della posizione e dell'orientamento originali. Il fattore di scala predefinito è (1.0, 1.0, 1.0).
Il ridimensionamento in scala è definito come un insieme di tre modifiche incrementali lungo gli assi (x,y,z). Potete moltiplicare ogni asse con un numero diverso. Quando le modifiche in scala vengono applicate a un oggetto di visualizzazione, le dimensioni dell'oggetto aumentano o diminuiscono. Impostando ad esempio gli assi x, y e z su due, si raddoppiano le dimensioni dell'oggetto, mentre impostando gli assi su 0.5
si dimezzano le dimensioni. Per accertarsi che la trasformazione in scala abbia effetto solo su un asse specifico, impostate gli altri parametri su zero. Un parametro pari a uno significa nessuna modifica in scala lungo l'asse specifico.
Il metodo prependScale()
può essere utilizzato per il ridimensionamento oltre che per la gestione delle distorsioni, ad esempio l'allungamento o la contrazione di un oggetto di visualizzazione. Può essere utilizzato anche per l'ingrandimento o la riduzione di una posizione. Le trasformazioni in scala vengono eseguite automaticamente durante la rotazione e conversione dell'oggetto di visualizzazione.
L'ordine di trasformazione è significativo. Un ridimensionamento seguito da una trasformazione di conversione produce un effetto diverso rispetto a una conversione seguita da una trasformazione di ridimensionamento.
Parametri
xScale:Number — Un moltiplicatore utilizzato per modificare in scala l'oggetto lungo l'asse x.
| |
yScale:Number — Un moltiplicatore utilizzato per modificare in scala l'oggetto lungo l'asse y.
| |
zScale:Number — Un moltiplicatore utilizzato per modificare in scala l'oggetto lungo l'asse z.
|
Elementi API correlati
prependTranslation | () | metodo |
public function prependTranslation(x:Number, y:Number, z:Number):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Antepone una conversione incrementale, un riposizionamento lungo gli assi x, y e z, a un oggetto Matrix3D. Quando l'oggetto Matrix3D viene applicato a un oggetto di visualizzazione, la matrice esegue le modifiche di conversione prima delle altre trasformazioni nell'oggetto Matrix3D.
La conversione specifica la distanza di spostamento dell'oggetto di visualizzazione dalla posizione corrente lungo gli assi x, y e z. Il metodo prependTranslation()
imposta la conversione come un insieme di tre modifiche incrementali lungo gli assi (x,y,z). Per fare in modo che una conversione modifichi solo un asse specifico, impostate gli altri parametri su zero. Un parametro pari a zero significa nessuna modifica lungo l'asse specifico.
Le modifiche di conversione non sono assolute. L'effetto è relativo all'oggetto, relativo al fotogramma di riferimento della posizione e dell'orientamento originali. Per effettuare modifiche assolute alla matrice di trasformazione, utilizzate il metodo recompose()
. Anche l'ordine di trasformazione è significativo. Una conversione seguita da una trasformazione di rotazione produce un effetto diverso rispetto a una rotazione seguita da una trasformazione di conversione. Quando utilizzate prependTranslation()
, l'oggetto di visualizzazione continua a spostarsi nella direzione verso cui è rivolto, indipendentemente da altre trasformazioni. Se ad esempio un oggetto di visualizzazione è rivolto verso un asse x positivo, continua a spostarsi nella direzione specificata dal metodo prependTranslation()
, indipendentemente dal modo in cui l'oggetto è stato ruotato. Per fare in modo che le modifiche di trasformazione vengano eseguite dopo altre trasformazioni, utilizzate il metodo appendTranslation()
.
Parametri
x:Number — Una conversione incrementale lungo l'asse x.
| |
y:Number — Una conversione incrementale lungo l'asse y.
| |
z:Number — Una conversione incrementale lungo l'asse z.
|
Elementi API correlati
Esempio ( Come utilizzare questo esempio )
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 | () | metodo |
public function recompose(components:Vector.<Vector3D>, orientationStyle:String = "eulerAngles"):Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Configura le impostazioni di conversione, rotazione e ridimensionamento della matrice di trasformazione. A differenza delle modifiche incrementali effettuate dalle proprietà di rotazione dell'oggetto di visualizzazione o dai metodi di rotazione dell'oggetto Matrix3D, le modifiche apportate dal metodo recompose()
sono assolute. Il metodo recompose()
sovrascrive la trasformazione della matrice.
Per modificare la trasformazione della matrice con un fotogramma di riferimento principale assoluto, recuperate le impostazioni con il metodo decompose()
e apportate le modifiche appropriate. Potete quindi impostare l'oggetto Matrix3D sulla trasformazione modificata utilizzando il metodo recompose()
.
Il parametro del metodo recompose()
specifica lo stile di orientamento utilizzato per la trasformazione. L'orientamento predefinito è eulerAngles
, che definisce l'orientamento con tre angoli di rotazione distinti per ogni asse. Le rotazioni si verificano consecutivamente e non modificano l'asse l'uno dall'altro. Le proprietà di rotazione degli assi dell'oggetto eseguono la trasformazione dello stile di orientamento degli angoli di Eulero. Le altre opzioni dello stile di orientamento sono axisAngle
e quaternion
. L'orientamento dell'angolo assiale utilizza la combinazione di un asse e un angolo per determinare l'orientamento. L'asse intorno al quale viene ruotato l'oggetto è un vettore unitario che rappresenta una direzione. L'angolo rappresenta la grandezza della rotazione intorno al vettore. La direzione determina inoltre il punto verso sui è rivolto un oggetto di visualizzazione, mentre l'angolo determina quale lato è in alto. I metodi appendRotation()
e prependRotation()
utilizzano l'orientamento dell'angolo assiale. L'orientamento del quaternione utilizza numeri complessi e il quarto elemento di un vettore. Un orientamento è rappresentato dai tre assi di rotazione (x,y,z) e un angolo di rotazione (w). Il metodo interpolate()
utilizza quaternioni.
Parametri
components:Vector.<Vector3D> — Un vettore di tre oggetti Vector3D che sostituiscono gli elementi di conversione, rotazione e ridimensionamento dell'oggetto Matrix3D.
| |
orientationStyle:String (default = "eulerAngles ") — Un parametro opzionale che determina lo stile di orientamento utilizzato per la trasformazione della matrice. I tre tipi di stili orientamento sono eulerAngles (costante EULER_ANGLES ), axisAngle (costante AXIS_ANGLE ), e quaternion (costante QUATERNION ). Per ulteriori informazioni sul diverso stile di orientamento, fate riferimento alla classe geom.Orientation3D .
|
Boolean — Restituisce false se uno qualsiasi degli elementi Vector3D del vettore components non esiste o è null.
|
Elementi API correlati
transformVector | () | metodo |
public function transformVector(v:Vector3D):Vector3D
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Utilizza una matrice di trasformazione per trasformare un oggetto Vector3D da una coordinata dello spazio a un'altra. L'oggetto Vector3D restituito include le nuove coordinate dopo la trasformazione. Tutte le trasformazioni della matrice, inclusa la conversione, vengono applicate all'oggetto Vector3D.
Se il risultato del metodo transformVector()
è stato applicato alla posizione di un oggetto di visualizzazione, viene modificata solo la posizione dell'oggetto di visualizzazione. Gli elementi di rotazione e ridimensionamento dell'oggetto di visualizzazione rimangono gli stessi.
Nota: questo metodo imposta automaticamente il componente w dell’oggetto Vector3D passato su 1.0.
Parametri
v:Vector3D — Un oggetto Vector3D contenente le coordinate da trasformare.
|
Vector3D — Un oggetto Vector3D con le coordinate trasformate.
|
Elementi API correlati
transformVectors | () | metodo |
public function transformVectors(vin:Vector.<Number>, vout:Vector.<Number>):void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Utilizza la matrice di trasformazione per trasformare un vettore di numeri da uno spazio di coordinate a un altro. Il metodo tranformVectors()
legge ogni gruppo di tre numeri nell'oggetto Vector vin
come una coordinata tridimensionale (x,y,z) e inserisce una coordinata tridimensionale trasformata nell'oggetto Vector vout
. Tutte le trasformazioni della matrice, inclusa la conversione, vengono applicate all'oggetto Vector vin
. Potete utilizzare il metodo transformVectors()
per il rendering e la trasformazione di un oggetto tridimensionale come una trama. Una trama è in insieme di vertici che definisce la forma dell'oggetto.
Parametri
vin:Vector.<Number> — Un vettore di numeri, in cui a ogni gruppo di tre numeri corrisponde una coordinata tridimensionale (x,y,z) da trasformare.
| |
vout:Vector.<Number> — Un vettore di numeri, in cui a ogni gruppo di tre numeri corrisponde una coordinata tridimensionale (x,y,z) trasformata.
|
Elementi API correlati
transpose | () | metodo |
public function transpose():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Converte l'oggetto Matrix3D corrente in una matrice in cui righe e colonne sono scambiate. Se ad esempio rawData
dell'oggetto Matrix3D corrente contiene i seguenti 16 numeri, 1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34
, il metodo transpose()
legge ogni gruppo di quattro numeri come una riga e converte le righe in colonne. Il risultato è una matrice con rawData
pari a: 1,11,21,31,2,12,22,32,3,13,23,33,4,14,24,34
.
Il metodo transpose()
sostituisce la matrice corrente con una trasposta. Se desiderate trasporre una matrice senza modificare la matrice corrente, copiate per prima cosa la matrice corrente con il metodo clone()
, quindi applicate il metodo transpose()
alla copia.
Una matrice ortogonale è una matrice quadrata la sui trasposizione è uguale al suo inverso.
Tue Jun 12 2018, 02:44 PM Z