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
| Example | Example | Example | Example | Example |
|---|---|---|---|---|
translation | Vector3 | getTranslation() | setTranslation(Vector3) | Μετατόπιση θέσης από το αρχικό σημείο του γονικού κόμβου. Προεπιλογή Vector3(0, 0, 0). |
scaling | Vector3 | getScaling() | setScaling(Vector3) | Μη ομοιόμορφος συντελεστής κλίμακας ανά άξονα. Προεπιλογή Vector3(1, 1, 1). |
rotation | Quaternion | getRotation() | setRotation(Quaternion) | Περιστροφή ως μοναδιαίο quaternion. Η ρύθμιση αυτού ενημερώνει επίσης τις γωνίες Euler. |
eulerAngles | Vector3 | getEulerAngles() | setEulerAngles(Vector3) | Περιστροφή σε μοίρες ως γωνίες Euler (X, Y, Z). Η ρύθμιση αυτού ενημερώνει επίσης την περιστροφή quaternion. |
preRotation | Vector3 | getPreRotation() | setPreRotation(Vector3) | Γωνίες Euler που εφαρμόζονται πριν από την κύρια περιστροφή (χρησιμοποιείται σε FBX rigs). |
postRotation | Vector3 | getPostRotation() | setPostRotation(Vector3) | Γωνίες Euler που εφαρμόζονται μετά την κύρια περιστροφή. |
geometricTranslation | Vector3 | getGeometricTranslation() | setGeometricTranslation(Vector3) | Μετάφραση μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους. |
geometricScaling | Vector3 | getGeometricScaling() | setGeometricScaling(Vector3) | Κλίμακα μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους. |
geometricRotation | Vector3 | getGeometricRotation() | setGeometricRotation(Vector3) | Περιστροφή μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους. |
transformMatrix | Matrix4 | getTransformMatrix() | setTransformMatrix(Matrix4) | Ο πλήρης συνδυασμένος πίνακας μετασχηματισμού 4x4. Αποθηκεύεται στην κρυφή μνήμη· επανυπολογίζεται όταν αλλάζει οποιοδήποτε στοιχείο. Η ρύθμιση του αποσυνθέτει ξανά σε μετάφραση/κλίμακα/περιστροφή. |
Μέθοδοι Fluent Setter
Όλοι οι setters επιστρέφουν this, επιτρέποντας αλυσιδωτή κλήση:
| Example | Example | Example |
|---|---|---|
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