Transform — Aspose.3D FOSS for Java

Enumerations: com.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.getTransform().

public class Transform extends A3DObject

Mengakses Transform Nod

import com.aspose.threed.Scene;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("box");
Transform t = node.getTransform();

Enumerations

EnumerationsEnumerationsEnumerationsEnumerationsEnumerations
translationVector3getTranslation()setTranslation(Vector3)Offset kedudukan dari asal nod induk. Lalai Vector3(0, 0, 0).
scalingVector3getScaling()setScaling(Vector3)Faktor skala tidak seragam per paksi. Lalai Vector3(1, 1, 1).
rotationQuaterniongetRotation()setRotation(Quaternion)Putaran sebagai kuaternion unit. Menetapkan ini juga mengemas kini sudut Euler.
eulerAnglesVector3getEulerAngles()setEulerAngles(Vector3)Putaran dalam darjah sebagai sudut Euler (X, Y, Z). Menetapkan ini juga mengemas kini putaran kuaternion.
preRotationVector3getPreRotation()setPreRotation(Vector3)Sudut Euler yang diterapkan sebelum putaran utama (digunakan dalam rig FBX).
postRotationVector3getPostRotation()setPostRotation(Vector3)Sudut Euler yang diterapkan selepas putaran utama.
geometricTranslationVector3getGeometricTranslation()setGeometricTranslation(Vector3)Terjemahan hanya setempat: mempengaruhi geometri tetapi tidak nod anak.
geometricScalingVector3getGeometricScaling()setGeometricScaling(Vector3)Skala hanya setempat: mempengaruhi geometri tetapi tidak nod anak.
geometricRotationVector3getGeometricRotation()setGeometricRotation(Vector3)Putaran hanya setempat: mempengaruhi geometri tetapi tidak nod anak.
transformMatrixMatrix4getTransformMatrix()setTransformMatrix(Matrix4)Matriks transformasi 4x4 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 this, membolehkan penjangkitan:

EnumerationsEnumerationsEnumerations
setTranslation(double tx, double ty, double tz)double, double, doubleTetapkan kedudukan.
setScale(double sx, double sy, double sz)double, double, doubleTetapkan skala.
setEulerAngles(double rx, double ry, double rz)double, double, doubleTetapkan putaran dalam darjah.
setRotation(double rx, double ry, double rz, double rw)double, double, double, doubleTetapkan putaran sebagai quaternion (x, y, z, w).
setPreRotation(double rx, double ry, double rz)double, double, doubleTetapkan pra-putar dalam darjah.
setPostRotation(double rx, double ry, double rz)double, double, doubleTetapkan pasca-putar dalam darjah.
setGeometricTranslation(double x, double y, double z)double, double, doubleTetapkan terjemahan geometri.
setGeometricScaling(double sx, double sy, double sz)double, double, doubleTetapkan skala geometri.
setGeometricRotation(double rx, double ry, double rz)double, double, doubleTetapkan putaran geometri dalam darjah.

Contoh Penggunaan

Posisikan Nod

import com.aspose.threed.Scene;
import com.aspose.threed.*;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("box");

// Using fluent setters
node.getTransform().setTranslation(5.0, 0.0, -3.0);

// Or via property setter
node.getTransform().setTranslation(new Vector3(5.0, 0.0, -3.0));

Putar dengan Sudut Euler

import com.aspose.threed.Scene;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("rotated");

// Rotate 45 degrees around Y axis
node.getTransform().setEulerAngles(0.0, 45.0, 0.0);

// Chain multiple operations
node.getTransform()
    .setTranslation(2.0, 0.0, 0.0)
    .setScale(2.0, 2.0, 2.0);

Putar dengan Quaternion

import com.aspose.threed.Scene;
import com.aspose.threed.*;
import com.aspose.threed.*;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("q-rotated");

// 90 degrees rotation around the Y axis
double halfAngle = Math.toRadians(45);   // half the total rotation
Quaternion q = new Quaternion(Math.cos(halfAngle), 0.0, Math.sin(halfAngle), 0.0);
node.getTransform().setRotation(q);

System.out.println("Euler: " + node.getTransform().getEulerAngles());   // synced automatically

Skala dan Kedudukan Bersama-sama

import com.aspose.threed.Scene;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("big-offset");

node.getTransform()
    .setTranslation(10.0, 0.0, 0.0)
    .setScale(3.0, 3.0, 3.0)
    .setEulerAngles(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:

import com.aspose.threed.Scene;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("centered-mesh");

// Shift the mesh half a unit down so its base sits at y=0
node.getTransform().setGeometricTranslation(0.0, -0.5, 0.0);

Baca Matriks Transform Gabungan

import com.aspose.threed.Scene;
import com.aspose.threed.*;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("m");
node.getTransform().setTranslation(1.0, 2.0, 3.0);
node.getTransform().setEulerAngles(0.0, 45.0, 0.0);

Matrix4 m = node.getTransform().getTransformMatrix();
System.out.println(m.getClass().getName());   // com.aspose.threed.Matrix4

Lihat Juga

 Bahasa Melayu