TypeScript में glTF/GLB पर 3D दृश्यों को कैसे निर्यात करें
Aspose.3D FOSS glTF 2.0 को आयात और निर्यात दोनों के रूप में समर्थन करता है। Scene वस्तु को एक OBJ, FBX, STL या अन्य स्रोत फ़ाइल से रिकॉर्ड किया जा सकता है और फिर लिखित रूप में लिखा जा सकते हैं। .gltf (JSON + बाइनरी) या .glb (एक बाइनरी कंटेनर) एक झंडा स्थापित करके GltfSaveOptions.
कदम-दर-चरण गाइड
चरण 1: @aspose / 3d स्थापित करें
asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.
Node.js 18 या बाद में सक्रिय है:
node --version # must be >= 16.0.0चरण 2: आयात दृश्य, GltfSaveOptions और GlTfFormat
import { Scene } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';GltfFormat क्या वर्णन के लिए प्रारूप का उपयोग किया जाता है scene.save(). GltfSaveOptions सभी निर्यात संरचनाओं को लागू करता है।.
यदि आप एक स्रोत फ़ाइल (उदाहरण के लिए, OBJ) भी लोड कर रहे हैं, तो संबंधित लंड विकल्प आयात करें:
import { ObjLoadOptions } from '@aspose/3d/formats/obj';चरण 3: एक दृश्य बनाएं या लोड करें
विकल्प ए: एक मौजूदा फ़ाइल से लोड करें (OBJ → GLB रूपांतरण):
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());विकल्प बी: एक न्यूनतम दृश्य को प्रोग्राम के रूप में बनाएं:
import { Scene, Node, Mesh } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
const childNode = new Node('cube');
scene.rootNode.addChildNode(childNode);
// Attach geometry to childNode as needed
चरण 4: GltfSaveOptions सेट करें
GltfSaveOptions आउटपुट प्रारूप और कोडिंग विवरण का नियंत्रण करता है।.
const saveOpts = new GltfSaveOptions();
// Set to true for a single binary .glb file
// Set to false (default) for JSON .gltf + separate .bin
saveOpts.binaryMode = true;अतिरिक्त विकल्प आप सेट कर सकते हैं:
| संपत्ति | प्रकार | डिफ़ॉल्ट | प्रभाव |
|---|---|---|---|
binaryMode | boolean | false | true → GLB, false ग्लोटीएफ JSON |
flipTexCoordV | boolean | true | Flip UV ऊर्ध्वाधर आश्रय इंजन संगतता के लिए |
चरण 5: Scene.save() का उपयोग करके सहेजें
बाहर निकलने का रास्ता, GltfFormat वर्णन, और कॉन्फ़िगर किए गए विकल्प:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
const saveOpts = new GltfSaveOptions();
saveOpts.binaryMode = true; // produce .glb
scene.save('output.glb', GltfFormat.getInstance(), saveOpts);
console.log('Converted to GLB successfully');एक JSON बनाने के लिए .gltf फ़ाइल के बजाय:
saveOpts.binaryMode = false;
scene.save('output.gltf', GltfFormat.getInstance(), saveOpts);
console.log('Exported to glTF JSON successfully');चरण 6: आउटपुट फ़ाइल की जांच करें
सुनिश्चित करें कि आउटपुट फ़ाइल मौजूद है और इसमें एक गैर-शून्य आकार है:
import * as fs from 'fs';
const outputPath = 'output.glb';
const stats = fs.statSync(outputPath);
console.log(`Output file size: ${stats.size} bytes`);
if (stats.size === 0) {
throw new Error('Export produced an empty file: check scene content');
}एक गोल-ट्रॉप सत्यापन के लिए, GLB को फिर से लोड करें और नोड्स की गिनती की जांच करें:
import { Scene } from '@aspose/3d';
import { GltfLoadOptions } from '@aspose/3d/formats/gltf';
const verify = new Scene();
verify.open('output.glb', new GltfLoadOptions());
let nodeCount = 0;
function countNodes(node: any): void {
nodeCount++;
for (const child of node.childNodes) countNodes(child);
}
countNodes(verify.rootNode);
console.log(`Round-trip verification: ${nodeCount} node(s) in output`);सामान्य समस्याएं और सुधार
ओबीजे सामग्री फ़ाइल निर्यात के बाद नहीं पाया गया जब आप ओबीजे के माध्यम से बचत करते हैं scene.save('output.obj'), के लिए .mtl फ़ाइल के साथ-साथ लिखित है। .obj यह सुनिश्चित करें कि आउटपुट निर्देशिका लिखने योग्य है और दोनों फ़ाइलों को एक साथ रखा जाता है।.
.glb आउटपुट अपेक्षा से छोटा है / मेश गायब हैं यदि लोड किए गए दृश्य में कोई वस्तुओं के बिना नोड्स हैं (उदाहरण के लिए, एक ओबीजे से खाली समूह), तो जीएलबी उन नंडों की भूमेट्री को शामिल नहीं करेगा. पुष्टि करें कि आपके इनपुट फ़ाइल में वास्तविक पॉलीगोन डेटा है mesh.controlPoints.length > 0 बचत से पहले।.
’@aspose/3d/formats/gltf’ को नहीं मिल सकता है। सुनिश्चित करें कि आप Node.js 18+ पर हैं और यह है @aspose/3d एक ही में स्थापित किया गया है। node_modules अपने प्रवेश बिंदु के रूप में. चलाना npm ls @aspose/3d संस्करण की पुष्टि करने के लिए 24.12.0 या बाद में है।.
GltfFormat.getInstance() अज्ञात वापस आता है यह मुख्य के बीच एक संस्करण असंगतता का संकेत देता है @aspose/3d पैकेज और एक कैश पुराने संस्करण. हटाएँ node_modules और package-lock.json,फिर दौड़ते हैं npm install फिर से।.
ग्लोबल उत्पादों में संरचनाएं गायब हैं सुनिश्चित करें binaryMode = true glTF JSON आउटपुट के लिए, संरचना छवि फ़ाइलों को आॉटपिक फ़ोल्डर के बगल में मौजूद होना चाहिए क्योंकि वे रिश्तेदार मार्ग द्वारा संदर्भित हैं।.
टाइप त्रुटि: ‘GltfSaveOptions’ प्रकार का तर्क अनुदान नहीं किया जा सकता है दोनों को सुनिश्चित करें Scene और GltfSaveOptions मिश्रित स्थापना (ग्राहक + स्थानीय) इंटरफ़ेस गलतफहमी का कारण बन सकता है।.
अक्सर पूछे जाने वाले प्रश्न (FAQ)
GLTF और GLB के बीच क्या अंतर है? एलईडी एंड्रॉयड (.gltf) दृश्य ग्राफ को एक मानव-पढ़ने योग्य JSON फ़ाइल के रूप में अलग से संग्रहीत करता है .bin फ़ाइलों और फ़िल्मों की सूची (.glb) सब कुछ एक ही बाइनरी कंटेनर में पैक करें। binaryMode = true जीपीएस के लिए, false JSON GLTF के लिए।.
क्या मैं एक दृश्य को निर्यात कर सकता हूं जो पूरी तरह से कोड में बनाया गया है (कोई स्रोत फ़ाइल नहीं)? बनाए रखें A Scene, add Node वस्तुएँ, एचटीएक्स Mesh अन्य कंपनियों को कॉल करें, फिर कॉले करें। scene.save(). दृश्य को एक लोड फ़ाइल से उत्पन्न होने की आवश्यकता नहीं है।.
क्या GSTF निर्यात में हानि नहीं है? भूमेट्री और परिवर्तनों के लिए, हाँ. सामग्री को संभव हो ग्ल्टएफ पीबीआर सामग्री गुणों में मैप किया जाता है. स्वाभाविक FBX सामग्री विस्तार पूरी तरह से नहीं कर सकते हैं।.
क्या मैं इसके बजाय STL या 3MF में निर्यात कर सकता हूं? हाँ. पैटर्न समान है; संबंधित प्रारूप का आयात करें *SaveOptions और *Format.getInstance():
import { StlSaveOptions, StlFormat } from '@aspose/3d/formats/stl';
const opts = new StlSaveOptions();
scene.save('output.stl', StlFormat.getInstance(), opts);क्या scene.save() असेंक्रोनिक रूप से चलता है? नहीं है।. scene.save() यह एक श्रमिकों के तार में डाल दें यदि आपको बड़ी निर्यात के दौरान घटना घूर्णन को अवरुद्ध करने से बचने की आवश्यकता है।.
Node.js के किस संस्करण का समर्थन किया जाता है? Node.js 18, 20, और 22+ के लिए, Nodes.js 16 और उससे पहले का समर्थन नहीं किया जाता है।.