تحميل النماذج 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 عادة لا.

إمكانية الإشارة إلى خيارات الشحن المحددة

شكلخيارات الدرجةطريق الاستيرادالخيارات الرئيسية
OBJObjLoadOptions@aspose/3d/formats/objenableMaterials, flipCoordinateSystem, scale, normalizeNormal
GLTF(لا يُطلب منك)N/Aتلقائي الكشف؛ تغطي كل من GLTF JSON و GLB الثنائية
STLStlLoadOptions@aspose/3d/formats/stl(لا يوجد خيارات قابلة للتكوين في النسخة الحالية)
FBXFbxLoadOptions@aspose/3d/formats/fbxASCII FBX فقط؛ الثنائي FB X غير مدعوم. FbxLoadOptions واضحة .
COLLADAColladaLoadOptions@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 بدلا من ذلك

انظر أيضا

 العربية