Transform — Aspose.3D FOSS for Java

Methods: com.aspose.threed (aspose-3d-foss)

Transform controla la posición, orientación y escala de un Node en la escena 3D. Cada nodo tiene exactamente uno Transform, accedido a través de node.getTransform().

public class Transform extends A3DObject

Accediendo al Transform de un Nodo

import com.aspose.threed.Scene;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("box");
Transform t = node.getTransform();

Methods

MethodsMethodsMethodsMethodsMethods
translationVector3getTranslation()setTranslation(Vector3)Desplazamiento de posición desde el origen del nodo padre. Predeterminado Vector3(0, 0, 0).
scalingVector3getScaling()setScaling(Vector3)Factor de escala no uniforme por eje. Predeterminado Vector3(1, 1, 1).
rotationQuaterniongetRotation()setRotation(Quaternion)Rotación como un cuaternión unitario. Configurar esto también actualiza los ángulos de Euler.
eulerAnglesVector3getEulerAngles()setEulerAngles(Vector3)Rotación en grados como ángulos de Euler (X, Y, Z). Configurar esto también actualiza la rotación del cuaternión.
preRotationVector3getPreRotation()setPreRotation(Vector3)Ángulos de Euler aplicados antes de la rotación principal (usado en rigs FBX).
postRotationVector3getPostRotation()setPostRotation(Vector3)Ángulos de Euler aplicados después de la rotación principal.
geometricTranslationVector3getGeometricTranslation()setGeometricTranslation(Vector3)Traslación solo local: afecta a la geometría pero no a los nodos hijos.
geometricScalingVector3getGeometricScaling()setGeometricScaling(Vector3)Escala solo local: afecta a la geometría pero no a los nodos hijos.
geometricRotationVector3getGeometricRotation()setGeometricRotation(Vector3)Rotación solo local: afecta a la geometría pero no a los nodos hijos.
transformMatrixMatrix4getTransformMatrix()setTransformMatrix(Matrix4)La matriz de transformación 4x4 completa combinada. En caché; se vuelve a calcular cuando cualquier componente cambia. Al establecerla, se descompone de nuevo en traslación/escala/rotación.

Métodos Setter fluidos

Todos los setters devuelven this, habilitando encadenamiento:

MethodsMethodsMethods
setTranslation(double tx, double ty, double tz)double, double, doubleEstablecer posición.
setScale(double sx, double sy, double sz)double, double, doubleEstablecer escala.
setEulerAngles(double rx, double ry, double rz)double, double, doubleEstablecer rotación en grados.
setRotation(double rx, double ry, double rz, double rw)double, double, double, doubleEstablecer rotación como un cuaternión (x, y, z, w).
setPreRotation(double rx, double ry, double rz)double, double, doubleEstablecer pre-rotación en grados.
setPostRotation(double rx, double ry, double rz)double, double, doubleEstablecer post-rotación en grados.
setGeometricTranslation(double x, double y, double z)double, double, doubleEstablecer traslación geométrica.
setGeometricScaling(double sx, double sy, double sz)double, double, doubleEstablecer escala geométrica.
setGeometricRotation(double rx, double ry, double rz)double, double, doubleEstablecer rotación geométrica en grados.

Ejemplos de uso

Posicionar un Nodo

import com.aspose.threed.Scene;
import com.aspose.threed.*;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("box");

// Using fluent setters
node.getTransform().setTranslation(5.0, 0.0, -3.0);

// Or via property setter
node.getTransform().setTranslation(new Vector3(5.0, 0.0, -3.0));

Rotar con ángulos de Euler

import com.aspose.threed.Scene;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("rotated");

// Rotate 45 degrees around Y axis
node.getTransform().setEulerAngles(0.0, 45.0, 0.0);

// Chain multiple operations
node.getTransform()
    .setTranslation(2.0, 0.0, 0.0)
    .setScale(2.0, 2.0, 2.0);

Rotar con un Quaternion

import com.aspose.threed.Scene;
import com.aspose.threed.*;
import com.aspose.threed.*;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("q-rotated");

// 90 degrees rotation around the Y axis
double halfAngle = Math.toRadians(45);   // half the total rotation
Quaternion q = new Quaternion(Math.cos(halfAngle), 0.0, Math.sin(halfAngle), 0.0);
node.getTransform().setRotation(q);

System.out.println("Euler: " + node.getTransform().getEulerAngles());   // synced automatically

Escalar y posicionar juntos

import com.aspose.threed.Scene;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("big-offset");

node.getTransform()
    .setTranslation(10.0, 0.0, 0.0)
    .setScale(3.0, 3.0, 3.0)
    .setEulerAngles(0.0, 90.0, 0.0);

Desplazamiento geométrico (Desplazamiento del pivote)

Las transformaciones geométricas desplazan la geometría respecto al pivote del nodo sin afectar a los nodos hijos; es útil para centrar una malla dentro de su nodo:

import com.aspose.threed.Scene;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("centered-mesh");

// Shift the mesh half a unit down so its base sits at y=0
node.getTransform().setGeometricTranslation(0.0, -0.5, 0.0);

Leer la matriz de Transformación combinada

import com.aspose.threed.Scene;
import com.aspose.threed.*;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("m");
node.getTransform().setTranslation(1.0, 2.0, 3.0);
node.getTransform().setEulerAngles(0.0, 45.0, 0.0);

Matrix4 m = node.getTransform().getTransformMatrix();
System.out.println(m.getClass().getName());   // com.aspose.threed.Matrix4

Ver también

 Español