Transform — Aspose.3D FOSS for Java

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

Transform ovládá polohu, orientaci a měřítko Node ve 3D scéně. Každý uzel má přesně jeden Transform, přístupný přes node.getTransform().

public class Transform extends A3DObject

Přístup k Transform uzlu

import com.aspose.threed.Scene;

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

Methods

MethodsMethodsMethodsMethodsMethods
translationVector3getTranslation()setTranslation(Vector3)Posun pozice od počátku nadřazeného uzlu. Výchozí Vector3(0, 0, 0).
scalingVector3getScaling()setScaling(Vector3)Nerovnoměrný faktor měřítka na osu. Výchozí Vector3(1, 1, 1).
rotationQuaterniongetRotation()setRotation(Quaternion)Rotace jako jednotkový kvaternion. Nastavením se také aktualizují Eulerovy úhly.
eulerAnglesVector3getEulerAngles()setEulerAngles(Vector3)Rotace ve stupních jako Eulerovy úhly (X, Y, Z). Nastavením se také aktualizuje rotace kvaternionu.
preRotationVector3getPreRotation()setPreRotation(Vector3)Eulerovy úhly aplikované před hlavní rotací (používá se ve FBX rigách).
postRotationVector3getPostRotation()setPostRotation(Vector3)Eulerovy úhly aplikované po hlavní rotaci.
geometricTranslationVector3getGeometricTranslation()setGeometricTranslation(Vector3)Překlad pouze lokální: ovlivňuje geometrii, ale ne podřízené uzly.
geometricScalingVector3getGeometricScaling()setGeometricScaling(Vector3)Měřítko pouze lokální: ovlivňuje geometrii, ale ne podřízené uzly.
geometricRotationVector3getGeometricRotation()setGeometricRotation(Vector3)Rotace pouze lokální: ovlivňuje geometrii, ale ne podřízené uzly.
transformMatrixMatrix4getTransformMatrix()setTransformMatrix(Matrix4)Plná kombinovaná 4x4 transformační matice. Ukládána do mezipaměti; přepočítána, když se změní jakákoli komponenta. Nastavením se rozloží zpět na překlad/měřítko/rotaci.

Fluent metody nastavení

Všechny settery vrací this, umožňující řetězení:

MethodsMethodsMethods
setTranslation(double tx, double ty, double tz)double, double, doubleNastavit pozici.
setScale(double sx, double sy, double sz)double, double, doubleNastavit měřítko.
setEulerAngles(double rx, double ry, double rz)double, double, doubleNastavit rotaci ve stupních.
setRotation(double rx, double ry, double rz, double rw)double, double, double, doubleNastavit rotaci jako kvaternion (x, y, z, w).
setPreRotation(double rx, double ry, double rz)double, double, doubleNastavte předrotaci ve stupních.
setPostRotation(double rx, double ry, double rz)double, double, doubleNastavte následnou rotaci ve stupních.
setGeometricTranslation(double x, double y, double z)double, double, doubleNastavte geometrický posun.
setGeometricScaling(double sx, double sy, double sz)double, double, doubleNastavte geometrické měřítko.
setGeometricRotation(double rx, double ry, double rz)double, double, doubleNastavte geometrickou rotaci ve stupních.

Příklady použití

Umístění uzlu

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

Rotace pomocí Eulerových úhlů

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

Rotace pomocí 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

Měřítko a pozice společně

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

Geometrický offset (Pivot offset)

Geometrické transformace posunou geometrii relativně k pivotu uzlu, aniž by ovlivnily podřízené uzly; užitečné pro vycentrování sítě v rámci jejího uzlu:

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

Načtení kombinované transformační matice

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

Viz také

 Čeština