TypeScript में 3D Mesh को कैसे बनाएं

TypeScript में 3D Mesh को कैसे बनाएं

Aspose.3D FOSS for TypeScript आपको किसी भी फ़ाइल को लोड किए बिना पूरी तरह से कोड में 3D भूमध्यसागरी बनाने की अनुमति देता है. आप नियंत्रण बिंदुओं के रूप में पर्टेक्स पदों को परिभाषित करते हैं, इंडेक्स द्वारा पॉलीगोन चेहरे निर्दिष्ट करते है, और वैकल्पिक पर्टक्स तत्व जैसे सामान्य, यूवी या पर्टीक्स रंग जोड़ते हैं. परिणाम किसी को लिखने योग्य प्रारूप में बचाया जा सकता है: glTF, GLB, STL, FBX, या COLLADA.

आवश्यकताएँ

  • Node.js 18 या बाद में
  • टाइपस्क्रिप्ट 5.0 या बाद में
  • @aspose/3d स्थापित (देखें चरण 1)

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

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

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

कोई मूल एडवेंस या सिस्टम लाइब्रेरी की आवश्यकता नहीं है. पैकेज में टाइपस्क्रिप्ट प्रकार परिभाषाएं शामिल हैं.

न्यूनतम tsconfig.json:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "strict": true
  }
}

चरण 2: एक दृश्य और नोड बनाएं

A Scene सभी प्रकार के भंडारण को एक ही स्थान पर रखा जाना चाहिए। Node पेड़ के अंदर:

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

const scene = new Scene();
const node = scene.rootNode.createChildNode('triangle');

createChildNode(name) एक नामित नोड बनाता है और इसे वर्तमान नॉड के बच्चे के रूप में तार करता है। Node वस्तु यह है कि आप चरण 7 में मेश को जोड़ेंगे।.


चरण 3: एक मशहूर वस्तु बनाएं

Mesh वेर्टेक्स पदों और पॉलीगोन परिभाषाओं को रखता है. एक वैकल्पिक नाम के साथ बनाएं:

import { Mesh } from '@aspose/3d/entities';

const mesh = new Mesh('triangle');

मेश खाली शुरू होता है: कोई रस्सी और कोई चेहरा नहीं. आप उन्हें अगले चरणों में जोड़ते हैं.


चरण 4: नियंत्रण बिंदुओं (रॉकेट) जोड़ें

नियंत्रण बिंदु स्थानीय स्थान में पर्टेक्स स्थितियां हैं. Push Vector4 मूल्य में प्रवेश mesh.controlPoints.4. एक ही चीज (w) है 1 पदों के लिए:

import { Vector4 } from '@aspose/3d/utilities';

mesh.controlPoints.push(new Vector4(0.0, 0.0, 0.0, 1.0)); // index 0
mesh.controlPoints.push(new Vector4(1.0, 0.0, 0.0, 1.0)); // index 1
mesh.controlPoints.push(new Vector4(0.5, 1.0, 0.0, 1.0)); // index 2

आप इन पदों को उनके शून्य-आधारित सूचकांक द्वारा संदर्भित करते हैं जब आप पॉलिगोन चेहरे निर्धारक करते है।.


चरण 5: पॉलीगोन चेहरे बनाएं

createPolygon() एक चेहरा वर्णन करके सूचकांक के संकेतों को क्रम में सूचीबद्ध करता है. तीन संकेत एक त्रिकोण बनाते हैं:

mesh.createPolygon(0, 1, 2);

आप उन प्रारूपों के लिए क्वाड (चार सूचकांक) या स्वाभाविक बहुगणनाओं को भी परिभाषित कर सकते हैं जो उन्हें समर्थन करते हैं. glTF के साथ, पुस्तकालय स्वचालित रूप से निर्यात पर क्वड और n-गोन को त्रिकोणीय करेगा.


चरण 6: Vertex मानक जोड़ें

सामान्य गुणवत्ता में सुधार करने के लिए. उपयोग करें mesh.createElement() बनाने के लिए एक VertexElementNormal, एक रेंज में सामान्य vectors इकट्ठा करें, फिर कॉल करें setData() उन्हें बचाने के लिए - data गेटर एक रक्षात्मक प्रतिलिपि वापस करता है - इसे धक्का देने का कोई प्रभाव नहीं होता। FVector3 (एक-सटीकता फ्लोट) सामान्य डेटा के लिए, नहीं Vector4.

import { VertexElementNormal } from '@aspose/3d/entities';
import { VertexElementType, MappingMode, ReferenceMode } from '@aspose/3d/entities';
import { FVector3 } from '@aspose/3d/utilities';

const normals = mesh.createElement(
    VertexElementType.NORMAL,
    MappingMode.CONTROL_POINT,
    ReferenceMode.DIRECT
) as VertexElementNormal;

// Build the normal array, then call setData() — do NOT push to normals.data
normals.setData([
    new FVector3(0, 0, 1), // normal for vertex 0 (pointing +Z)
    new FVector3(0, 0, 1), // normal for vertex 1
    new FVector3(0, 0, 1), // normal for vertex 2
]);

MappingMode.CONTROL_POINT एक सामान्य प्रति वर्टेक्स है।. ReferenceMode.DIRECT इसका मतलब है कि डेटा रेंज को सीधे पॉलीगोन वर्टेक्स इंडेक्स द्वारा सूचकांक किया जाता है।.


चरण 7: मेश को जोड़ें और glTF में बचाएं

