مقدمه
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}`);
همچنین ببینید:
- نحوه بارگذاری مدلهای سهبعدی در TypeScript
- نحوه خروجیگیری glTF در TypeScript
- پشتیبانی از قالب
- API Reference