Transform

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

Transform kontroluje pozycję, orientację i skalę Node w scenie 3D. Każdy węzeł ma dokładnie jeden Transform, dostępny poprzez node.transform.

class Transform(A3DObject):

Dostęp do Transformacji węzła

from aspose.threed import Scene

scene = Scene()
node = scene.root_node.create_child_node("box")
t = node.transform     # Transform object

Methods

MethodsMethodsMethods
translationVector3Przesunięcie pozycji względem początku węzła nadrzędnego. Domyślnie Vector3(0, 0, 0).
scalingVector3Niejednorodny współczynnik skali dla każdej osi. Domyślnie Vector3(1, 1, 1).
rotationQuaternionRotacja jako jednostkowy kwaternion. Ustawienie tego również aktualizuje euler_angles.
euler_anglesVector3Rotacja w stopniach jako kąty Eulera (X, Y, Z). Ustawienie tego również aktualizuje rotation.
pre_rotationVector3Kąty Eulera stosowane przed główną rotacją (używane w rigach FBX).
post_rotationVector3Kąty Eulera stosowane po głównej rotacji.
geometric_translationVector3Tłumaczenie tylko lokalne: wpływa na geometrię, ale nie na węzły potomne.
geometric_scalingVector3Skalowanie tylko lokalne: wpływa na geometrię, ale nie na węzły potomne.
geometric_rotationVector3Obrót tylko lokalny: wpływa na geometrię, ale nie na węzły potomne.
transform_matrixMatrix4Pełna połączona macierz transformacji 4×4. Buforowana; przeliczana ponownie, gdy zmieni się którykolwiek składnik. Ustawienie jej powoduje dekompozycję z powrotem do translacji/skali/obrotu.

Metody Fluent Setter

Wszystkie settery zwracają self, umożliwiając łańcuchowanie:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatUstaw pozycję.
set_scale(sx, sy, sz)float, float, floatUstaw skalę.
set_euler_angles(rx, ry, rz)float, float, floatUstaw obrót w stopniach.
set_rotation(rw, rx, ry, rz)float, float, float, floatUstaw obrót jako kwaternion (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatUstaw przedobrót w stopniach.
set_post_rotation(rx, ry, rz)float, float, floatUstaw poobrót w stopniach.
set_geometric_translation(x, y, z)float, float, floatUstaw przesunięcie geometryczne.
set_geometric_scaling(sx, sy, sz)float, float, floatUstaw skalę geometryczną.
set_geometric_rotation(rx, ry, rz)float, float, floatUstaw obrót geometryczny w stopniach.

Przykłady użycia

Pozycjonowanie węzła

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)

Obrót za pomocą kątów Eulera

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)

Obrót za pomocą kwaternionu

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

Skalowanie i pozycjonowanie razem

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

Przesunięcie geometryczne (przesunięcie pivotu)

Transformacje geometryczne przesuwają geometrię względem pivotu węzła, nie wpływając na węzły potomne; przydatne do wyśrodkowania siatki w jej węźle:

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)

Odczytanie połączonej macierzy transformacji

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

Zobacz także

 Polski