TypeScript में 3D मॉडल कैसे लोड करें

TypeScript में 3D मॉडल कैसे लोड करें

के लिए @aspose/3d पैकेज टाइपस्क्रिप्ट और नोड्स.जेएस अनुप्रयोगों को 3 डी दृश्य फ़ाइल खोलने के लिए एक सरल एपीआई प्रदान करता है।. Scene मुख्य पृष्ठ : call scene.open() एक फ़ाइल मार्ग और वैकल्पिक प्रारूप-विशिष्ट लोड विकल्प के साथ, फिर पार करें scene.rootNode भूमध्यसा, सामग्री और परिवर्तनों तक पहुंचने के लिए।.

कदम-दर-चरण गाइड

चरण 1: npm के माध्यम से @aspose/3d स्थापित करें

कोई मूल बाइनरी या प्लेटफॉर्म-विशिष्ट निर्माण उपकरणों की आवश्यकता नहीं है; केवल Node.js 18 या बाद में।.

asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.

TypeScript परियोजनाओं के लिए, प्रकार परिभाषाएं पैकेज के साथ जुड़ी हुई हैं:

##tsconfig.json: minimum required settings
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "strict": true
  }
}

चरण 2: आयात दृश्य और प्रारूप-विशिष्ट विकल्प

प्रत्येक प्रारूप एक उप-मार्ग के नीचे अपने स्वयं के लोडर वर्ग और विकल्प वस्तुओं को प्रदर्शित करता है. केवल आप क्या चाहते हैं आयात करें:

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

अन्य प्रारूपों के लिए, पैटर्न समान है:

import { GltfLoadOptions } from '@aspose/3d/formats/gltf';
import { FbxLoadOptions } from '@aspose/3d/formats/fbx';
import { StlLoadOptions } from '@aspose/3d/formats/stl';

चरण 3: scene.open() का उपयोग करके एक 3D फ़ाइल खोलें

बनाए A Scene उदाहरण के लिए, कॉल करें scene.open() फ़ाइल मार्ग और एक वैकल्पिक लोड-आप ऑब्जेक्ट के साथ. कॉल सिंक्रनाइज़ है.

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);
console.log('Scene loaded successfully');

एक से लोड करने के लिए Buffer पहले से ही स्मृति में (सर्वर-मुक्त या स्ट्रीम संदर्भों में उपयोगी):

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

const buffer = fs.readFileSync('model.obj');
const scene = new Scene();
scene.openFromBuffer(buffer, new ObjLoadOptions());

चरण 4: दृश्य कोड के ऊपर झुकाएं

दृश्य ग्राफ एक पेड़ है जो जड़ में रखा गया है scene.rootNode.हर एक Node बच्चों के नोड्स और वैकल्पिक में शामिल हो सकते हैं entity (मशीन, कैमरा, प्रकाश आदि).

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

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

function visitNode(node: any, depth: number = 0): void {
    const indent = '  '.repeat(depth);
    console.log(`${indent}Node: ${node.name}`);
    if (node.entity) {
        console.log(`${indent}  Entity type: ${node.entity.constructor.name}`);
    }
    for (const child of node.childNodes) {
        visitNode(child, depth + 1);
    }
}

visitNode(scene.rootNode);

चरण 5: नियंत्रण बिंदुओं के माध्यम से मैश वर्टेक्स डेटा तक पहुंचें

जब एक नोड की वस्तु एक है Mesh, आप कच्चे नियंत्रण बिंदुओं (वर्टिक्स) को पढ़ सकते हैं controlPoints हर प्रवेश एक है। Vector4 साथ में x, y, z,और w घटकों की।.

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

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

for (const node of scene.rootNode.childNodes) {
    if (!node.entity) continue;
    const entity = node.entity;
    // Check if the entity is a Mesh by duck-typing controlPoints
    if ('controlPoints' in entity) {
        const mesh = entity as any;
        console.log(`Mesh "${node.name}": ${mesh.controlPoints.length} vertices`);
        // Print first three vertices
        for (let i = 0; i < Math.min(3, mesh.controlPoints.length); i++) {
            const v = mesh.controlPoints[i];
            console.log(`  v[${i}]: x=${v.x.toFixed(4)}, y=${v.y.toFixed(4)}, z=${v.z.toFixed(4)}`);
        }
    }
}

चरण 6: सामग्री लोड करने के लिए ObjLoadOptions सेट करें

