Transform — Aspose.3D FOSS for Java

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

Transform controla a posição, orientação e escala de um Node na cena 3D. Cada nó tem exatamente um Transform, acessado via node.getTransform().

public class Transform extends A3DObject

Acessando o Transform de um Nó

import com.aspose.threed.Scene;

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

Enumerations

EnumerationsEnumerationsEnumerationsEnumerationsEnumerations
translationVector3getTranslation()setTranslation(Vector3)Deslocamento de posição a partir da origem do nó pai. Padrão Vector3(0, 0, 0).
scalingVector3getScaling()setScaling(Vector3)Fator de escala não uniforme por eixo. Padrão Vector3(1, 1, 1).
rotationQuaterniongetRotation()setRotation(Quaternion)Rotação como um quaternion unitário. Definir isso também atualiza os ângulos de Euler.
eulerAnglesVector3getEulerAngles()setEulerAngles(Vector3)Rotação em graus como ângulos de Euler (X, Y, Z). Definir isso também atualiza a rotação quaternion.
preRotationVector3getPreRotation()setPreRotation(Vector3)Ângulos de Euler aplicados antes da rotação principal (usado em rigs FBX).
postRotationVector3getPostRotation()setPostRotation(Vector3)Ângulos de Euler aplicados após a rotação principal.
geometricTranslationVector3getGeometricTranslation()setGeometricTranslation(Vector3)Translação apenas local: afeta a geometria, mas não os nós filhos.
geometricScalingVector3getGeometricScaling()setGeometricScaling(Vector3)Escala apenas local: afeta a geometria, mas não os nós filhos.
geometricRotationVector3getGeometricRotation()setGeometricRotation(Vector3)Rotação apenas local: afeta a geometria, mas não os nós filhos.
transformMatrixMatrix4getTransformMatrix()setTransformMatrix(Matrix4)A matriz de transformação 4x4 completa combinada. Em cache; recalculada quando qualquer componente muda. Ao defini‑la, ela é decomposta de volta em translação/escala/rotação.

Métodos Setter Fluentes

Todos os setters retornam this, permitindo encadeamento:

EnumerationsEnumerationsEnumerations
setTranslation(double tx, double ty, double tz)double, double, doubleDefinir posição.
setScale(double sx, double sy, double sz)double, double, doubleDefinir escala.
setEulerAngles(double rx, double ry, double rz)double, double, doubleDefinir rotação em graus.
setRotation(double rx, double ry, double rz, double rw)double, double, double, doubleDefinir rotação como um quaternion (x, y, z, w).
setPreRotation(double rx, double ry, double rz)double, double, doubleDefinir pré-rotação em graus.
setPostRotation(double rx, double ry, double rz)double, double, doubleDefinir pós-rotação em graus.
setGeometricTranslation(double x, double y, double z)double, double, doubleDefinir translação geométrica.
setGeometricScaling(double sx, double sy, double sz)double, double, doubleDefinir escala geométrica.
setGeometricRotation(double rx, double ry, double rz)double, double, doubleDefinir rotação geométrica em graus.

Exemplo de Uso

Posicionar um Nó

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

Rotacionar com Â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);

Rotacionar com um 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 e 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);

Deslocamento Geométrico (Deslocamento de Pivô)

Transformações geométricas deslocam a geometria em relação ao pivô do nó sem afetar os nós filhos; útil para centralizar uma malha dentro do seu nó:

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

Ler a Matriz de Transformação 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

Veja também

 Português