Transform3D
Una matriz de 3×4 que representa una transformación 3D.
Descripción
El tipo Variant incorporado Transform3D es una matriz de 3×4 que representa una transformación en el espacio 3D. Contiene una Basis, que por sí sola puede representar rotación, escala y cizallamiento. Además, combinada con su propio origin, la transformación también puede representar una traslación.
Para una introducción general, consulta el tutorial Matrices y transformaciones.
Nota: Godot utiliza un sistema de coordenadas a la derecha, que es un estándar común. Para las direcciones, la convención para los tipos incorporados como Camera3D es que -Z apunte hacia delante (+X está a la derecha, +Y arriba y +Z atrás). Otros objetos pueden utilizar diferentes convenciones de dirección. Para más información, consulta el tutorial convenciones de dirección de los recursos 3D.
Nota
Hay diferencias notables cuando usa esta API con C#. Véase Diferencias de la API de C# con GDScript para más información.
Tutoriales
Propiedades
|
||
|
Constructores
Transform3D(from: Transform3D) |
|
Transform3D(basis: Basis, origin: Vector3) |
|
Transform3D(from: Projection) |
|
Transform3D(x_axis: Vector3, y_axis: Vector3, z_axis: Vector3, origin: Vector3) |
Métodos
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 |
Operadores
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) |
Constantes
IDENTITY = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗
La Transform3D identidad. Esta es una transformación sin traslación, sin rotación y con una escala de Vector3.ONE. Su basis es igual a Basis.IDENTITY. Esto también significa que:
Su Basis.x apunta a la derecha (Vector3.RIGHT);
Su Basis.y apunta hacia arriba (Vector3.UP);
Su Basis.z apunta hacia atrás (Vector3.BACK).
var transform = Transform3D.IDENTITY
var basis = transform.basis
print("| X | Y | Z | Origen")
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])
# Imprime:
# | X | Y | Z | Origen
# | 1 | 0 | 0 | 0
# | 0 | 1 | 0 | 0
# | 0 | 0 | 1 | 0
Si un Vector3, un AABB, un Plane, un PackedVector3Array u otra Transform3D se transforma (multiplica) por esta constante, no se produce ninguna transformación.
Nota: En GDScript, esta constante es equivalente a crear un Transform3D sin ningún argumento. Se puede utilizar para que tu código sea más claro y para que sea coherente con C#.
FLIP_X = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗
Transform3D con la reflexión aplicada perpendicular al plano YZ. Su basis es igual a Basis.FLIP_X.
FLIP_Y = Transform3D(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0) 🔗
Transform3D con la reflexión aplicada perpendicular al plano XZ. Su basis es igual a Basis.FLIP_Y.
FLIP_Z = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0) 🔗
Transform3D con la reflexión aplicada perpendicular al plano XY. Su basis es igual a Basis.FLIP_Z.
Descripciones de Propiedades
Basis basis = Basis(1, 0, 0, 0, 1, 0, 0, 0, 1) 🔗
La Basis de esta transformación. Está compuesta por 3 ejes (Basis.x, Basis.y y Basis.z). Juntos, estos representan la rotación, la escala y el sesgado de la transformación.
Vector3 origin = Vector3(0, 0, 0) 🔗
El desplazamiento de traslación de esta transformación. En el espacio 3D, esto se puede representar como la posición.
Descripciones de Constructores
Transform3D Transform3D() 🔗
Construye una Transform3D idéntica a IDENTITY.
Nota: En C#, esto construye una Transform3D con su origin y los componentes de su basis establecidos a Vector3.ZERO.
Transform3D Transform3D(from: Transform3D)
Construye un Transform3D como una copia del Transform3D dado.
Transform3D Transform3D(basis: Basis, origin: Vector3)
Construye un Transform3D a partir de un Basis y un Vector3.
Transform3D Transform3D(from: Projection)
Construye una Transform3D a partir de una Projection. Dado que Transform3D es una matriz de 3×4 y Projection es una matriz de 4×4, esta operación recorta la última fila de la matriz de proyección (from.x.w, from.y.w, from.z.w y from.w.w no se incluyen en la nueva transformación).
Transform3D Transform3D(x_axis: Vector3, y_axis: Vector3, z_axis: Vector3, origin: Vector3)
Construye una Transform3D a partir de cuatro valores Vector3 (también llamados columnas de la matriz).
Los tres primeros argumentos son los ejes de la basis (Basis.x, Basis.y y Basis.z).
Descripciones de Métodos
Transform3D affine_inverse() const 🔗
Devuelve la versión invertida de esta transformación. A diferencia de inverse(), este método funciona con casi cualquier basis, incluyendo las no uniformes, pero es más lento. Véase también Basis.inverse().
Nota: Para que este método se devuelva correctamente, la basis de la transformación debe tener un determinante que no sea exactamente 0.0 (consulta Basis.determinant()).
Transform3D interpolate_with(xform: Transform3D, weight: float) const 🔗
Devuelve el resultado de la interpolación lineal entre esta transformación y xform por el weight dado.
El weight debe estar entre 0.0 y 1.0 (inclusive). Se permiten valores fuera de este rango y se pueden utilizar para realizar extrapolación en su lugar.
Transform3D inverse() const 🔗
Devuelve la versión invertida de esta transformación. Véase también Basis.inverse().
Nota: Para que este método se devuelva correctamente, la basis de la transformación debe ser ortonormal (consulta orthonormalized()). Eso significa que la base sólo debe representar una rotación. Si no es así, utiliza affine_inverse() en su lugar.
bool is_equal_approx(xform: Transform3D) const 🔗
Devuelve true si esta transformación y xform son aproximadamente iguales, ejecutando @GlobalScope.is_equal_approx() en cada componente.
Devuelve true si esta transformación es finita, llamando a @GlobalScope.is_finite() en cada componente.
Transform3D looking_at(target: Vector3, up: Vector3 = Vector3(0, 1, 0), use_model_front: bool = false) const 🔗
Devuelve una copia de esta transformación rotada de forma que el eje delantero (-Z) apunte hacia la posición target.
El eje superior (+Y) apunta lo más cerca posible del vector up sin dejar de ser perpendicular al eje delantero. La transformación resultante se ortonormaliza. Se descarta la información existente de rotación, escala y sesgado de la transformación original. Los vectores target y up no pueden ser cero, no pueden ser paralelos entre sí y se definen en el espacio global/principal.
Si use_model_front es true, el eje +Z (frontal del recurso) se trata como delantero (implica que +X está a la izquierda) y apunta hacia la posición target. Por defecto, el eje -Z (frontal de la cámara) se trata como delantero (implica que +X está a la derecha).
Transform3D orthonormalized() const 🔗
Devuelve una copia de esta transformación con su basis ortonormalizada. Una base ortonormal es tanto ortogonal (los ejes son perpendiculares entre sí) como normalizada (los ejes tienen una longitud de 1.0), lo que también significa que sólo puede representar una rotación. Véase también Basis.orthonormalized().
Transform3D rotated(axis: Vector3, angle: float) const 🔗
Devuelve una copia de esta transformación rotada alrededor del axis dado por el angle dado (en radianes).
El axis debe ser un vector normalizado (consulta Vector3.normalized()). Si angle es positivo, la base se gira en sentido contrario a las agujas del reloj alrededor del eje.
Este método es una versión optimizada de la multiplicación de la transformación X dada con una transformación de rotación R correspondiente desde la izquierda, es decir, R * X.
Esto puede verse como una transformación con respecto al fotograma global/padre.
Transform3D rotated_local(axis: Vector3, angle: float) const 🔗
Devuelve una copia de esta transformación rotada alrededor del axis dado por el angle dado (en radianes).
El axis debe ser un vector normalizado en el sistema de coordenadas local de la transformación. Por ejemplo, para girar alrededor del eje X local, utiliza Vector3.RIGHT.
Este método es una versión optimizada de la multiplicación de la transformación X dada con una transformación de rotación R correspondiente desde la derecha, es decir, X * R.
Esto puede verse como una transformación con respecto al fotograma local.
Transform3D scaled(scale: Vector3) const 🔗
Devuelve una copia de esta transformación escalada por el factor scale dado.
Este método es una versión optimizada de multiplicar la transformación dada X con una transformación de escalado correspondiente S desde la izquierda, es decir, S * X.
Esto puede verse como transformar con respecto al marco global/padre.
Transform3D scaled_local(scale: Vector3) const 🔗
Devuelve una copia de esta transformación escalada por el factor scale dado.
Este método es una versión optimizada de multiplicar la transformación dada X con una transformación de escalado correspondiente S desde la derecha, es decir, X * S.
Esto puede verse como transformar con respecto al marco local.
Transform3D translated(offset: Vector3) const 🔗
Devuelve una copia de esta transformación trasladada por el offset dado.
Este método es una versión optimizada de multiplicar la transformación dada X con una transformación de traslación correspondiente T desde la izquierda, es decir, T * X.
Esto puede verse como transformar con respecto al marco global/padre.
Transform3D translated_local(offset: Vector3) const 🔗
Devuelve una copia de esta transformación trasladada por el offset dado.
Este método es una versión optimizada de multiplicar la transformación dada X con una transformación de traslación correspondiente T desde la derecha, es decir, X * T.
Esto puede verse como transformar con respecto al marco local.
Descripciones de Operadores
bool operator !=(right: Transform3D) 🔗
Devuelve true si los componentes de ambas transformaciones no son iguales.
Nota: Debido a los errores de precisión de punto flotante, considera usar is_equal_approx() en su lugar, lo cual es más fiable.
AABB operator *(right: AABB) 🔗
Transforma (multiplica) el AABB por esta matriz de transformación.
PackedVector3Array operator *(right: PackedVector3Array) 🔗
Transforma (multiplica) cada elemento Vector3 del PackedVector3Array dado por esta matriz de transformación.
En arrays más grandes, esta operación es mucho más rápida que transformar cada Vector3 individualmente.
Plane operator *(right: Plane) 🔗
Transforma (multiplica) el Plane por esta matriz de transformación.
Transform3D operator *(right: Transform3D) 🔗
Transforma (multiplica) esta transformación por la transformación right.
Esta es la operación realizada entre Node3D padre e hijo.
Nota: Si solo necesitas modificar un atributo de esta transformación, considera usar uno de los siguientes métodos en su lugar:
Para traslación, consulta translated() o translated_local().
Para rotación, consulta rotated() o rotated_local().
Para escala, consulta scaled() o scaled_local().
Vector3 operator *(right: Vector3) 🔗
Transforma (multiplica) el Vector3 por esta matriz de transformación.
Transform3D operator *(right: float) 🔗
Multiplica todos los componentes de la Transform3D por el float dado, incluyendo el origin. Esto afecta la escala de la transformación uniformemente, escalando el basis.
Transform3D operator *(right: int) 🔗
Multiplica todos los componentes de la Transform3D por el int dado, incluyendo el origin. Esto afecta la escala de la transformación uniformemente, escalando el basis.
Transform3D operator /(right: float) 🔗
Divide todos los componentes de la Transform3D por el float dado, incluyendo el origin. Esto afecta la escala de la transformación uniformemente, escalando el basis.
Transform3D operator /(right: int) 🔗
Divide todos los componentes de la Transform3D por el int dado, incluyendo el origin. Esto afecta la escala de la transformación uniformemente, escalando el basis.
bool operator ==(right: Transform3D) 🔗
Devuelve true si los componentes de ambas transformaciones son exactamente iguales.
Nota: Debido a errores de precisión de punto flotante, considera usar is_equal_approx() en su lugar, lo cual es más fiable.