Transform — Aspose.3D FOSS for Java

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

Transform contrôle la position, l’orientation et l’échelle d’un Node dans la scène 3D. Chaque nœud possède exactement un Transform, accessible via node.getTransform().

public class Transform extends A3DObject

Accéder au Transform d’un nœud

import com.aspose.threed.Scene;

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

Methods

MethodsMethodsMethodsMethodsMethods
translationVector3getTranslation()setTranslation(Vector3)Décalage de position par rapport à l’origine du nœud parent. Par défaut Vector3(0, 0, 0).
scalingVector3getScaling()setScaling(Vector3)Facteur d’échelle non uniforme par axe. Par défaut Vector3(1, 1, 1).
rotationQuaterniongetRotation()setRotation(Quaternion)Rotation sous forme de quaternion unitaire. Modifier cela met également à jour les angles d’Euler.
eulerAnglesVector3getEulerAngles()setEulerAngles(Vector3)Rotation en degrés sous forme d’angles d’Euler (X, Y, Z). Modifier cela met également à jour la rotation quaternion.
preRotationVector3getPreRotation()setPreRotation(Vector3)Angles d’Euler appliqués avant la rotation principale (utilisés dans les rigs FBX).
postRotationVector3getPostRotation()setPostRotation(Vector3)Angles d’Euler appliqués après la rotation principale.
geometricTranslationVector3getGeometricTranslation()setGeometricTranslation(Vector3)Translation locale uniquement : affecte la géométrie mais pas les nœuds enfants.
geometricScalingVector3getGeometricScaling()setGeometricScaling(Vector3)Échelle locale uniquement : affecte la géométrie mais pas les nœuds enfants.
geometricRotationVector3getGeometricRotation()setGeometricRotation(Vector3)Rotation locale uniquement : affecte la géométrie mais pas les nœuds enfants.
transformMatrixMatrix4getTransformMatrix()setTransformMatrix(Matrix4)La matrice de transformation 4x4 complète combinée. En cache ; recomputée lorsque n’importe quel composant change. La définir la décompose de nouveau en translation/scaling/rotation.

Méthodes d’assignation fluide

Tous les setters renvoient this, permettant le chaînage :

MethodsMethodsMethods
setTranslation(double tx, double ty, double tz)double, double, doubleDéfinir la position.
setScale(double sx, double sy, double sz)double, double, doubleDéfinir l’échelle.
setEulerAngles(double rx, double ry, double rz)double, double, doubleDéfinir la rotation en degrés.
setRotation(double rx, double ry, double rz, double rw)double, double, double, doubleDéfinir la rotation sous forme de quaternion (x, y, z, w).
setPreRotation(double rx, double ry, double rz)double, double, doubleDéfinir la pré-rotation en degrés.
setPostRotation(double rx, double ry, double rz)double, double, doubleDéfinir la post-rotation en degrés.
setGeometricTranslation(double x, double y, double z)double, double, doubleDéfinir la translation géométrique.
setGeometricScaling(double sx, double sy, double sz)double, double, doubleDéfinir l’échelle géométrique.
setGeometricRotation(double rx, double ry, double rz)double, double, doubleDéfinir la rotation géométrique en degrés.

Exemples d’utilisation

Positionner un nœud

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

Faire pivoter avec des 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);

Faire pivoter avec 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

Mise à l’échelle et position simultanées

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

Décalage géométrique (décalage du pivot)

Les transformations géométriques déplacent la géométrie par rapport au pivot du nœud sans affecter les nœuds enfants ; utiles pour centrer un maillage dans son nœud :

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

Lire la matrice de transformation combinée

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

Voir aussi

 Français