Transform

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

Transform kontrolira položaj, orijentaciju i skaliranje a Node u 3D sceni. Svaki čvor ima točno jedan Transform, pristupa se putem node.transform.

class Transform(A3DObject):

Pristup Transformu čvora

from aspose.threed import Scene

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

translationVector3Pomak položaja od ishodišta roditeljskog čvora. Zadano Vector3(0, 0, 0).
scalingVector3Neravnomjeran faktor skaliranja po osi. Zadano Vector3(1, 1, 1).
rotationQuaternionRotacija kao jedinični kvaternion. Postavljanje ove vrijednosti također ažurira euler_angles.
euler_anglesVector3Rotacija u stupnjevima kao (X, Y, Z) Eulerovi kutovi. Postavljanje ove vrijednosti također ažurira rotation.
pre_rotationVector3Eulerovi kutovi primijenjeni prije glavne rotacije (koristi se u FBX rigovima).
post_rotationVector3Eulerovi kutovi primijenjeni nakon glavne rotacije.
geometric_translationVector3Lokalni prijevod: utječe na geometriju, ali ne i na podčvorove.
geometric_scalingVector3Lokalno skaliranje: utječe na geometriju, ali ne i na podčvorove.
geometric_rotationVector3Lokalna rotacija: utječe na geometriju, ali ne i na podčvorove.
transform_matrixMatrix4Puni kombinirani 4×4 transformacijski matriks. Keširan; ponovno izračunat kada se promijeni bilo koja komponenta. Postavljanje ga razlaže natrag na prijevod/skalu/rotaciju.

Fluent metode postavljanja

Svi setteri vraćaju self, omogućujući lančanje:

set_translation(tx, ty, tz)float, float, floatPostavi položaj.
set_scale(sx, sy, sz)float, float, floatPostavi skaliranje.
set_euler_angles(rx, ry, rz)float, float, floatPostavi rotaciju u stupnjevima.
set_rotation(rw, rx, ry, rz)float, float, float, floatPostavi rotaciju kao kvaternion (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatPostavite predrotaciju u stupnjevima.
set_post_rotation(rx, ry, rz)float, float, floatPostavite postrotaciju u stupnjevima.
set_geometric_translation(x, y, z)float, float, floatPostavite geometrijski pomak.
set_geometric_scaling(sx, sy, sz)float, float, floatPostavite geometrijsku skalu.
set_geometric_rotation(rx, ry, rz)float, float, floatPostavite geometrijsku rotaciju u stupnjevima.

Primjeri upotrebe

Pozicioniranje čvora

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)

Rotacija pomoću Eulerovih kutova

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)

Rotacija pomoću kvaterniona

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

Skaliranje i pozicioniranje zajedno

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

Geometrijski pomak (Pivot pomak)

Geometrijski transformacije pomiču geometriju u odnosu na pivot čvora, a da ne utječu na podređene čvorove; korisno za centriranje mreže unutar njenog čvora:

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)

Čitanje kombinirane transformacijske matrice

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

Vidi također

 Hrvatski