नोड के माध्यम से मशीन को आवंटित करें node.entity,और फिर दृश्य को बचाएं:

import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';

node.entity = mesh;

const saveOpts = new GltfSaveOptions();
scene.save('triangle.gltf', GltfFormat.getInstance(), saveOpts);
console.log('Triangle mesh saved to triangle.gltf');

एक ही सामग्री बनाने के लिए .glb फ़ाइल के बजाय, सेट करें saveOpts.binaryMode = true और आउटपुट फ़ाइल विस्तार को बदलने के लिए .glb.

पूर्ण उदाहरण

निम्नलिखित पूर्ण स्क्रिप्ट है जो ऊपर दिए गए सभी चरणों को संयोजित करता है:

import { Scene } from '@aspose/3d';
import { Mesh, VertexElementNormal } from '@aspose/3d/entities';
import { VertexElementType, MappingMode, ReferenceMode } from '@aspose/3d/entities';
import { Vector4, FVector3 } from '@aspose/3d/utilities';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';

const scene = new Scene();
const node = scene.rootNode.createChildNode('triangle');

const mesh = new Mesh('triangle');

mesh.controlPoints.push(new Vector4(0.0, 0.0, 0.0, 1.0));
mesh.controlPoints.push(new Vector4(1.0, 0.0, 0.0, 1.0));
mesh.controlPoints.push(new Vector4(0.5, 1.0, 0.0, 1.0));

mesh.createPolygon(0, 1, 2);

const normals = mesh.createElement(
    VertexElementType.NORMAL,
    MappingMode.CONTROL_POINT,
    ReferenceMode.DIRECT
) as VertexElementNormal;

// setData() is the correct API — normals.data returns a defensive copy; pushing to it has no effect
normals.setData([
    new FVector3(0, 0, 1),
    new FVector3(0, 0, 1),
    new FVector3(0, 0, 1),
]);

node.entity = mesh;

const saveOpts = new GltfSaveOptions();
scene.save('triangle.gltf', GltfFormat.getInstance(), saveOpts);
console.log('Triangle mesh saved to triangle.gltf');

चलते हैं साथ ts-node:

npx ts-node triangle.ts

सामान्य मुद्दे

मुद्देकारणों सेफिक्स करें
mesh.controlPoints.length 0 के बाद धक्काकिसी भी नोड से संदर्भित नहीं हैअनुदान से पहले धक्का node.entity;आदेश कोई बात नहीं है, लेकिन संदर्भ की जांच करें
आउटपुट में खाली भूमी का उत्पादनnode.entity नहीं दिया गयासुनिश्चित करें node.entity = mesh कॉल करने से पहले scene.save()
सामान्य गिनती गलत हैआर्मी ने पारित किया setData() कम से कम controlPointsएक जोड़ें FVector3 नियंत्रण बिंदु पर प्रवेश जब उपयोग किया जाता है MappingMode.CONTROL_POINT
GlTF दृश्य काले मेश दिखाता हैसामान्य में दिखाई देती हैविपरीत क्रम में विस्फोट createPolygon (जैसा कि आप जानते हैं,., 0, 2, 1सामान्य वेटरों को नकारना
TypeScript: ’normals.data’ संपत्ति नहीं मिलीगलत आयात मार्गआयात VertexElementNormal से @aspose/3d/entities,नहीं, से @aspose/3d रूट

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

क्या मैं त्रिकोण के बजाय क्वाड बना सकता हूं? 4. चार संकेतों को पार करें createPolygon(0, 1, 2, 3).पुस्तकालय त्रिकोणों को उन प्रारूपों में निर्यात करते समय क्वाड करता है जिन्हें त्रिलोक (glTF, STL) की आवश्यकता होती है।.

क्या अंतर है MappingMode.CONTROL_POINT और MappingMode.POLYGON_VERTEX? CONTROL_POINT एकल वर्टेक्स के लिए एक मूल्य है।. POLYGON_VERTEX एक पॉलीगोन-वर्टेक्स जोड़ी के लिए एक मूल्य संग्रहीत करता है, जिससे एक ही वर्टेक पर अलग-अलग सामान्य होते हैं जब यह कई पॉलिगन (हार्ड किनारों) में शामिल होता है।.

क्या मुझे STL के लिए बचाने से पहले मस्जिद को त्रिकोण करना चाहिए? नहीं. पुस्तकालय त्रिकोण को स्वचालित रूप से संभालता है जब यह त्रिलोकों की आवश्यकता वाले प्रारूपों में निर्यात करता है. आप मस्जिद में क्वाड और एन-गॉन निर्धारित कर सकते हैं और सीधे एसटीएल पर सहेज सकते है।.

यूवी कोडों को कैसे जोड़ें? उपयोग करें mesh.createElementUV(TextureMapping.Diffuse, MappingMode.CONTROL_POINT, ReferenceMode.DIRECT) बनाने के लिए एक VertexElementUV,फिर कॉल करें setData([...]) एक बार में, एक आरेख के साथ FVector2 या FVector3 एक नियंत्रण बिंदु पर - 1 के लिए। data गेटर एक प्रति वापस करता है; इसे सीधे दबाएं नहीं।.

क्या मैं एक दृश्य में कई मस्जिदों का निर्माण कर सकता हूं? हाँ. कई नोड्स के नीचे बनाएं scene.rootNode एक अलग को समर्पित करें Mesh हर नोड के लिए entity संपत्ति है।.

देखें भी

 हिन्दी