Transform — Aspose.3D FOSS for Java
Enumerations: com.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.getTransform().
public class Transform extends A3DObjectMengakses Transform Node
import com.aspose.threed.Scene;
Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("box");
Transform t = node.getTransform();Enumerations
| Enumerations | Enumerations | Enumerations | Enumerations | Enumerations |
|---|---|---|---|---|
translation | Vector3 | getTranslation() | setTranslation(Vector3) | Offset posisi dari asal node induk. Default Vector3(0, 0, 0). |
scaling | Vector3 | getScaling() | setScaling(Vector3) | Faktor skala tidak seragam per sumbu. Default Vector3(1, 1, 1). |
rotation | Quaternion | getRotation() | setRotation(Quaternion) | Rotasi sebagai quaternion satuan. Menyetel ini juga memperbarui sudut Euler. |
eulerAngles | Vector3 | getEulerAngles() | setEulerAngles(Vector3) | Rotasi dalam derajat sebagai sudut Euler (X, Y, Z). Menyetel ini juga memperbarui rotasi quaternion. |
preRotation | Vector3 | getPreRotation() | setPreRotation(Vector3) | Sudut Euler diterapkan sebelum rotasi utama (digunakan dalam rig FBX). |
postRotation | Vector3 | getPostRotation() | setPostRotation(Vector3) | Sudut Euler diterapkan setelah rotasi utama. |
geometricTranslation | Vector3 | getGeometricTranslation() | setGeometricTranslation(Vector3) | Translasi hanya lokal: memengaruhi geometri tetapi tidak node anak. |
geometricScaling | Vector3 | getGeometricScaling() | setGeometricScaling(Vector3) | Skala hanya lokal: memengaruhi geometri tetapi tidak node anak. |
geometricRotation | Vector3 | getGeometricRotation() | setGeometricRotation(Vector3) | Rotasi hanya lokal: memengaruhi geometri tetapi tidak node anak. |
transformMatrix | Matrix4 | getTransformMatrix() | setTransformMatrix(Matrix4) | Matriks transformasi 4x4 gabungan penuh. Di-cache; dihitung ulang ketika komponen apa pun berubah. Menyetelnya memecah kembali menjadi translasi/skala/rotasi. |
Metode Setter Fluent
Semua setter mengembalikan this, memungkinkan chaining:
| Enumerations | Enumerations | Enumerations |
|---|---|---|
setTranslation(double tx, double ty, double tz) | double, double, double | Atur posisi. |
setScale(double sx, double sy, double sz) | double, double, double | Atur skala. |
setEulerAngles(double rx, double ry, double rz) | double, double, double | Atur rotasi dalam derajat. |
setRotation(double rx, double ry, double rz, double rw) | double, double, double, double | Atur rotasi sebagai quaternion (x, y, z, w). |
setPreRotation(double rx, double ry, double rz) | double, double, double | Atur pra-rotasi dalam derajat. |
setPostRotation(double rx, double ry, double rz) | double, double, double | Atur pasca-rotasi dalam derajat. |
setGeometricTranslation(double x, double y, double z) | double, double, double | Atur translasi geometris. |
setGeometricScaling(double sx, double sy, double sz) | double, double, double | Atur skala geometris. |
setGeometricRotation(double rx, double ry, double rz) | double, double, double | Atur rotasi geometris dalam derajat. |
Contoh Penggunaan
Posisikan Node
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 automaticallySkala dan Posisi 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 Geometris (Offset Pivot)
Transformasi geometris menggeser geometri relatif terhadap pivot node tanpa memengaruhi node anak; berguna untuk memusatkan mesh di dalam node-nya:
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