Transform
Methods: aspose.threed (aspose-3d-foss)
Transform ελέγχει τη θέση, τον προσανατολισμό και την κλίμακα ενός Node στην 3Δ σκηνή. Κάθε κόμβος έχει ακριβώς ένα Transform, προσβάσιμο μέσω node.transform.
class Transform(A3DObject):Πρόσβαση στο Transform ενός Node
from aspose.threed import Scene
scene = Scene()
node = scene.root_node.create_child_node("box")
t = node.transform # Transform objectMethods
| Methods | Methods | Methods |
|---|---|---|
translation | Vector3 | Μετατόπιση θέσης από το αρχικό σημείο του γονικού κόμβου. Προεπιλογή Vector3(0, 0, 0). |
scaling | Vector3 | Μη ομοιόμορφος συντελεστής κλίμακας ανά άξονα. Προεπιλογή Vector3(1, 1, 1). |
rotation | Quaternion | Περιστροφή ως μοναδιαίο quaternion. Ορίζοντας αυτό ενημερώνει επίσης euler_angles. |
euler_angles | Vector3 | Περιστροφή σε μοίρες ως γωνίες Euler (X, Y, Z). Ορίζοντας αυτό ενημερώνει επίσης rotation. |
pre_rotation | Vector3 | Γωνίες Euler που εφαρμόζονται πριν από την κύρια περιστροφή (χρησιμοποιούνται σε FBX rigs). |
post_rotation | Vector3 | Γωνίες Euler που εφαρμόζονται μετά την κύρια περιστροφή. |
geometric_translation | Vector3 | Μετάφραση μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους. |
geometric_scaling | Vector3 | Κλίμακα μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους. |
geometric_rotation | Vector3 | Περιστροφή μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους. |
transform_matrix | Matrix4 | Ο πλήρης συνδυασμένος πίνακας μετασχηματισμού 4×4. Σε cache· επανυπολογίζεται όταν αλλάζει οποιοδήποτε στοιχείο. Ορίζοντας τον τον αποσυνθέτει ξανά σε μετάφραση/κλίμακα/περιστροφή. |
Μέθοδοι Fluent Setter
Όλοι οι setters επιστρέφουν self, επιτρέποντας αλυσίδωση:
| Methods | Methods | Methods |
|---|---|---|
set_translation(tx, ty, tz) | float, float, float | Ορίστε τη θέση. |
set_scale(sx, sy, sz) | float, float, float | Ορίστε την κλίμακα. |
set_euler_angles(rx, ry, rz) | float, float, float | Ορίστε την περιστροφή σε μοίρες. |
set_rotation(rw, rx, ry, rz) | float, float, float, float | Ορίστε την περιστροφή ως quaternion (w, x, y, z). |
set_pre_rotation(rx, ry, rz) | float, float, float | Ορίστε την προ-περιστροφή σε μοίρες. |
set_post_rotation(rx, ry, rz) | float, float, float | Ορίστε την μετα-περιστροφή σε μοίρες. |
set_geometric_translation(x, y, z) | float, float, float | Ορίστε τη γεωμετρική μετάθεση. |
set_geometric_scaling(sx, sy, sz) | float, float, float | Ορίστε τη γεωμετρική κλίμακα. |
set_geometric_rotation(rx, ry, rz) | float, float, float | Ορίστε τη γεωμετρική περιστροφή σε μοίρες. |
Παραδείγματα Χρήσης
Θέση Node
from aspose.threed import Scene
scene = Scene()
node = scene.root_node.create_child_node("box")
# Using fluent setters
node.transform.set_translation(5.0, 0.0, -3.0)
# Or via property assignment
from aspose.threed.utilities import Vector3
node.transform.translation = Vector3(5.0, 0.0, -3.0)Περιστροφή με γωνίες Euler
from aspose.threed import Scene
scene = Scene()
node = scene.root_node.create_child_node("rotated")
# Rotate 45° around Y axis
node.transform.set_euler_angles(0.0, 45.0, 0.0)
# Chain multiple operations
node.transform.set_translation(2.0, 0.0, 0.0).set_scale(2.0, 2.0, 2.0)Περιστροφή με Quaternion
from aspose.threed import Scene
from aspose.threed.utilities import Quaternion, Vector3
import math
scene = Scene()
node = scene.root_node.create_child_node("q-rotated")
# 90° rotation around the Y axis
half_angle = math.radians(45) # half the total rotation
q = Quaternion(math.cos(half_angle), 0.0, math.sin(half_angle), 0.0)
node.transform.rotation = q
print(f"Euler: {node.transform.euler_angles}") # synced automaticallyΚλίμακα και θέση μαζί
from aspose.threed import Scene
scene = Scene()
node = scene.root_node.create_child_node("big-offset")
(node.transform
.set_translation(10.0, 0.0, 0.0)
.set_scale(3.0, 3.0, 3.0)
.set_euler_angles(0.0, 90.0, 0.0))Γεωμετρική Μετατόπιση (Pivot Offset)
Οι γεωμετρικοί μετασχηματισμοί μετατοπίζουν τη γεωμετρία σε σχέση με το pivot του κόμβου χωρίς να επηρεάζουν τους θυγατρικούς κόμβους· χρήσιμο για κεντράρισμα ενός mesh μέσα στον κόμβο του:
from aspose.threed import Scene
scene = Scene()
node = scene.root_node.create_child_node("centered-mesh")
# Shift the mesh half a unit down so its base sits at y=0
node.transform.set_geometric_translation(0.0, -0.5, 0.0)Ανάγνωση του συνδυασμένου πίνακα Transform
from aspose.threed import Scene
scene = Scene()
node = scene.root_node.create_child_node("m")
node.transform.set_translation(1.0, 2.0, 3.0).set_euler_angles(0.0, 45.0, 0.0)
m = node.transform.transform_matrix
print(type(m)) # <class 'aspose.threed.utilities.Matrix4'>