مقدمه

Aspose.3D FOSS برای TypeScript (@aspose/3d) یک کتابخانه فرمت فایل 3D متن‌باز با مجوز MIT است که عمدتاً برای Node.js طراحی شده است. توسعه‌دهندگانی که ویورهای مدل 3D، مبدل‌های فرمت، ابزارهای پردازش هندسه یا خطوط لوله 3D سمت سرور می‌سازند می‌توانند آن را با یک فرمان نصب کنند (نگاه کنید به راهنمای نصب) و بلافاصله شروع به بارگذاری، ساخت و استخراج محتوای 3D کنند. این کتابخانه از require('fs') و Buffer در Node.js استفاده می‌کند؛ استفاده در مرورگر نیاز به شیم‌های مناسب برای آن APIها دارد و به‌طور رسمی پشتیبانی نمی‌شود.

این کتابخانه فرمت‌های تبادل اصلی — OBJ، glTF 2.0 / GLB، STL، 3MF و COLLADA را برای هر دو عملیات واردات و صادرات پشتیبانی می‌کند. کلاس‌های واردکننده/صادرکننده FBX موجود هستند اما هنوز به تشخیص خودکار فرمت متصل نشده‌اند. API گراف صحنه مدل شناخته‌شده در ابزارهای تدوین 3D را بازتاب می‌دهد: یک Scene شامل یک rootNode است، هر Node می‌تواند گره‌های فرزند و اشیای موجودیت (Mesh، Camera، Light) را حمل کند، و سلسله‌مراتب تبدیلات به‌صورت کامل برای خواندن و نوشتن در دسترس است.

ویژگی‌های کلیدی

  • ورودی/خروجی چندفرمت: واردات و صادرات OBJ (با .mtl مواد)، glTF 2.0 / GLB، STL (باینری و ASCII)، 3MF، و COLLADA از مسیرهای فایل و در حافظه Buffer اشیاء. پشتیبانی از FBX هنوز به تشخیص خودکار متصل نشده است.
  • گراف صحنه API: Scene, Node, Mesh, Camera, Light سلسله‌مراتبی با مدیریت کامل والد/فرزند; پیمایش گره‌ها به صورت بازگشتی از طریق node.childNodes
  • سیستم مواد PBR: مواد Lambert، Phong و PBR (متالیک/خشنی) قابل دسترسی از طریق node.material
  • عملیات مش: دسترسی به داده‌های رأس خام از طریق mesh.controlPoints (آرایه‌ای از Vector4), شاخص‌های چندضلعی از طریق mesh.polygonCount, و کانال‌های عنصر رأس از طریق mesh.getElement()
  • ابزارهای ریاضی: Vector2, Vector3, Vector4, Matrix4, Quaternion, و انواع جعبه‌های محدود برای محاسبات فضایی
  • سیستم انیمیشن: انیمیشن کلید-فریم با AnimationClip, AnimationChannel، و منحنی‌های درون‌یابی (خطی، Bezier، TCB spline)
  • گزینه‌های مخصوص فرمت: به‌ازای هر فرمت LoadOptions / SaveOptions کلاس‌ها وارونگی مختصات، مقیاس، بارگذاری مواد و موارد دیگر را کنترل می‌کنند

شروع کار

بسته را از منبع بسازید. Node.js 18 یا بالاتر مورد نیاز است؛ TypeScript 5.0+ توصیه می‌شود.

git clone https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-TypeScript.git
cd Aspose.3D-FOSS-for-TypeScript
npm install
npm run build

یک فایل OBJ را بارگذاری کنید و صحنه را بررسی کنید:

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true;
scene.open('model.obj', options);

for (const node of scene.rootNode.childNodes) {
    if (node.entity && 'controlPoints' in node.entity) {
        const mesh = node.entity as any;
        console.log(`Mesh "${node.name}": ${mesh.controlPoints.length} vertices`);
    }
}

گراف صحنه API

هر صحنه‌ای یک درخت از اشیای Node است که ریشه آن در scene.rootNode قرار دارد. سلسله‌مراتب را با addChildNode() بسازید، موجودیت‌هایی مانند Camera یا Light را از طریق ویژگی entity به یک گره متصل کنید، و تبدیل محلی یا جهانی هر گره را از طریق transform و globalTransform بخوانید.

import { Scene, Node, Camera, Light } from '@aspose/3d';

const scene = new Scene();

const cameraNode = new Node('MainCamera');
cameraNode.entity = new Camera('MainCamera');
scene.rootNode.addChildNode(cameraNode);

const lightNode = new Node('KeyLight');
lightNode.entity = new Light('KeyLight');
scene.rootNode.addChildNode(lightNode);

for (const child of scene.rootNode.childNodes) {
    console.log(`${child.name}: ${child.entity?.constructor.name}`);
}

ابزارهای ریاضی

Vector3، Vector4، Matrix4 و Quaternion هر عملیات هندسی در کتابخانه را پشتیبانی می‌کنند. Vector3 و Vector4 مؤلفه‌های x/y/z(/w) را به همراه length، dot() و cross() در دسترس می‌گذارند؛ Matrix4 یک شبکه ۴×۴ است که از طریق m00–m33 با transpose() و concatenate() قابل دسترسی است؛ Quaternion برای ریاضیات چرخش، normalize()، conjugate()، inverse() و dot() را فراهم می‌کند.

import { Vector3, Quaternion, Matrix4 } from '@aspose/3d/utilities';

const position = new Vector3(1.0, 2.0, 3.0);
const rotation = new Quaternion(1.0, 0.0, 0.0, 0.0);
const transform = new Matrix4();

console.log(`length=${position.length} determinant=${transform.determinant}`);
console.log(`rotation w=${rotation.w} x=${rotation.x} y=${rotation.y} z=${rotation.z}`);

همچنین ببینید:

منابع مرتبط