Transform

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

Transform контролира позицията, ориентацията и мащаба на Node в 3D сцената. Всеки възел има точно един Transform, достъпен чрез node.transform.

class Transform(A3DObject):

Достъпване на Transform на възел

from aspose.threed import Scene

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

Methods

MethodsMethodsMethods
translationVector3Отместване на позицията от произхода на родителския възел. По подразбиране Vector3(0, 0, 0).
scalingVector3Нееднороден фактор на мащабиране за всяка ос. По подразбиране Vector3(1, 1, 1).
rotationQuaternionВъртене като единичен кватернион. Задаването му също актуализира euler_angles.
euler_anglesVector3Въртене в градуси като (X, Y, Z) ъгли на Ойлер. Задаването му също актуализира rotation.
pre_rotationVector3Ейлерови ъгли, приложени преди главната ротация (използвани в FBX rigs).
post_rotationVector3Ейлерови ъгли, приложени след главната ротация.
geometric_translationVector3Локален само транслационен: влияе върху геометрията, но не и върху дъщерните възли.
geometric_scalingVector3Локален само мащаб: влияе върху геометрията, но не и върху дъщерните възли.
geometric_rotationVector3Локален само ротация: влияе върху геометрията, но не и върху дъщерните възли.
transform_matrixMatrix4Пълната комбинирана 4×4 трансформационна матрица. Кеширана; преизчислява се, когато се промени който и да е компонент. Задаването ѝ я разлага обратно на транслация/мащаб/ротация.

Fluent методи за задаване

Всички сетъри връщат self, позволявайки верижане:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatЗадайте позиция.
set_scale(sx, sy, sz)float, float, floatЗадайте мащаб.
set_euler_angles(rx, ry, rz)float, float, floatЗадайте завъртане в градуси.
set_rotation(rw, rx, ry, rz)float, float, float, floatЗадайте завъртане като кватернион (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatЗадайте предварително завъртане в градуси.
set_post_rotation(rx, ry, rz)float, float, floatЗадайте последващо завъртане в градуси.
set_geometric_translation(x, y, z)float, float, floatЗадайте геометрично преместване.
set_geometric_scaling(sx, sy, sz)float, float, floatЗадайте геометричен мащаб.
set_geometric_rotation(rx, ry, rz)float, float, floatЗадайте геометрично завъртане в градуси.

Примери за употреба

Позициониране на възел

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)

Въртене с ъгли на Юлер

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)

Въртене с кватернион

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

Мащабиране и позициониране заедно

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

Геометрично отместване (Pivot Offset)

Геометричните трансформации преместват геометрията спрямо pivot-а на възела, без да засягат дъщерните възли; полезно е за центриране на мрежа (mesh) в рамките на нейния възел:

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)

Прочетете комбинираната матрица на трансформация

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

Вижте също

 Български