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

open() मौजूदा सीन सामग्री को प्रतिस्थापित करता है। यदि आपको कई फ़ाइलें लोड करनी हों, तो अलग-अलग Scene इंस्टेंस बनाएं।.

मैटेरियल्स के साथ OBJ लोड करना

OBJ फ़ाइलें सामग्री को एक sidecar के माध्यम से संदर्भित करती हैं .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, या zip आर्काइव एक्सट्रैक्शन से। यह डिस्क पर लिखने से बचाता है:

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 binary, 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');

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

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 / GLB(कोई आवश्यकता नहीं)N/Aस्वचालित रूप से पहचाना गया; कोई विकल्प क्लास आवश्यक नहीं
STLStlLoadOptions@aspose/3d/formats/stl(वर्तमान संस्करण में कोई कॉन्फ़िगर करने योग्य विकल्प नहीं)
FBXFbxLoadOptions@aspose/3d/formats/fbx(वर्तमान संस्करण में कोई कॉन्फ़िगर करने योग्य विकल्प नहीं)
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 फ़ाइल बेक्ड ट्रांसफ़ॉर्म्स का उपयोग करती है, क्लिप्स नहींएनीमेशन प्रत्येक फ्रेम पर बेक्ड होता है; क्लिप एरे खाली रहेगा

See Also

 हिन्दी