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 object

Methods

MethodsMethodsMethods
translationVector3Μετατόπιση θέσης από το αρχικό σημείο του γονικού κόμβου. Προεπιλογή Vector3(0, 0, 0).
scalingVector3Μη ομοιόμορφος συντελεστής κλίμακας ανά άξονα. Προεπιλογή Vector3(1, 1, 1).
rotationQuaternionΠεριστροφή ως μοναδιαίο quaternion. Ορίζοντας αυτό ενημερώνει επίσης euler_angles.
euler_anglesVector3Περιστροφή σε μοίρες ως γωνίες Euler (X, Y, Z). Ορίζοντας αυτό ενημερώνει επίσης rotation.
pre_rotationVector3Γωνίες Euler που εφαρμόζονται πριν από την κύρια περιστροφή (χρησιμοποιούνται σε FBX rigs).
post_rotationVector3Γωνίες Euler που εφαρμόζονται μετά την κύρια περιστροφή.
geometric_translationVector3Μετάφραση μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους.
geometric_scalingVector3Κλίμακα μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους.
geometric_rotationVector3Περιστροφή μόνο τοπική: επηρεάζει τη γεωμετρία αλλά όχι τους θυγατρικούς κόμβους.
transform_matrixMatrix4Ο πλήρης συνδυασμένος πίνακας μετασχηματισμού 4×4. Σε cache· επανυπολογίζεται όταν αλλάζει οποιοδήποτε στοιχείο. Ορίζοντας τον τον αποσυνθέτει ξανά σε μετάφραση/κλίμακα/περιστροφή.

Μέθοδοι Fluent Setter

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

MethodsMethodsMethods
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'>

Δείτε επίσης

 Ελληνικά