Transform — Aspose.3D FOSS for Java

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

Transform controla la posició, orientació i escala d’un Node en l’escena 3D. Cada node té exactament un Transform, accedit via node.getTransform().

public class Transform extends A3DObject

Accés al Transform d’un Node

import com.aspose.threed.Scene;

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

Methods

MethodsMethodsMethodsMethodsMethods
translationVector3getTranslation()setTranslation(Vector3)Desplaçament de posició des de l’origen del node pare. Per defecte Vector3(0, 0, 0).
scalingVector3getScaling()setScaling(Vector3)Factor d’escala no uniforme per eix. Per defecte Vector3(1, 1, 1).
rotationQuaterniongetRotation()setRotation(Quaternion)Rotació com a quaternió unitari. Configurar això també actualitza els angles d’Euler.
eulerAnglesVector3getEulerAngles()setEulerAngles(Vector3)Rotació en graus com a angles d’Euler (X, Y, Z). Configurar això també actualitza la rotació del quaternió.
preRotationVector3getPreRotation()setPreRotation(Vector3)Angles d’Euler aplicats abans de la rotació principal (utilitzats en rigs FBX).
postRotationVector3getPostRotation()setPostRotation(Vector3)Angles d’Euler aplicats després de la rotació principal.
geometricTranslationVector3getGeometricTranslation()setGeometricTranslation(Vector3)Traducció només local: afecta la geometria però no els nodes fills.
geometricScalingVector3getGeometricScaling()setGeometricScaling(Vector3)Escala només local: afecta la geometria però no els nodes fills.
geometricRotationVector3getGeometricRotation()setGeometricRotation(Vector3)Rotació només local: afecta la geometria però no els nodes fills.
transformMatrixMatrix4getTransformMatrix()setTransformMatrix(Matrix4)La matriu de transformació 4x4 completa combinada. Emmagatzemada en memòria cau; es recalcula quan qualsevol component canvia. En establir-la es descompon de nou en translation/scaling/rotation.

Mètodes Setter Fluents

Tots els setters retornen this, habilitant encadenament:

MethodsMethodsMethods
setTranslation(double tx, double ty, double tz)double, double, doubleEstableix la posició.
setScale(double sx, double sy, double sz)double, double, doubleEstableix l’escala.
setEulerAngles(double rx, double ry, double rz)double, double, doubleEstableix la rotació en graus.
setRotation(double rx, double ry, double rz, double rw)double, double, double, doubleEstableix la rotació com a quaternió (x, y, z, w).
setPreRotation(double rx, double ry, double rz)double, double, doubleEstableix la pre-rotació en graus.
setPostRotation(double rx, double ry, double rz)double, double, doubleEstableix la post-rotació en graus.
setGeometricTranslation(double x, double y, double z)double, double, doubleEstableix la translació geomètrica.
setGeometricScaling(double sx, double sy, double sz)double, double, doubleEstableix l’escala geomètrica.
setGeometricRotation(double rx, double ry, double rz)double, double, doubleEstableix la rotació geomètrica en graus.

Exemples d’ús

Posicionar un Node

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 amb angles d’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 amb un quaternió

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 i posicionar juntament

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);

Desplaçament geomètric (Desplaçament del pivot)

Les transformacions geomètriques desplacen la geometria respecte al pivot del node sense afectar els nodes fills; útil per centrar una malla dins del seu node:

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);

Llegir la matriu de Transformació 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

Vegeu també

 Català