Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Transform3D

Una matrice 3×4 che rappresenta una trasformazione 3D.

Descrizione

Il tipo di Variant integrato Transform3D è una matrice 3×4 che rappresenta una trasformazione nello spazio 3D. Contiene una Basis, che da sola può rappresentare rotazione, scala e inclinazione. Inoltre, combinata con la sua origin, la trasformazione può anche rappresentare una traslazione.

Per un'introduzione generale, consulta il tutorial Matrici e trasformazioni.

Nota: Godot utilizza un sistema di coordinate destrorso, che è uno standard comune. Per le direzioni, la convenzione per i tipi integrati come Camera3D prevede che -Z punti in avanti (+X è destra, +Y è su +Z è indietro). Altri oggetti possono utilizzare convenzioni di direzione diverse. Per ulteriori informazioni, consulta il tutorial Convenzioni sulla direzione delle risorse 3D.

Nota: In un contesto booleano, un Transform3D sarà valutato come false se è uguale a IDENTITY. Altrimenti, un Transform3D sarà sempre valutato come true.

Nota

Ci sono differenze sostanziali quando si usa questa API con C#. Vedi Differenze dell'API C# rispetto a GDScript per maggiori informazioni.

Tutorial

Proprietà

Basis

basis

Basis(1, 0, 0, 0, 1, 0, 0, 0, 1)

Vector3

origin

Vector3(0, 0, 0)

Costruttori

Transform3D

Transform3D()

Transform3D

Transform3D(from: Transform3D)

Transform3D

Transform3D(basis: Basis, origin: Vector3)

Transform3D

Transform3D(from: Projection)

Transform3D

Transform3D(x_axis: Vector3, y_axis: Vector3, z_axis: Vector3, origin: Vector3)

Metodi

Transform3D

affine_inverse() const

Transform3D

interpolate_with(xform: Transform3D, weight: float) const

Transform3D

inverse() const

bool

is_equal_approx(xform: Transform3D) const

bool

is_finite() const

Transform3D

looking_at(target: Vector3, up: Vector3 = Vector3(0, 1, 0), use_model_front: bool = false) const

Transform3D

orthonormalized() const

Transform3D

rotated(axis: Vector3, angle: float) const

Transform3D

rotated_local(axis: Vector3, angle: float) const

Transform3D

scaled(scale: Vector3) const

Transform3D

scaled_local(scale: Vector3) const

Transform3D

translated(offset: Vector3) const

Transform3D

translated_local(offset: Vector3) const

Operatori

bool

operator !=(right: Transform3D)

AABB

operator *(right: AABB)

PackedVector3Array

operator *(right: PackedVector3Array)

Plane

operator *(right: Plane)

Transform3D

operator *(right: Transform3D)

Vector3

operator *(right: Vector3)

Transform3D

operator *(right: float)

Transform3D

operator *(right: int)

Transform3D

operator /(right: float)

Transform3D

operator /(right: int)

bool

operator ==(right: Transform3D)


Costanti

IDENTITY = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗

Il Transform3D di identità. Questa è una base senza rotazione, senza inclinazione, e con una scala pari a Vector3.ONE. La sua basis è uguale a Basis.IDENTITY. Ciò significa anche che:

var transform = Transform3D.IDENTITY
var basis = transform.basis
print("| X | Y | Z | Origine")
print("| %.f | %.f | %.f | %.f" % [basis.x.x, basis.y.x, basis.z.x, transform.origin.x])
print("| %.f | %.f | %.f | %.f" % [basis.x.y, basis.y.y, basis.z.y, transform.origin.y])
print("| %.f | %.f | %.f | %.f" % [basis.x.z, basis.y.z, basis.z.z, transform.origin.z])
# Stampa:
# | X | Y | Z | Origine
# | 1 | 0 | 0 | 0
# | 0 | 1 | 0 | 0
# | 0 | 0 | 1 | 0

Se un Vector2, un AABB, un Plane, un PackedVector3Array o un altro Transform3D viene trasformato (moltiplicato) per questa costante, non si verifica alcuna trasformazione.

Nota: In GDScript, questa costante è identica alla creazione di un Transform3D senza alcun argomento. Questa costante può essere usata per rendere il codice più chiaro e per coerenza con C#.

FLIP_X = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗

Transform3D con specchiatura applicata perpendicolarmente al piano YZ. La sua basis è uguale a Basis.FLIP_X.

FLIP_Y = Transform3D(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0) 🔗

Transform3D con specchiatura applicata perpendicolarmente al piano XZ . La sua basis è uguale a Basis.FLIP_Y.

FLIP_Z = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0) 🔗

Transform3D con specchiatura applicata perpendicolarmente al piano XY. La sua basis è uguale a Basis.FLIP_Z.


Descrizioni delle proprietà

