Transform — Aspose.3D FOSS for Java

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

Transform ελέγχει τη θέση, τον προσανατολισμό και την κλίμακα ενός Node στην 3Δ σκηνή. Κάθε κόμβος έχει ακριβώς ένα Transform, προσπελαζόμενο μέσω node.getTransform().

public class Transform extends A3DObject

Πρόσβαση στο Transform ενός Node

import com.aspose.threed.Scene;

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

Example

ExampleExampleExampleExampleExample
translationVector3getTranslation()setTranslation(Vector3)Μετατόπιση θέσης από το αρχικό σημείο του γονικού κόμβου. Προεπιλογή Vector3(0, 0, 0).
scalingVector3getScaling()setScaling(Vector3)Μη ομοιόμορφος συντελεστής κλίμακας ανά άξονα. Προεπιλογή Vector3(1, 1, 1).
rotationQuaterniongetRotation()setRotation(Quaternion)Περιστροφή ως μοναδιαίο quaternion. Η ρύθμιση αυτού ενημερώνει επίσης τις γωνίες Euler.
eulerAnglesVector3getEulerAngles()setEulerAngles(Vector3)Περιστροφή σε μοίρες ως γωνίες Euler (X, Y, Z). Η ρύθμιση αυτού ενημερώνει επίσης την περιστροφή quaternion.
preRotationVector3getPreRotation()setPreRotation(Vector3)Γωνίες Euler που εφαρμόζονται πριν από την κύρια περιστροφή (χρησιμοποιείται σε FBX rigs).
postRotationVector3getPostRotation()setPostRotation(Vector3)Γωνίες Euler που εφαρμόζονται μετά την κύρια περιστροφή.
geometricTranslationVector3getGeometricTranslation()setGeometricTranslation(Vector3)Μετάφραση μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους.
geometricScalingVector3getGeometricScaling()setGeometricScaling(Vector3)Κλίμακα μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους.
geometricRotationVector3getGeometricRotation()setGeometricRotation(Vector3)Περιστροφή μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους.
transformMatrixMatrix4getTransformMatrix()setTransformMatrix(Matrix4)Ο πλήρης συνδυασμένος πίνακας μετασχηματισμού 4x4. Αποθηκεύεται στην κρυφή μνήμη· επανυπολογίζεται όταν αλλάζει οποιοδήποτε στοιχείο. Η ρύθμιση του αποσυνθέτει ξανά σε μετάφραση/κλίμακα/περιστροφή.

Μέθοδοι Fluent Setter

Όλοι οι setters επιστρέφουν this, επιτρέποντας αλυσιδωτή κλήση:

ExampleExampleExample
setTranslation(double tx, double ty, double tz)double, double, doubleΟρίστε τη θέση.
setScale(double sx, double sy, double sz)double, double, doubleΟρίστε την κλίμακα.
setEulerAngles(double rx, double ry, double rz)double, double, doubleΟρίστε την περιστροφή σε μοίρες.
setRotation(double rx, double ry, double rz, double rw)double, double, double, doubleΟρίστε την περιστροφή ως quaternion (x, y, z, w).
setPreRotation(double rx, double ry, double rz)double, double, doubleΟρίστε την προ-περιστροφή σε μοίρες.
setPostRotation(double rx, double ry, double rz)double, double, doubleΟρίστε την μετα-περιστροφή σε μοίρες.
setGeometricTranslation(double x, double y, double z)double, double, doubleΟρίστε τη γεωμετρική μετάθεση.
setGeometricScaling(double sx, double sy, double sz)double, double, doubleΟρίστε τη γεωμετρική κλίμακα.
setGeometricRotation(double rx, double ry, double rz)double, double, doubleΟρίστε τη γεωμετρική περιστροφή σε μοίρες.

Παραδείγματα Χρήσης

Θέση 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));

Περιστροφή με γωνίες 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);

Περιστροφή με 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

Κλίμακα και Θέση μαζί

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

Γεωμετρική Μετατόπιση (Pivot Offset)

Οι γεωμετρικοί μετασχηματισμοί μετατοπίζουν τη γεωμετρία σε σχέση με το pivot του κόμβου χωρίς να επηρεάζουν τους θυγατρικούς κόμβους· χρήσιμο για κεντράρισμα ενός mesh μέσα στον κόμβο του:

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

Ανάγνωση του Συνδυασμένου Πίνακα Transform

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

Δείτε επίσης

 Ελληνικά