कैसे बनाएं 3D मिश Aspose.3D के साथ Python में
Aspose.3D FOSS for Python आपको पूरी तरह से कोड में 3D भूमध्यसागरी बनाने की अनुमति देता है: कोई बाहरी मॉडलिंग टूल आवश्यक नहीं है. आप एक Mesh, इसे वर्टेक्स पदों के साथ लोकप्रिय करें (control_pointsऔर परिभाषाओं के लिए (polygons), वैकल्पिक वर्टेक्स एट्रिक्ट्स जैसे सामान्य जोड़ें, फिर किसी भी समर्थित प्रारूप में दृश्य को बचाएं।.
कदम-दर-चरण गाइड
चरण 1: पैकेज स्थापित करें
PyPI से Aspose.3D FOSS स्थापित करें. कोई मूल एक्सटेंशन या संकलक टूलचेन की आवश्यकता नहीं है.
asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.
स्थापना की जांच करें:
from aspose.threed import Scene
print("Aspose.3D FOSS ready")Python संस्करणों का समर्थन किया गया है: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
चरण 2: एक दृश्य और नोड बनाएं
हर मस्जिद को एक दृश्य ग्राफ के अंदर रहना चाहिए. एक बनाएं Scene और एक नाम जोड़ें Node मेज को पकड़ने के लिए:
from aspose.threed import Scene
scene = Scene()
node = scene.root_node.create_child_node("triangle")नोड नाम निर्यात फ़ाइल में रखा जाता है और डिबगिंग के लिए उपयोगी है, और बाद में रिटर्न के माध्यम से node.get_child("triangle").
चरण 3: एक मशहूर वस्तु बनाएं
तुरंत A Mesh एक वैकल्पिक वर्णन नाम के साथ:
from aspose.threed.entities import Mesh
mesh = Mesh("triangle")मस्जिद शुरू में खाली है: कोई रेटिंग नहीं, कोई पॉलीगोन नहीं. आप इसे निम्नलिखित चरणों में आबादी देते हैं।.
चरण 4: नियंत्रण बिंदुओं (रॉकेट) जोड़ें
नियंत्रण बिंदु वेर्टेक्स स्थितियां हैं. प्रत्येक वर्टेक एक के रूप में संग्रहीत किया जाता है Vector4(x, y, z, w) जहां w=1 3D स्पेस में एक बिंदु को इंगित करता है:
from aspose.threed.utilities import Vector4
##Vertex 0: origin
# Note: control_points returns a copy of the internal vertex list.
# Appending to the returned copy discards the vertex silently.
# Use _control_points to mutate the backing list directly.
# This is a known library limitation — a public add_control_point() API is not yet available.
mesh._control_points.append(Vector4(0.0, 0.0, 0.0, 1.0))
##Vertex 1: 1 unit along X
mesh._control_points.append(Vector4(1.0, 0.0, 0.0, 1.0))
##Vertex 2: apex
mesh._control_points.append(Vector4(0.5, 1.0, 0.0, 1.0))
print(f"Vertices added: {len(mesh.control_points)}")महत्वपूर्ण : -मैंने कहाmesh.control_points लौटें A कॉपी करें आंतरिक वर्टेक्स सूची (Getter Executes) list(self._control_points)) कॉल करने के लिए mesh.control_points.append(v) कॉपी पर जोड़ें, न कि मशीन पर, इसलिए रीढ़ चुपचाप खत्म हो जाती है। mesh._control_points.append(v) निजी क्षेत्र में प्रवेश करने के लिए: निजी राज्य के माध्यम से पहुंच _control_points यह एक ज्ञात कार्यकारिणी है; इंटरफ़ेस पुस्तकालय के भविष्य के संस्करण में बदल सकता है।.
चरण 5: पॉलीगोन चेहरे बनाएं
वर्टेक्स सूचकांक का उपयोग करके चेहरे की टोपोलॉजी को परिभाषित करें. वर्ट्क्स के सूचक को पार करें create_polygon().तीन सूचकांक एक त्रिकोण का उत्पादन करते हैं; चार एक क्वाड का निर्माण करते है:
##Triangle: connect vertices 0 → 1 → 2
mesh.create_polygon(0, 1, 2)
print(f"Polygon count: {mesh.polygon_count}")एक क्वाड मस्ह के लिए, आप चार संकेतों को पार करेंगे: mesh.create_polygon(0, 1, 2, 3).
इनमें से एक को वैध पदों पर रखा जाना चाहिए। control_points (0-आधारित, अंतराल के भीतर) विंडिंग आदेश बाहरी-फैक्शन सामान्यों के लिए प्रति घंटे है।.
चरण 6: Vertex मानक जोड़ें
Vertex सामान्य के रूप में संग्रहीत किया जाता है VertexElement मशीन के लिए उपयोग करें - उपयोग mesh.create_element() साथ में VertexElementType.NORMAL, MappingMode.CONTROL_POINT,और ReferenceMode.DIRECT:
from aspose.threed.entities import VertexElementType, MappingMode, ReferenceMode, VertexElementNormal
from aspose.threed.utilities import Vector4, FVector4
##Create the normal element (returns VertexElementNormal, a VertexElementFVector subclass)
normals: VertexElementNormal = mesh.create_element(
VertexElementType.NORMAL,
MappingMode.CONTROL_POINT,
ReferenceMode.DIRECT
)
##One normal per vertex: all pointing out of the XY plane (0, 0, 1)
normals.set_data([
FVector4(0, 0, 1, 0), # vertex 0
FVector4(0, 0, 1, 0), # vertex 1
FVector4(0, 0, 1, 0), # vertex 2
])
print("Normal layer attached.")MappingMode.CONTROL_POINT एक सामान्य प्रति वर्टेक्स है।. ReferenceMode.DIRECT इसका मतलब है कि सामान्य डेटा को नियंत्रण बिंदुओं के समान क्रम में पढ़ा जाता है (कोई अतिरिक्त सूचकांक बफर नहीं)।.
सामान्य वेटर का उपयोग करें FVector4(x, y, z, w) साथ में w=0 एक स्थिति के बजाय दिशा को इंगित करने के लिए।. FVector4 एकल-सटीकता फ्लोट वक्टर है; vertex attribute डेटा में VertexElementFVector उप-क्लास इस प्रकार का उपयोग करते हैं।.
चरण 7: नोड के लिए मेश को जोड़ें और बचाएं
नोड में मस्तिष्क जोड़ें, फिर दृश्य को बचाएं:
node.add_entity(mesh)
scene.save("triangle.gltf")
print("Saved triangle.gltf")पूर्ण कार्य स्क्रिप्ट (सभी चरणों को संयोजित किया गया है):
from aspose.threed import Scene
from aspose.threed.entities import Mesh, VertexElementType, MappingMode, ReferenceMode, VertexElementNormal
from aspose.threed.utilities import Vector3, Vector4, FVector4
scene = Scene()
node = scene.root_node.create_child_node("triangle")
mesh = Mesh("triangle")
##Add 3 vertices (x, y, z, w)
# Use _control_points to mutate the backing list directly (control_points returns a copy)
mesh._control_points.append(Vector4(0.0, 0.0, 0.0, 1.0))
mesh._control_points.append(Vector4(1.0, 0.0, 0.0, 1.0))
mesh._control_points.append(Vector4(0.5, 1.0, 0.0, 1.0))
##Create a triangle polygon
mesh.create_polygon(0, 1, 2)
##Add normals (create_element returns VertexElementNormal, a VertexElementFVector subclass)
normals: VertexElementNormal = mesh.create_element(VertexElementType.NORMAL, MappingMode.CONTROL_POINT, ReferenceMode.DIRECT)
normals.set_data([
FVector4(0, 0, 1, 0),
FVector4(0, 0, 1, 0),
FVector4(0, 0, 1, 0),
])
node.add_entity(mesh)
scene.save("triangle.gltf")सामान्य मुद्दे
| मुद्दे | संकल्प |
|---|---|
IndexError में create_polygon | सुनिश्चित करें कि सभी संकेतों के अंदर हैं। range(len(mesh.control_points)).0 के आधार पर सूचकांक हैं।. |
| 0 ग्रेड के साथ मश निर्यात | mesh.control_points.append(...) चुपचाप रस्सी को छोड़ दें क्योंकि संपत्ति एक प्रति वापस करती है। mesh._control_points.append(...) इसके बजाय।. |
| सामान्य गिनती वर्टेक्स गिनाती के अनुरूप नहीं है | जब उपयोग करें MappingMode.CONTROL_POINT + ReferenceMode.DIRECT, normals.data जरूरी है कि सटीक रूप से len(control_points) प्रवेश द्वार।. |
| बचाए गए फ़ाइलों से खोया हुआ मशीन | पुष्टि करें कि node.add_entity(mesh) पहले ही बुलाया गया था scene.save().किसी भी नोड से जुड़े एक मस्जिद को निर्यात नहीं किया जाता है।. |
| गलत विल्डिंग आदेश (आपका चेहरा अदृश्य दिखता है) | कॉन्ट्रॉक-घंटे के विपरीत वर्टेक्स आदेश एक बाहरी-फैक्शन सामान्य बनाता है. इंडेक्स क्रम को उल्टा करें create_polygon इसे फ्लिप करें।. |
polygon_count 0 वापस आते हैं | polygon_count एक ही सूची पढ़ते हैं जैसे कि polygons.अगर create_polygon नहीं बुलाया गया, सूची खाली है।. |
| सामान्य दृश्यों में गलत दिखाई देते हैं | सभी सामान्य वेटरों को एक इकाई लंबाई के रूप में सुनिश्चित करें। n / abs(n) या पहले से मानक मूल्य पारित करें।. |
अक्सर पूछे जाने वाले प्रश्न
क्या अंतर है Vector3 और Vector4 नियंत्रण बिंदुओं के लिए?
control_points दुकानों Vector4 वस्तुओं के लिए - The w घटक है एक समग्र कोड: उपयोग w=1 Vertex के लिए और w=0 सामान्य के रूप में दिशा वक्टरों के लिए।. Vector3 यह परिवर्तन (अनुवाद, पैमाने) के लिए उपयोग किया जाता है लेकिन भूमेट्री भंडारण के रूप में नहीं।.
क्या मैं त्रिकोण के बजाय क्वाड्स के साथ एक मस्जिद बना सकता हूं?
हाँ कॉल करें mesh.create_polygon(0, 1, 2, 3) कुछ बचाए गए लक्ष्य (STL, 3MF) त्रिकोण की आवश्यकता होती है और स्वचालित रूप से क्वाड को त्रिंगुल कर देगा. glTF और COLLADA क्वड बनाए रखते हैं.
यूवी कोडों को कैसे जोड़ें?
उपयोग करें mesh.create_element_uv(TextureMapping.DIFFUSE, MappingMode.POLYGON_VERTEX) बनाने के लिए एक VertexElementUV चैनल के लिए, फिर इसे लोकप्रिय करें data सूची के साथ Vector4 यूवी कोडेंट का उपयोग करें x और y; z और w 1. पहला तर्क होना चाहिए एक TextureMapping अस्थायी (जैसे कि., TextureMapping.DIFFUSE) यह निर्धारित करने के लिए कि किस संरचना स्लॉट यूवी परत से संबंधित है।.
क्या मशीन को सही तरीके से निर्यात करने के लिए सामान्य की आवश्यकता है?
नहीं. सामान्य वैकल्पिक हैं. अगर अनदेखा किया जाता है, तो अधिकांश दर्शकों को पॉलीगोन वेंटिंग क्रम से प्रति-आपके सामान्यों की गणना होती है. स्पष्ट प्रतिvertex सामान्य जोड़ने से अधिक चिकनी छाया मिलती है।.
क्या मैं एक नोड में कई मेश जोड़ सकता हूं?
हाँ कॉल करें node.add_entity(mesh) प्रत्येक कॉल में एक नया एंटीवायरस जोड़ा जाता है। node.entities.कुछ प्रारूपों में कई वस्तुओं को एक में फ्लैट किया जा सकता है जो निर्यात पर हैं।.
कैसे मैं मिश्रित पॉलीगोन प्रकार के साथ एक मशीन को त्रिकोण करता हूं?
कॉल करें mesh.triangulate() सभी क्वाड और एन-गॉन को स्थान पर त्रिकोण में परिवर्तित करने के लिए. यह उपयोगी है पहले कि प्रारूपों में बचाया जो केवल त्रिलोक का समर्थन करते हैं.