تحميل النماذج 3D
@aspose/3d يقدم طريقتان للتسجيل على Scene فئة : open() لـ الملفات الطريق تحميل و openFromBuffer() يتم الكشف عن النموذج تلقائيًا من الأرقام السحرية الثنائية أو امتداد الملفات ، لذلك نادراً ما تحتاج إلى تحديد تنسيق المصدر صريحًّا.
تحميل من مسار ملف
قم بتحويل خط الملف إلى scene.open().يكتشف المكتبة تنسيق من ملحق الملف، وفي النماذج الثنائية، من بايتات السحر:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx');
console.log(`Root children: ${scene.rootNode.childNodes.length}`);
console.log(`Animation clips: ${scene.animationClips.length}`);الحد الأدنى لـ FBX: دعم FBX يقتصر على ASCII FBx الواردات فقط. لا يدعم FB X ثنائي حتى الآن. FB x أيضا غير مدمجة في الكشف عن النموذج التلقائي، لذلك تحميل قد تتطلب صراحة
FbxLoadOptions.للحصول على تحميل نموذج موثوق، استخدم تنسيقات OBJ أو STL أو glTF.
open() استبدال أي محتوى المشهد الحالي.إذا كنت بحاجة إلى تحميل ملفات متعددة، إنشاء منفصلة Scene الحالات .
تحميل OBJ مع المواد
OBJ ملفات المواد المرجعية من خلال شريط الجانب .mtl المواد: مادة تحميل إمكانية الافتراض (ObjLoadOptions.enableMaterials = true* مرسلة ObjLoadOptions للتحكم في هذا وغيرها من خيارات وقت التحميل:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true; // load the .mtl sidecar
options.flipCoordinateSystem = false; // keep original Y-up orientation
options.normalizeNormal = true; // fix degenerate normals
options.scale = 1.0; // unit scale multiplier
scene.open('character.obj', options);
// Inspect materials on the first node
const first = scene.rootNode.childNodes[0];
if (first) {
console.log(`Materials on ${first.name}: ${first.materials.length}`);
}تحميل من بوفر
استخدام openFromBuffer() عندما تكون بيانات الملفات بالفعل في الذاكرة، على سبيل المثال من HTTP فاتش، قاعدة البيانات BLOB، أو استخراج أرشيف زيب.:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import * as fs from 'fs';
const buffer: Buffer = fs.readFileSync('model.obj');
const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true;
scene.openFromBuffer(buffer, options);
console.log(`Loaded ${scene.rootNode.childNodes.length} root nodes`);بالنسبة للتنسيقات الثنائية (GLB، STL ثنائي، 3MF)، يقرأ المكتبة بايتات السحر من البوفر لتحديد النموذج تلقائيا، بحيث يمكنك عبور undefined كما هو الحال مع الخيارات:
import { Scene } from '@aspose/3d';
import * as fs from 'fs';
const glbBuffer: Buffer = fs.readFileSync('model.glb');
const scene = new Scene();
scene.openFromBuffer(glbBuffer); // format auto-detected from GLB magic bytes
تحميل من HTTP (Node.js 18+)
قم بتحميل الأصول عن بعد وتحميله دون لمس نظام الملفات:
import { Scene } from '@aspose/3d';
async function loadFromUrl(url: string): Promise<Scene> {
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const arrayBuffer = await response.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
const scene = new Scene();
scene.openFromBuffer(buffer);
return scene;
}
const scene = await loadFromUrl('https://example.com/model.glb');
console.log(`Loaded scene: ${scene.rootNode.childNodes.length} root nodes`);فحص المشهد المضغوط
بعد التحميل، اذهب إلى الرسم البياني للمشهد لتصنيف العقد وتحديد الهندسة:
import { Scene, Mesh, Node } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx'); // ASCII FBX only; see FBX limitation note above
function inspect(node: Node, depth: number = 0): void {
const indent = ' '.repeat(depth);
const entityType = node.entity ? node.entity.constructor.name : '(none)';
console.log(`${indent}${node.name} [${entityType}]`);
if (node.entity instanceof Mesh) {
const mesh = node.entity as Mesh;
console.log(`${indent} vertices: ${mesh.controlPoints.length}, polygons: ${mesh.polygonCount}`);
}
for (const child of node.childNodes) {
inspect(child, depth + 1);
}
}
inspect(scene.rootNode);قراءة الأصول الميتايدات
وَالْمُتَّقِينَ assetInfo الممتلكات تعرض البيانات المتعددة المستويات:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx'); // ASCII FBX only
const info = scene.assetInfo;
if (info) {
console.log(`Creator: ${info.creator}`);
console.log(`Unit name: ${info.unitName}`);
console.log(`Unit scale: ${info.unitScaleFactor}`);
}ليس كل النماذج الشعبية assetInfo.FBX و COLLADA لديها بيانات غنية؛ OBJ و STL عادة لا.
إمكانية الإشارة إلى خيارات الشحن المحددة
| شكل | خيارات الدرجة | طريق الاستيراد | الخيارات الرئيسية |
|---|---|---|---|
| OBJ | ObjLoadOptions | @aspose/3d/formats/obj | enableMaterials, flipCoordinateSystem, scale, normalizeNormal |
| GLTF | (لا يُطلب منك) | N/A | تلقائي الكشف؛ تغطي كل من GLTF JSON و GLB الثنائية |
| STL | StlLoadOptions | @aspose/3d/formats/stl | (لا يوجد خيارات قابلة للتكوين في النسخة الحالية) |
| FBX | FbxLoadOptions | @aspose/3d/formats/fbx | ASCII FBX فقط؛ الثنائي FB X غير مدعوم. FbxLoadOptions واضحة . |
| COLLADA | ColladaLoadOptions | @aspose/3d/formats/collada | (لا يوجد خيارات قابلة للتكوين في النسخة الحالية) |
| 3MF | (لا يُطلب منك) | N/A | الكشف عن نفسه |
جميع تنسيقات دعم الكشف الذاتي من ملحق الملفات؛ تمر خيارات محددة للنموذج فقط عندما تحتاج إلى سلوك غير افتراضي.
أخطاء الشحن المشتركة
| الأعراض | سبب | تصحيح |
|---|---|---|
Error: Cannot find module '@aspose/3d/formats/obj' | moduleResolution لا تضع في node | إضافة "moduleResolution": "node" إلى tsconfig.json |
| قائمة النقاط الفارغة بعد تحميل OBJ | .mtl الجانب المفقود أو enableMaterials لا تضع | مجموعة options.enableMaterials = true وتضمن .mtl في نفس المكتب |
المشهد يضرب ولكن rootNode.childNodes هو فارغ | تنسيق يستخدم قوس جذري واحد وليس عقدة الأطفال | الوصول scene.rootNode.entity مباشرة |
openFromBuffer ألقى مع STL الثنائي | تم تخفيض البوفر بشكل غير صحيح (مخالفة بايتات التتبع) | استخدم الكامل readFileSync() الناتج بدون إزالة |
| ألعاب الرسوم المتحركة فارغة بعد تحميل FBX | ملف FBX يستخدم التحويلات المدفوعة وليس النقاط | يتم تخزين الرسوم المتحركة حسب الإطار ؛ سيتم إخفاء شريط الفيديو |
| فايكس الملف لا يملأ أو ينتج مشهد فارغ | لا يتم دعم FBX Binary | تحويل إلى ASCII FBX، أو استخدام glTF/OBJ/STL بدلا من ذلك |
انظر أيضا
- توفير النماذج 3D: خيارات التصدير و
saveToBuffer - مشاهدة Graph: عبور وتعديل الهرم النودي
- API نظرة عامة: جميع الفئات والصفات
- شكل الدعم:قراءة / كتابة المصفوفة الكاملة