ObjLoadOptions प्रबंधन के लिए गुणों को नियंत्रित करने के तरीके .mtl सामग्री फ़ाइलों और संरचनाओं को हल किया जाता है।.

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

const options = new ObjLoadOptions();
options.enableMaterials = true;   // parse .mtl file if present

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

// Inspect materials attached to nodes
for (const node of scene.rootNode.childNodes) {
    if (node.material) {
        console.log(`Material on "${node.name}": ${node.material.constructor.name}`);
    }
}

सामान्य समस्याएं और सुधार

त्रुटि: ‘@aspose/3d/formats/obj’ को नहीं मिल सकता है प्रारूप उप-मार्गों को Node.js 12.7+ पैकेज निर्यात की आवश्यकता होती है. सुनिश्चित करें कि आप Noda.js 18 या बाद में हैं. यदि TypeScript का उपयोग किया जाता है, तो सेट करें "moduleResolution": "node16" या "bundler" में tsconfig.json.

scena.rootNode.childNodes खोलने के बाद खाली है() कुछ OBJ फ़ाइलों का उपयोग गैर-मानक लाइन अंत या एक ट्रैकिंग नई लान की कमी है. फ़ील्ड को सक्षम OB J के रूप में जांचकर इसे पाठ संपादक में खोलने. यह भी पुष्टि आप पारित किया गया है ObjLoadOptions एक जनरल नहीं है। LoadOptions: सही डिस्प्ले के लिए प्रारूप-विशिष्ट विकल्पों की आवश्यकता होती है।.

नियंत्रण बिंदु आरेख में शून्य लंबाई है मशीन लोड हो सकती है लेकिन इसमें कोई भूमी नहीं होती (उदाहरण के लिए, ओबीजे में एक खाली समूह)। mesh.polygonCount इटेरेट करने से पहले जांच करें।.

बड़ी फ़ाइलों के लिए मेमोरी का उपयोग बहुत अधिक है बूथ-बूफ के साथ scene.openFromBuffer() यह पिक मेमोरी को कम नहीं करता है: पूरे फ़ाइल को पैरसाइड किया जाना चाहिए. बड़े फ़ील्ड (> 100 एमबी) के लिए, सुनिश्चित करें कि आपके Node.js प्रक्रिया में पर्याप्त घनत्व है : node --max-old-space-size=4096 yourScript.js.

टाइप त्रुटि: ‘संस्था’ प्रकार का है ‘अज्ञात’ के लिए entity संपत्ति का विस्तार किया जा रहा है. कस्टम के लिए any एक विशेष कक्षा के लिए (Mesh, Camera, आदि) आप अपने दृश्य में क्या उम्मीद कर रहे हैं के आधार पर।.

अक्सर पूछे जाने वाले प्रश्न (FAQ)

क्या फ़ॉर्मेट्स scene.open( के साथ लोड किया जा सकता है? OBJ, glTF 2.0 (.gltf + .bin), GLB, STL, 3MF, FBX और COLLADA ( .dae) सभी आयात के लिए समर्थित हैं। *LoadOptions प्रत्येक प्रारूप के लिए कक्षाएं।.

क्या मैं बिना किसी विकल्प के फ़ाइल लोड कर सकता हूं? हाँ।. scene.open('model.glb') विशेष सेटिंग की आवश्यकता नहीं है प्रारूपों के लिए विकल्पों को छोड़कर काम करता है. पारित करने के विकल्प OBJ के साथ अनुशंसित हैं क्योंकि सामग्री संकल्प पर निर्भर करता enableMaterials.

क्या लोड असेंक्रोनिक रूप से चलता है? नहीं है।. scene.open() और scene.openFromBuffer() वे सिंक्रनाइज़ हैं. उन्हें एक कार्यकर्ता तार में डाल दें या setImmediate यदि आपको एक घटना को प्रतिक्रियाशील रखने की आवश्यकता है।.

क्या ओबीजे निर्यात का समर्थन किया जाता है? हाँ. ओबीजे निर्यात के माध्यम से समर्थित है scene.save('output.obj'). के लिए .mtl फ़ाइल को स्वचालित रूप से एक साथ लिखना होगा। .obj फ़ाइल है।.

.mtl फ़ाइल को OBJ लोड करते समय कहां माना जाता है? अतः, मनुष्य के लिए, पेरिस की तलाश में .mtl फ़ाइल में संदर्भित है OBJ (mtllib यह सुनिश्चित करें कि दोनों फ़ाइल एक ही फ़ोल्डर में हैं।.

देखें भी

 हिन्दी