Transform — Aspose.3D FOSS for Java

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

Transform szabályozza egy pozícióját, orientációját és méretét Node a 3D jelenetben. Minden csomópontnak pontosan egy Transform, amelyhez a node.getTransform().

public class Transform extends A3DObject

A csomópont Transform-jának elérése

import com.aspose.threed.Scene;

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

Enumerations

EnumerationsEnumerationsEnumerationsEnumerationsEnumerations
translationVector3getTranslation()setTranslation(Vector3)Pozícióeltolás a szülőcsomópont origójától. Alapértelmezett Vector3(0, 0, 0).
scalingVector3getScaling()setScaling(Vector3)Nem egységes méretezési tényező tengelyenként. Alapértelmezett Vector3(1, 1, 1).
rotationQuaterniongetRotation()setRotation(Quaternion)Rotáció egységkvaternionként. Ennek beállítása frissíti az Euler-szögeket is.
eulerAnglesVector3getEulerAngles()setEulerAngles(Vector3)Rotáció fokban (X, Y, Z) Euler-szögekként. Ennek beállítása frissíti a kvaternion rotációt is.
preRotationVector3getPreRotation()setPreRotation(Vector3)Euler-szögek a fő rotáció előtt alkalmazva (FBX rigekben használva).
postRotationVector3getPostRotation()setPostRotation(Vector3)Euler-szögek a fő rotáció után alkalmazva.
geometricTranslationVector3getGeometricTranslation()setGeometricTranslation(Vector3)Csak helyi eltolás: a geometriát befolyásolja, de a gyermekcsomópontokat nem.
geometricScalingVector3getGeometricScaling()setGeometricScaling(Vector3)Csak helyi méretezés: a geometriát befolyásolja, de a gyermekcsomópontokat nem.
geometricRotationVector3getGeometricRotation()setGeometricRotation(Vector3)Csak helyi rotáció: a geometriát befolyásolja, de a gyermekcsomópontokat nem.
transformMatrixMatrix4getTransformMatrix()setTransformMatrix(Matrix4)A teljes kombinált 4x4 transzformációs mátrix. Gyorsítótárazott; újraszámítva, ha bármely komponens változik. Beállítása visszafejti a transzlációt/méretezést/rotációt.

Fluent beállító metódusok

Minden beállító visszaadja this, lehetővé téve a láncolást:

EnumerationsEnumerationsEnumerations
setTranslation(double tx, double ty, double tz)double, double, doubleÁllítsa be a pozíciót.
setScale(double sx, double sy, double sz)double, double, doubleÁllítsa be a méretarányt.
setEulerAngles(double rx, double ry, double rz)double, double, doubleÁllítsa be a forgást fokban.
setRotation(double rx, double ry, double rz, double rw)double, double, double, doubleÁllítsa be a forgást kvaternióként (x, y, z, w).
setPreRotation(double rx, double ry, double rz)double, double, doubleÁllítsa be az előrotációt fokban.
setPostRotation(double rx, double ry, double rz)double, double, doubleÁllítsa be az utórotációt fokban.
setGeometricTranslation(double x, double y, double z)double, double, doubleÁllítsa be a geometriai transzlációt.
setGeometricScaling(double sx, double sy, double sz)double, double, doubleÁllítsa be a geometriai skálát.
setGeometricRotation(double rx, double ry, double rz)double, double, doubleÁllítsa be a geometriai forgatást fokban.

Használati példák

Csomópont pozicionálása

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

Forgatás Euler-szögekkel

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

Forgatás kvaternióval

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

Méretezés és pozicionálás együtt

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

Geometriai eltolás (pivot eltolás)

A geometriai transzformációk a geometria eltolását végzik a csomópont pivotja relatív módon, anélkül, hogy a gyermek csomópontokat befolyásolnák; hasznos egy háló (mesh) középre helyezéséhez a saját csomópontjában:

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

Olvassa be a kombinált transzformációs mátrixot

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

Lásd még

 Magyar