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.
Checking the stable version of the documentation...
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à
|
||
|
Costruttori
Transform3D(from: Transform3D) |
|
Transform3D(basis: Basis, origin: Vector3) |
|
Transform3D(from: Projection) |
|
Transform3D(x_axis: Vector3, y_axis: Vector3, z_axis: Vector3, origin: Vector3) |
Metodi
affine_inverse() const |
|
interpolate_with(xform: Transform3D, weight: float) const |
|
inverse() const |
|
is_equal_approx(xform: Transform3D) const |
|
is_finite() const |
|
looking_at(target: Vector3, up: Vector3 = Vector3(0, 1, 0), use_model_front: bool = false) const |
|
orthonormalized() const |
|
rotated_local(axis: Vector3, angle: float) const |
|
scaled_local(scale: Vector3) const |
|
translated(offset: Vector3) const |
|
translated_local(offset: Vector3) const |
Operatori
operator !=(right: Transform3D) |
|
operator *(right: AABB) |
|
operator *(right: PackedVector3Array) |
|
operator *(right: Plane) |
|
operator *(right: Transform3D) |
|
operator *(right: Vector3) |
|
operator *(right: float) |
|
operator *(right: int) |
|
operator /(right: float) |
|
operator /(right: int) |
|
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:
La sua Basis.x punta a destra (Vector3.RIGHT);
La sua Basis.y punta in alto (Vector3.UP);
La sua Basis.z punta indietro (Vector3.BACK).
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.
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:
Per la traduzione, vedi translated() o translated_local().
Per la rotazione, vedi rotated() o rotated_local().
Per la scala, vedi scaled() o scaled_local().
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.