Formaatondersteuning

Aspose.3D FOSS voor Python kan zeven 3D-formaten lezen en schrijven met behulp van een enkele in‑memory scenerepresentatie. De bibliotheek zet elk formaat om naar een gemeenschappelijk Scene object bij het laden en serialiseert dat object terug naar het doelformaat bij het opslaan. Dit betekent dat een scène die uit OBJ is geladen direct kan worden opgeslagen naar glTF zonder tussenliggende conversiestappen.


Ondersteunde formaten

FormaatExtensieLezenSchrijvenOptiesklasseOpmerkingen
Wavefront OBJ.objJaJaObjLoadOptions.mtl materiaal laden ondersteund
STL (binair).stlJaJaStlSaveOptionsBinair en ASCII lezen; opslaan standaard naar binair
STL (ASCII).stlJaJaStlSaveOptionsRound-trip geverifieerd
glTF 2.0.gltfJaJaGltfSaveOptionsVolledige scènegraph, materialen en animaties behouden
GLB (binaire glTF).glbJaJaGltfSaveOptionsBinaire container in één bestand
COLLADA.daeJaJaColladaLoadOptions / ColladaSaveOptionsScènehiërarchie en materialen
3MF.3mfJaJaThreeMfSaveOptionsAdditieve fabricageformaat
FBX.fbxGedeeltelijkNeeN/ATokenizer werkt; volledige parser is in uitvoering (niet productieklaar)

OBJ-formaat

Wavefront OBJ is het meest breed ondersteunde uitwisselingsformaat voor statische meshes. Aspose.3D FOSS laadt geometrie (vertices, normals, UV-coördinaten en polygonale vlakken) en optioneel het bijbehorende .mtl materialenbestand.

ObjLoadOptions

EigenschapTypeStandaardBeschrijving
enable_materialsboolTrueParse de .mtl bestand waarnaar wordt verwezen door de OBJ-header
flip_coordinate_systemboolFalseConverteren van Y-up rechtshandig naar Z-up rechtshandig
normalize_normalboolTrueNormaliseer alle geïmporteerde oppervlaksnormaalwaarden tot een eenheidslengte
scalefloat1.0Uniforme schaalfactor toegepast op alle vertexposities

Een OBJ‑bestand laden

from aspose.threed import Scene
from aspose.threed.formats import ObjLoadOptions

options = ObjLoadOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.scale = 1.0

scene = Scene()
scene.open("model.obj", options)

print(f"Top-level nodes: {len(scene.root_node.child_nodes)}")

Opslaan naar OBJ

scene.save("output.obj")

OBJ export schrijft vertexposities en polygonvlakken. Als de scène bevat LambertMaterial of PhongMaterial objecten, schrijft de bibliotheek een begeleidend .mtl bestand automatisch.


STL-formaat

STL (STereoLithography) slaat driehoeknetwerken op als een niet-geïndexeerde lijst van facetten. Zowel binaire als ASCII-varianten worden ondersteund voor lezen; de bibliotheek gebruikt standaard binair bij opslaan.

StlSaveOptions

StlSaveOptions heeft geen verplichte velden. Instantieer het om door te geven aan scene.save():

from aspose.threed.formats import StlSaveOptions

opts = StlSaveOptions()
scene.save("output.stl", opts)

Round-trip voorbeeld

from aspose.threed import Scene

##Load
scene = Scene.from_file("model.stl")

##Inspect
for node in scene.root_node.child_nodes:
    if node.entity:
        print(f"{node.name}: {len(node.entity.control_points)} vertices")

##Save
scene.save("roundtrip.stl")

STL slaat alleen driehoekgeometrie op, zonder normale vectoren behalve de facetnormaal, zonder UV-coördinaten, zonder materialen en zonder hiërarchie. Als je scène quads of polygonen van hogere orde bevat, worden deze automatisch getrianguleerd bij het opslaan.


glTF / GLB-formaat

glTF 2.0 is het aanbevolen formaat voor moderne 3D‑uitwisseling. Het behoudt de volledige scenegrafiek (node‑hiërarchie, benoemde nodes, transformaties), materialen (LambertMaterial, PhongMaterial → PBR‑conversie), en animatieclips. GLB is de single‑file binaire containervariant.

GltfSaveOptions

from aspose.threed.formats import GltfSaveOptions

opts = GltfSaveOptions()
scene.save("output.gltf", opts)   # JSON + external .bin
scene.save("output.glb",  opts)   # Self-contained binary

Materiaalondersteuning

Aspose.3D FOSS-materialen worden gemapt naar glTF pbrMetallicRoughness bij export:

from aspose.threed import Scene
from aspose.threed.shading import PhongMaterial
from aspose.threed.utilities import Vector3