Basis basis = Basis(1, 0, 0, 0, 1, 0, 0, 0, 1) 🔗

La Basis di questa trasformazione. È composta da 3 assi (Basis.x, Basis.y e Basis.z). Insieme, rappresentano la rotazione, la scala e l'inclinazione della trasformazione.


Vector3 origin = Vector3(0, 0, 0) 🔗

L'offset di traslazione di questa trasformazione. Nello spazio 3D, questo può essere visto come la posizione.


Descrizioni dei costruttori

Transform3D Transform3D() 🔗

Costruisce un Transform3D identico a IDENTITY.

Nota: In C#, costruisce un Transform3D con il suo origin e tutti i componenti della sua basis impostati su Vector2.ZERO.


Transform3D Transform3D(from: Transform3D)

Costruisce un Transform3D come copia del Transform3D specificato.


Transform3D Transform3D(basis: Basis, origin: Vector3)

Costruisce un Transform3D da un Basis e Vector3.


Transform3D Transform3D(from: Projection)

Costruisce un Transform3D da una Projection. Poiché Transform3D è una matrice 3×4 e Projection è una matrice 4×4, questa operazione scarta l'ultima riga della matrice di proiezione (from.x.w, from.y.w, from.z.w e from.w.w non sono inclusi nella nuova trasformazione).


Transform3D Transform3D(x_axis: Vector3, y_axis: Vector3, z_axis: Vector3, origin: Vector3)

Costruisce un Transform3D da quattro valori Vector3 (chiamati anche colonne di matrice).

I primi tre argomenti sono gli assi della basis (Basis.x, Basis.y e Basis.z).


Descrizioni dei metodi

Transform3D affine_inverse() const 🔗

Restituisce la versione invertita di questa trasformazione. A differenza di inverse(), questo metodo funziona con quasi ogni basis, comprese quelle non uniformi, ma è più lento. Vedi anche Basis.inverse().

Nota: Affinché questo metodo restituisca correttamente, la basis della trasformazione deve avere un determinante che non sia esattamente 0.0 (vedi Basis.determinant()).


Transform3D interpolate_with(xform: Transform3D, weight: float) const 🔗

Restituisce il risultato dell'interpolazione lineare tra questa trasformazione e xform per il peso weight.

weight dovrebbe essere compreso tra 0.0 e 1.0 (inclusi). I valori al di fuori di questo intervallo sono consentiti e possono essere utilizzati per eseguire un'estrapolazione.


Transform3D inverse() const 🔗

Restituisce la versione invertita di questa trasformazione. Vedi anche Basis.inverse().

Nota: Affinché questo metodo restituisca correttamente, la basis della trasformazione deve essere ortonormale (vedi orthonormalized()). Ciò significa che la base dovrebbe rappresentare solo una rotazione. In caso contrario, usa invece affine_inverse().


bool is_equal_approx(xform: Transform3D) const 🔗

Restituisce true se questa trasformazione e xform sono approssimativamente uguali, chiamando @GlobalScope.is_equal_approx() su ogni componente.


bool is_finite() const 🔗

Restituisce true se questa trasformazione è finita, chiamando @GlobalScope.is_finite() su ogni componente.


Transform3D looking_at(target: Vector3, up: Vector3 = Vector3(0, 1, 0), use_model_front: bool = false) const 🔗

Restituisce una copia di questa trasformazione ruotata in modo che l'asse anteriore (-Z) punti verso la posizione target.

L'asse superiore (+Y) punta il più vicino possibile al vettore up, pur rimanendo perpendicolare all'asse anteriore. La trasformazione risultante è ortonormalizzata. Le informazioni esistenti sulla rotazione, scala e inclinazione della trasformazione originale vengono scartate. I vettori target e up non possono essere zero, non possono essere paralleli tra loro e sono definiti nello spazio globale/padre.

Se use_model_front è true, l'asse +Z (avanti per gli asset) viene trattato come anteriore (implica che +X sia a sinistra) e punta verso la posizione target. Come predefinito, l'asse -Z (avanti per la telecamera) viene trattato come anteriore (implica che +X sia a destra).


Transform3D orthonormalized() const 🔗

Restituisce una copia di questa trasformazione con la sua basis ortonormalizzata. Una base ortonormale è sia ortogonale (gli assi sono perpendicolari tra loro) sia normalizzata (gli assi hanno una lunghezza di 1.0), il che significa anche che può rappresentare solo una rotazione. Vedi anche Basis.orthonormalized().


Transform3D rotated(axis: Vector3, angle: float) const 🔗

Restituisce una copia di questa trasformazione ruotata attorno all'asse axis dell'angolo angle (in radianti).

L'asse axis deve essere un vettore normalizzato (vedi Vector3.normalized()). Se angle è positivo, la base viene ruotata in senso antiorario attorno l'asse.

