Transform — Aspose.3D FOSS for Python API Reference

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

Transform mengawal kedudukan, orientasi, dan skala sesuatu Node dalam adegan 3D. Setiap nod mempunyai tepat satu Transform, diakses melalui node.transform.

class Transform(A3DObject):

Mengakses Transform Nod

from aspose.threed import Scene

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

translationVector3Offset kedudukan dari asal nod induk. Lalai Vector3(0, 0, 0).
scalingVector3Faktor skala tidak seragam per paksi. Lalai Vector3(1, 1, 1).
rotationQuaternionPutaran sebagai kuaternion unit. Menetapkan ini juga mengemas kini euler_angles.
euler_anglesVector3Putaran dalam darjah sebagai sudut Euler (X, Y, Z). Menetapkan ini juga mengemas kini rotation.
pre_rotationVector3Sudut Euler yang diterapkan sebelum putaran utama (digunakan dalam rig FBX).
post_rotationVector3Sudut Euler yang diterapkan selepas putaran utama.
geometric_translationVector3Terjemahan hanya setempat: mempengaruhi geometri tetapi tidak nod anak.
geometric_scalingVector3Skala hanya setempat: mempengaruhi geometri tetapi tidak nod anak.
geometric_rotationVector3Putaran hanya setempat: mempengaruhi geometri tetapi tidak nod anak.
transform_matrixMatrix4Matriks transformasi 4×4 gabungan penuh. Disimpan dalam cache; dikira semula apabila mana-mana komponen berubah. Menetapkannya memecah kembali kepada terjemahan/skala/putaran.

Kaedah Setter Beralir

Semua penetap mengembalikan self, membolehkan penjangkitan:

set_translation(tx, ty, tz)float, float, floatTetapkan kedudukan.
set_scale(sx, sy, sz)float, float, floatTetapkan skala.
set_euler_angles(rx, ry, rz)float, float, floatTetapkan putaran dalam darjah.
set_rotation(rw, rx, ry, rz)float, float, float, floatTetapkan putaran sebagai quaternion (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatTetapkan pra-putar dalam darjah.
set_post_rotation(rx, ry, rz)float, float, floatTetapkan pasca-putar dalam darjah.
set_geometric_translation(x, y, z)float, float, floatTetapkan terjemahan geometri.
set_geometric_scaling(sx, sy, sz)float, float, floatTetapkan skala geometri.
set_geometric_rotation(rx, ry, rz)float, float, floatTetapkan putaran geometri dalam darjah.

Contoh Penggunaan

Posisikan Nod

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)

Putar dengan Sudut 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)

Putar dengan 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

Skala dan Kedudukan Bersama

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

Offset Geometrik (Offset Pivot)

Transformasi geometrik mengalihkan geometri relatif kepada pivot nod tanpa menjejaskan nod anak; berguna untuk menengahkan mesh dalam nodnya:

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)

Baca Matriks Transform Gabungan

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

Lihat Juga

 Bahasa Melayu