Transform

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

Transform kiểm soát vị trí, hướng và tỉ lệ của một Node trong cảnh 3D. Mỗi nút có đúng một Transform, được truy cập qua node.transform.

class Transform(A3DObject):

Truy cập Transform của Node

from aspose.threed import Scene

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

Methods

MethodsMethodsMethods
translationVector3Vị trí offset so với gốc của nút cha. Mặc định Vector3(0, 0, 0).
scalingVector3Hệ số tỉ lệ không đồng nhất theo mỗi trục. Mặc định Vector3(1, 1, 1).
rotationQuaternionXoay dưới dạng quaternion đơn vị. Đặt giá trị này cũng sẽ cập nhật euler_angles.
euler_anglesVector3Xoay tính bằng độ dưới dạng góc Euler (X, Y, Z). Đặt giá trị này cũng sẽ cập nhật rotation.
pre_rotationVector3Góc Euler được áp dụng trước phép quay chính (được dùng trong rig FBX).
post_rotationVector3Góc Euler được áp dụng sau phép quay chính.
geometric_translationVector3Dịch chuyển chỉ cục bộ: ảnh hưởng đến hình học nhưng không ảnh hưởng đến các nút con.
geometric_scalingVector3Tỉ lệ chỉ cục bộ: ảnh hưởng đến hình học nhưng không ảnh hưởng đến các nút con.
geometric_rotationVector3Xoay chỉ cục bộ: ảnh hưởng đến hình học nhưng không ảnh hưởng đến các nút con.
transform_matrixMatrix4Ma trận biến đổi 4×4 đầy đủ được kết hợp. Được lưu trong bộ nhớ đệm; tính lại khi bất kỳ thành phần nào thay đổi. Khi đặt giá trị, nó sẽ tách ra lại thành dịch chuyển/tỉ lệ/xoay.

Các phương thức Setter dạng fluent

Tất cả các hàm setter trả về self, cho phép chuỗi lệnh:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatĐặt vị trí.
set_scale(sx, sy, sz)float, float, floatĐặt tỷ lệ.
set_euler_angles(rx, ry, rz)float, float, floatĐặt góc quay tính bằng độ.
set_rotation(rw, rx, ry, rz)float, float, float, floatĐặt góc quay dưới dạng quaternion (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatĐặt góc quay trước tính bằng độ.
set_post_rotation(rx, ry, rz)float, float, floatĐặt góc quay sau tính bằng độ.
set_geometric_translation(x, y, z)float, float, floatĐặt phép dịch hình học.
set_geometric_scaling(sx, sy, sz)float, float, floatĐặt tỷ lệ hình học.
set_geometric_rotation(rx, ry, rz)float, float, floatĐặt góc quay hình học tính bằng độ.

Ví dụ sử dụng

Đặt vị trí cho 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)

Xoay bằng góc 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)

Xoay bằng 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

Thay đổi tỉ lệ và vị trí cùng lúc

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

Độ dịch hình học (Pivot Offset)

Các biến đổi hình học di chuyển hình học so với pivot của node mà không ảnh hưởng tới các node con; hữu ích để căn giữa một mesh trong node của nó:

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)

Đọc ma trận Transform kết hợp

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

Xem thêm

 Tiếng Việt