Questo metodo è una versione ottimizzata della moltiplicazione della trasformazione fornita X con una corrispondente trasformazione di rotazione R da sinistra, ovvero R * X.

Ciò può essere visto come una trasformazione rispetto alla struttura globale/padre.


Transform3D rotated_local(axis: Vector3, angle: float) const 🔗

Restituisce una copia di questa trasformazione ruotata attorno all'asse axis dell'angolo angle (in radianti).

L'asse axis deve essere un vettore normalizzato nel sistema di coordinate locali della trasformazione. Ad esempio, per ruotare attorno all'asse X locale, usa Vector3.RIGHT.

Questo metodo è una versione ottimizzata della moltiplicazione della trasformazione fornita X con una corrispondente trasformazione di rotazione R da destra, ovvero X * R.

Questo può essere visto come una trasformazione rispetto alla struttura locale.


Transform3D scaled(scale: Vector3) const 🔗

Restituisce una copia di questa trasformazione scalata dal fattore scale specificato.

Questo metodo è una versione ottimizzata della moltiplicazione della trasformazione fornita X con una trasformazione di scala corrispondente S da sinistra, ovvero S * X.

Questo può essere visto come una trasformazione rispetto al frame globale/padre.


Transform3D scaled_local(scale: Vector3) const 🔗

Restituisce una copia di questa trasformazione scalata dal fattore scale specificato.

Questo metodo è una versione ottimizzata della moltiplicazione della trasformazione fornita X con una trasformazione di scala corrispondente S da destra, ovvero X * S.

Questo può essere visto come una trasformazione rispetto al frame locale.


Transform3D translated(offset: Vector3) const 🔗

Restituisce una copia di questa trasformazione traslata dal valore di offset.

Questo metodo è una versione ottimizzata della moltiplicazione della trasformazione fornita X con una corrispondente trasformazione di traslazione T da sinistra, ovvero T * X.

Questo può essere visto come una trasformazione rispetto al frame globale/padre.


Transform3D translated_local(offset: Vector3) const 🔗

Restituisce una copia di questa trasformazione traslata dal valore di offset.

Questo metodo è una versione ottimizzata della moltiplicazione della trasformazione fornita X con una corrispondente trasformazione di traslazione T da destra, ovvero X * T.

Questo può essere visto come una trasformazione rispetto al frame locale.


Descrizioni degli operatori

bool operator !=(right: Transform3D) 🔗

Restituisce true se i componenti di entrambe le trasformazioni non sono uguali, rispettivamente.

Note: A causa di errori di precisione per virgola mobile, considera invece utilizzare is_equal_approx(), che è più affidabile.


AABB operator *(right: AABB) 🔗

Trasforma (moltiplica) l'AABB per questa matrice di trasformazione.


PackedVector3Array operator *(right: PackedVector3Array) 🔗

Trasforma (moltiplica) ogni elemento Vector3 del PackedVector3Array specificato per questa matrice di trasformazione.

Su array più grandi, questa operazione è molto più veloce della trasformazione di ogni singolo Vector3.


Plane operator *(right: Plane) 🔗

Trasforma (moltiplica) il Plane per questa matrice di trasformazione.


Transform3D operator *(right: Transform3D) 🔗

Trasforma (moltiplica) questa trasformazione per la trasformazione right.

Questa è l'operazione eseguita tra i nodi Node3D genitore e figlio.

Nota: Se devi modificare solo un attributo di questa trasformazione, considera di usare uno dei seguenti metodi:


Vector3 operator *(right: Vector3) 🔗

Trasforma (moltiplica) il Vector3 per questa matrice di trasformazione.


Transform3D operator *(right: float) 🔗

Moltiplica tutti i componenti del Transform3D per il float indicato, incluso l'origin. Ciò influenza la scala della trasformazione in modo uniforme, ridimensionando la basis.


Transform3D operator *(right: int) 🔗

Moltiplica tutti i componenti del Transform3D per l'int indicato, incluso l'origin. Ciò influenza la scala della trasformazione in modo uniforme, ridimensionando la basis.


Transform3D operator /(right: float) 🔗

Divide tutti i componenti del Transform3D per il float indicato, incluso l'origin. Ciò influenza la scala della trasformazione in modo uniforme, ridimensionando la basis.


Transform3D operator /(right: int) 🔗

Divide tutti i componenti del Transform3D per l'int indicato, incluso l'origin. Ciò influenza la scala della trasformazione in modo uniforme, ridimensionando la basis.


bool operator ==(right: Transform3D) 🔗

Restituisce true se i componenti di entrambe le trasformazioni non sono esattamente uguali.

Note: A causa di errori di precisione per virgola mobile, considera invece utilizzare is_equal_approx(), che è più affidabile.