Transform

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

Transform mengontrol posisi, orientasi, dan skala dari sebuah Node di dalam adegan 3D. Setiap node memiliki tepat satu Transform, diakses melalui node.transform.

class Transform(A3DObject):

Mengakses Transformasi Node

from aspose.threed import Scene

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

Methods

MethodsMethodsMethods
translationVector3Offset Posisi dari asal node induk. Default Vector3(0, 0, 0).
scalingVector3Faktor skala tidak seragam per sumbu. Default Vector3(1, 1, 1).
rotationQuaternionRotasi sebagai kuaternion unit. Menyetel ini juga memperbarui euler_angles.
euler_anglesVector3Rotasi dalam derajat sebagai sudut Euler (X, Y, Z). Menyetel ini juga memperbarui rotation.
pre_rotationVector3Sudut Euler yang diterapkan sebelum rotasi utama (digunakan dalam rig FBX).
post_rotationVector3Sudut Euler yang diterapkan setelah rotasi utama.
geometric_translationVector3Translasi hanya lokal: memengaruhi geometri tetapi tidak node anak.
geometric_scalingVector3Skala hanya lokal: memengaruhi geometri tetapi tidak node anak.
geometric_rotationVector3Rotasi hanya lokal: memengaruhi geometri tetapi tidak node anak.
transform_matrixMatrix4Matriks transformasi 4×4 gabungan penuh. Di-cache; dihitung ulang ketika komponen apa pun berubah. Menyetelnya mendekomposisi kembali menjadi translasi/skala/rotasi.

Metode Setter Fluent

Semua setter mengembalikan self, memungkinkan chaining:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatAtur posisi.
set_scale(sx, sy, sz)float, float, floatAtur skala.
set_euler_angles(rx, ry, rz)float, float, floatAtur rotasi dalam derajat.
set_rotation(rw, rx, ry, rz)float, float, float, floatAtur rotasi sebagai quaternion (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatAtur pra-rotasi dalam derajat.
set_post_rotation(rx, ry, rz)float, float, floatAtur pasca-rotasi dalam derajat.
set_geometric_translation(x, y, z)float, float, floatAtur translasi geometris.
set_geometric_scaling(sx, sy, sz)float, float, floatAtur skala geometris.
set_geometric_rotation(rx, ry, rz)float, float, floatAtur rotasi geometris dalam derajat.

Contoh Penggunaan

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

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 Posisi 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 Geometris (Offset Pivot)

Transformasi geometris menggeser geometri relatif terhadap pivot node tanpa memengaruhi node anak; berguna untuk memusatkan mesh di dalam node-nya:

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 Transformasi 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 Indonesia