Transform — Aspose.3D FOSS for Java

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

Transform موقعیت، جهت‌گیری و مقیاس یک را کنترل می‌کند Node در صحنهٔ سه‌بعدی. هر گره دقیقاً یک Transform, که از طریق node.getTransform().

public class Transform extends A3DObject

دسترسی به Transform گره

import com.aspose.threed.Scene;

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

Example

ExampleExampleExampleExampleExample
translationVector3getTranslation()setTranslation(Vector3)جابه‌جایی موقعیت نسبت به مبدأ گرهٔ والد. پیش‌فرض Vector3(0, 0, 0).
scalingVector3getScaling()setScaling(Vector3)ضریب مقیاس غیر یکنواخت برای هر محور. پیش‌فرض Vector3(1, 1, 1).
rotationQuaterniongetRotation()setRotation(Quaternion)چرخش به صورت یک کواترنیون واحد. تنظیم این مقدار همچنین زاویه‌های اویلر را به‌روز می‌کند.
eulerAnglesVector3getEulerAngles()setEulerAngles(Vector3)چرخش به درجه به صورت زاویه‌های اویلر (X, Y, Z). تنظیم این مقدار همچنین چرخش کواترنیونی را به‌روز می‌کند.
preRotationVector3getPreRotation()setPreRotation(Vector3)زاویه‌های اویلر که قبل از چرخش اصلی اعمال می‌شوند (در rigهای FBX استفاده می‌شود).
postRotationVector3getPostRotation()setPostRotation(Vector3)زاویه‌های اویلر که پس از چرخش اصلی اعمال می‌شوند.
geometricTranslationVector3getGeometricTranslation()setGeometricTranslation(Vector3)ترجمهٔ محلی‌تنها: بر هندسه تأثیر می‌گذارد اما بر گره‌های فرزند تأثیری ندارد.
geometricScalingVector3getGeometricScaling()setGeometricScaling(Vector3)مقیاس‌محلی‌تنها: بر هندسه تأثیر می‌گذارد اما بر گره‌های فرزند تأثیری ندارد.
geometricRotationVector3getGeometricRotation()setGeometricRotation(Vector3)چرخش‌محلی‌تنها: بر هندسه تأثیر می‌گذارد اما بر گره‌های فرزند تأثیری ندارد.
transformMatrixMatrix4getTransformMatrix()setTransformMatrix(Matrix4)ماتریس تبدیل ترکیبی کامل ۴×۴. کش شده؛ هنگام تغییر هر مؤلفه دوباره محاسبه می‌شود. تنظیم آن به‌صورت خودکار به ترجمه/مقیاس/چرخش تجزیه می‌شود.

متدهای تنظیم‌کنندهٔ Fluent

تمام متدهای تنظیم‌کننده مقدار باز می‌گردانند this,، که امکان زنجیره‌سازی را می‌دهد:

ExampleExampleExample
setTranslation(double tx, double ty, double tz)double, double, doubleتنظیم موقعیت.
setScale(double sx, double sy, double sz)double, double, doubleتنظیم مقیاس.
setEulerAngles(double rx, double ry, double rz)double, double, doubleتنظیم چرخش بر حسب درجه.
setRotation(double rx, double ry, double rz, double rw)double, double, double, doubleتنظیم چرخش به‌صورت یک کواترنیون (x, y, z, w).
setPreRotation(double rx, double ry, double rz)double, double, doubleچرخش پیشین را بر حسب درجه تنظیم کنید.
setPostRotation(double rx, double ry, double rz)double, double, doubleچرخش پسین را بر حسب درجه تنظیم کنید.
setGeometricTranslation(double x, double y, double z)double, double, doubleانتقال هندسی را تنظیم کنید.
setGeometricScaling(double sx, double sy, double sz)double, double, doubleمقیاس هندسی را تنظیم کنید.
setGeometricRotation(double rx, double ry, double rz)double, double, doubleچرخش هندسی را بر حسب درجه تنظیم کنید.

مثال‌های استفاده

موقعیت‌دهی به یک گره

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

چرخش با زاویه‌های اویلر

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

چرخش با یک کواترنیون

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

مقیاس و موقعیت به‌صورت همزمان

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

جابه‌جایی هندسی (Pivot Offset)

تبدیل‌های هندسی، هندسه را نسبت به نقطهٔ محوری گره جابه‌جا می‌کنند بدون اینکه بر گره‌های فرزند تأثیر بگذارند؛ برای مرکز کردن یک مش درون گرهٔ خود مفید است:

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

خواندن ماتریس ترکیبی Transform

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

موارد مرتبط

 فارسی