Transform

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

Transform ovláda polohu, orientáciu a mierku Node v 3D scéne. Každý uzol má presne jeden Transform, prístupný cez node.transform.

class Transform(A3DObject):

Prístup k Transform uzla

from aspose.threed import Scene

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

Methods

MethodsMethodsMethods
translationVector3Posun polohy od pôvodu rodičovského uzla. Predvolený Vector3(0, 0, 0).
scalingVector3Nerovnomerný faktor mierky na osi. Predvolený Vector3(1, 1, 1).
rotationQuaternionRotácia ako jednotkový kvaternion. Nastavením tohto sa tiež aktualizuje euler_angles.
euler_anglesVector3Rotácia v stupňoch ako (X, Y, Z) Eulerove uhly. Nastavením tohto sa tiež aktualizuje rotation.
pre_rotationVector3Eulerove uhly aplikované pred hlavnou rotáciou (používané v FBX rigoch).
post_rotationVector3Eulerove uhly aplikované po hlavnej rotácii.
geometric_translationVector3Lokálny posun: ovplyvňuje geometriu, ale nie podriadené uzly.
geometric_scalingVector3Lokálna mierka: ovplyvňuje geometriu, ale nie podriadené uzly.
geometric_rotationVector3Lokálna rotácia: ovplyvňuje geometriu, ale nie podriadené uzly.
transform_matrixMatrix4Úplná kombinovaná 4×4 transformačná matica. Uložená v cache; prepočítaná, keď sa zmení akákoľvek zložka. Nastavením sa rozloží späť na posun/mierku/rotáciu.

Plynulé metódy nastavenia

Všetky settery vracajú self, čo umožňuje reťazenie:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatNastaviť polohu.
set_scale(sx, sy, sz)float, float, floatNastaviť mierku.
set_euler_angles(rx, ry, rz)float, float, floatNastaviť rotáciu v stupňoch.
set_rotation(rw, rx, ry, rz)float, float, float, floatNastaviť rotáciu ako kvaternion (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatNastavte predrotáciu v stupňoch.
set_post_rotation(rx, ry, rz)float, float, floatNastavte postrotáciu v stupňoch.
set_geometric_translation(x, y, z)float, float, floatNastavte geometrický posun.
set_geometric_scaling(sx, sy, sz)float, float, floatNastavte geometrickú mierku.
set_geometric_rotation(rx, ry, rz)float, float, floatNastavte geometrickú rotáciu v stupňoch.

Príklady použitia

Nastaviť polohu uzla

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)

Otočiť pomocou Eulerových uhlov

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)

Otočiť pomocou kvaternionu

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

Mierka a poloha spoločne

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

Geometrický posun (posun pivotu)

Geometrické transformácie posúvajú geometriu vzhľadom na pivot uzla bez ovplyvnenia podriadených uzlov; užitočné pre vycentrovanie siete v rámci jej uzla:

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)

Prečítajte kombinovanú maticu 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'>

Pozri tiež

 Slovenčina