scene = Scene()
node = scene.root_node.create_child_node("object")

mat = PhongMaterial()
mat.diffuse_color  = Vector3(0.8, 0.2, 0.2)   # red
mat.specular_color = Vector3(1.0, 1.0, 1.0)
mat.shininess = 50.0
node.material = mat

scene.save("colored.gltf")

Verifiëren van glTF‑uitvoer

import json

with open("output.gltf") as f:
    data = json.load(f)

print(f"Asset version : {data['asset']['version']}")
print(f"Nodes         : {len(data.get('nodes', []))}")
print(f"Meshes        : {len(data.get('meshes', []))}")

COLLADA-formaat

COLLADA (.dae) is een XML-gebaseerd formaat dat scènehiërarchieën, materialen, meerdere UV-kanalen en skeletanimatie ondersteunt. Aspose.3D FOSS leest en schrijft de volledige knoopboom en materiaaldefinities.

from aspose.threed import Scene

##Load a COLLADA file
scene = Scene.from_file("model.dae")

##Inspect top-level nodes
for node in scene.root_node.child_nodes:
    print(f"  {node.name}")

##Save back to COLLADA
scene.save("output.dae")

COLLADA is een goede keuze wanneer je hiërarchieën met benoemde knooppunten en materialen zonder gegevensverlies heen en weer moet transporteren.


3MF Format

3MF (3D Manufacturing Format) targets additive manufacturing (3D printing) workflows. It stores triangle geometry, colour, and print-specific metadata in a ZIP-based container.

from aspose.threed import Scene
from aspose.threed.formats import ThreeMfSaveOptions

scene = Scene.from_file("part.stl")   # Load from STL
opts  = ThreeMfSaveOptions()
scene.save("part.3mf", opts)          # Write as 3MF

3MF is the recommended export format when targeting slicer software (Cura, PrusaSlicer, Bambu Studio, etc.).


FBX-indeling

Status: in uitvoering (niet productie-klaar).

FBX (.fbx) ondersteuning in Aspose.3D FOSS bevindt zich momenteel in de tokenizer-fase. De binaire FBX-tokenizer kan de bestandsstructuur ontleden, maar de volledige knoop-, mesh- en materiaalanalyser heeft bekende bugs en is niet compleet. FBX-leesresultaten moeten als experimenteel worden beschouwd.

Gebruik FBX niet in productiepijplijnen met deze release. Als uw brongegevens in FBX zijn, converteer ze dan eerst naar glTF of OBJ met behulp van Blender of FBX Review voordat u ze laadt met Aspose.3D FOSS.

FBX-schrijven wordt niet ondersteund.


Automatische detectie van formaat

Scene.from_file() en scene.open() detecteert het formaat automatisch met behulp van de bestandsextensie en, waar beschikbaar, magic bytes in de file header:

from aspose.threed import Scene

##The library detects each format without being told explicitly
scene_obj  = Scene.from_file("model.obj")
scene_glb  = Scene.from_file("model.glb")
scene_stl  = Scene.from_file("model.stl")
scene_dae  = Scene.from_file("model.dae")
scene_3mf  = Scene.from_file("model.3mf")

Als de extensie ontbreekt of dubbelzinnig is, valt de bibliotheek terug op inspectie van de header (magic bytes). Niet‑ondersteunde of niet‑herkende bestanden veroorzaken een IOError met een beschrijvende melding.


Tips en best practices

  • Gebruik glTF of GLB voor moderne pipelines. glTF behoudt de volledige scene graph, materialen en animatiegegevens. Het is het meest volledige formaat voor uitwisseling met game engines en web viewers.
  • Gebruik OBJ voor maximale compatibiliteit. OBJ wordt ondersteund door vrijwel elk 3D‑gereedschap. Het is beperkt tot statische meshes, maar is uiterst draagbaar.
  • Gebruik 3MF voor het afdrukken. 3MF carries colour, orientation hints, and print settings that STL cannot express.
  • Vermijd FBX totdat het productie‑klaar is. Bekijk de release‑notes voor de versie waarin volledige FBX‑parsing voltooid is.
  • Stem de opslagextensie af op het formaat. Geef geen .gltf extensie wanneer je een binaire GLB wilt; gebruik .glb expliciet. De extensie bepaalt welke serialiser wordt gebruikt.
  • Controleer polygon-compatibiliteit. STL en 3MF vereisen driehoeken. Quads en N-gons worden bij het opslaan automatisch getrianguleerd, maar het aantal vertices zal toenemen. Als je de triangulatie wilt beheersen, roep mesh.triangulate() voordat je opslaat.
 Nederlands