Aspose.3D FOSS voor Java ondersteunt vijf 3D-bestandsformaten: OBJ, STL, glTF, GLB, en FBX (alleen import).
Alle voorbeelden gebruiken de com.aspose.threed.* pakket:
import com.aspose.threed.*;
Maven‑afhankelijkheid:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Formaatlandschap
Voordat we beginnen, hier is een kort overzicht van de vier ondersteunde formaten en hun typische gebruikssituaties.
| Formaat | Extensie | Importeren | Exporteren | Materiaalondersteuning | Scènehiërarchie |
|---|---|---|---|---|---|
| OBJ | .obj | Ja | Ja | Basis (MTL-bestanden) | Vlak |
| STL | .stl | Ja | Ja | Geen | Vlak |
| glTF 2.0 | .gltf | Ja | Ja | PBR | Volledig |
| GLB | .glb | Ja | Ja | PBR | Volledig |
| FBX | .fbx | Ja | Nee | Rijk | Volledig |
OBJ, STL, glTF en GLB ondersteunen zowel import als export. FBX wordt ondersteund voor alleen import. GLB (binaire glTF) wordt geproduceerd via GltfSaveOptions met setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ is een van de meest breed ondersteunde 3D-meshformaten. Het slaat geometrie op als platte tekst, met een optionele .mtl bijbehorend bestand voor materialen.
OBJ-bestanden laden
De eenvoudigste aanpak is om het bestandspad direct door te geven:
Scene scene = Scene.fromFile("model.obj");
Voor meer controle, gebruik ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Wanneer het OBJ‑bestand een MTL‑bestand (via een mtllib directive), zal de bibliotheek proberen de materiaaldefinities automatisch te laden. Het MTL‑bestand moet zich in dezelfde map bevinden als het OBJ‑bestand of op het pad dat in de directive is opgegeven.
Opslaan als OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
OBJ-toepassingen
- Mesh-gegevens uitwisselen tussen verschillende 3D-tools.
- Modellen importeren uit assetbibliotheken die in OBJ-formaat distribueren.
- Snelle inspectie van geometrie zonder complexe scènehiërarchieën.
STL: Stereolithografie
STL is het standaardformaat voor 3D-printen. Het vertegenwoordigt ruwe getrianguleerde geometrie zonder materialen, kleuren of scènehiërarchie. STL-bestanden zijn er in twee varianten: ASCII (menselijk leesbaar) en binair (compact).
STL-bestanden laden
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Opslaan als STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Om de uitvoer te controleren, gebruik StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
STL-overwegingen
- STL-bestanden bevatten alleen getrianguleerde geometrie. Materialen, texturen en de scènehiërarchie gaan verloren bij het exporteren.
- Binaire STL is aanzienlijk kleiner dan ASCII STL voor grote modellen.
- STL is het voorkeursformaat wanneer het doel een 3D-printer of slicer‑software is.
glTF: GL Transmission Format
glTF is een modern formaat dat is ontworpen voor efficiënte transmissie en het laden van 3D‑content, met name op het web en in realtime‑toepassingen. Het ondersteunt PBR‑materialen, scènehiërarchieën en animaties.
glTF-bestanden laden
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Opslaan als glTF
De basisopslag gebruikt de bestandsextensie om het formaat te bepalen:
scene.save("output.gltf");
Voor gedetailleerde controle, gebruik GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Details van GltfSaveOptions
| Methode | Doel |
|---|---|
setFlipCoordinateSystem(boolean) | Draai de as van het coördinatensysteem om tijdens export. Handig bij het converteren van Y-up naar Z-up of omgekeerd. |
setPrettyPrint(boolean) | Formatteer de output JSON met inspringing voor leesbaarheid. Stel in op false voor een kleinere bestandsgrootte in productie. |
glTF-toepassingen
- Webgebaseerde 3D-viewers (three.js, Babylon.js).
- Realtime-toepassingen en game-engines.
- Behoud van PBR-materiaaldefinities tussen tools.
FBX: Filmbox (Alleen import)
FBX is een propriëtair formaat van Autodesk dat veel wordt gebruikt in game‑ontwikkeling en digitale contentcreatie. Het ondersteunt rijke scène‑hiërarchieën, materialen en animaties. Aspose.3D FOSS voor Java ondersteunt FBX voor alleen importeren – exporteren naar FBX is niet beschikbaar.
FBX‑bestanden laden
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
FBX converteren naar andere formaten
Aangezien export van FBX niet wordt ondersteund, converteer geïmporteerde FBX‑scènes naar glTF, GLB, OBJ of STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
FBX-gebruikssituaties
- Assets importeren vanuit Autodesk‑tools (Maya, 3ds Max) en converteren naar andere formaten.
- Rigged personages en geanimeerde scènes laden voor herexport naar glTF/GLB.
Batchconversie
Een veelvoorkomende workflow is het converteren van een volledige map met bestanden van het ene formaat naar het andere. Hier is een patroon voor batchconversie:
import com.aspose.threed.*;
import java.io.File;
public class BatchConvert {
public static void main(String[] args) throws Exception {
File inputDir = new File("models/obj");
File outputDir = new File("models/gltf");
outputDir.mkdirs();
GltfSaveOptions saveOpts = new GltfSaveOptions();
saveOpts.setPrettyPrint(true);
File[] objFiles = inputDir.listFiles(
(dir, name) -> name.toLowerCase().endsWith(".obj")
);
if (objFiles == null) return;
for (File objFile : objFiles) {
String baseName = objFile.getName()
.replaceFirst("\\.obj$", "");
Scene scene = Scene.fromFile(objFile.getAbsolutePath());
String outPath = new File(outputDir, baseName + ".gltf")
.getAbsolutePath();
scene.save(outPath, saveOpts);
System.out.println("Converted: " + objFile.getName()
+ " -> " + baseName + ".gltf");
}
}
}
Dit laadt elke .obj bestand in een map, converteert elk naar glTF met mooi opgemaakte output, en slaat de resultaten op. Je kunt dit patroon aanpassen voor elke bron- en doelformaatcombinatie.
Cross-Formaat Conversiereferentie
De volgende tabel toont wat je kunt verwachten bij het converteren tussen formaten.
| Van | Naar | Geometrie | Materialen | Hiërarchie | Notities |
|---|---|---|---|---|---|
| OBJ | STL | Behouden | Verloren | N/A | STL heeft geen materiaalondersteuning |
| OBJ | glTF/GLB | Behouden | Geconverteerd naar PBR | Vlak | MTL-materialen waar mogelijk gemapt |
| STL | OBJ | Behouden | Geen | N/A | Geen materialen in de bron |
| STL | glTF/GLB | Behouden | Standaard | Plat | Standaardmateriaal toegepast |
| glTF | OBJ | Behouden | Vereenvoudigd | Vlak | PBR naar basismateriaal |
| glTF | STL | Behouden | Verloren | Afgevlakt | Alleen geometrie |
| FBX | OBJ | Behouden | Vereenvoudigd | Afgevlakt | Materiaalversimpeling |
| FBX | STL | Behouden | Verloren | Vlak gemaakt | Alleen geometrie |
| FBX | glTF/GLB | Behouden | Omgezet naar PBR | Behouden | Goede getrouwheid |
Algemene Conversierichtlijnen
- Geometrie wordt altijd behouden over alle formaatparen.
- Materialen presteert het best tussen glTF en FBX, die beide rijke materiaalmodellen ondersteunen. Converteren naar STL verwijdert altijd materialen. Converteren naar OBJ vereenvoudigt materialen tot het basismodel MTL.
- Scènehiërarchie wordt behouden tussen glTF en FBX. OBJ en STL produceren platte structuren.
Alles bij elkaar brengen
Hier is een volledig voorbeeld dat een OBJ‑bestand laadt, de knooppunten inspecteert en exporteert naar zowel glTF als GLB:
import com.aspose.threed.*;
public class FormatWorkflow {
public static void main(String[] args) throws Exception {
// Load
Scene scene = Scene.fromFile("input.obj");
// Inspect
System.out.println("Nodes in scene:");
for (Node child : scene.getRootNode().getChildNodes()) {
System.out.println(" " + child.getName());
Transform t = child.getTransform();
System.out.println(" Translation: "
+ t.getTranslation());
}
// Export to glTF with options
GltfSaveOptions gltfOpts = new GltfSaveOptions();
gltfOpts.setPrettyPrint(true);
scene.save("output.gltf", gltfOpts);
// Export to GLB (binary glTF)
GltfSaveOptions glbOpts = new GltfSaveOptions();
glbOpts.setContentType(FileContentType.BINARY);
scene.save("output.glb", glbOpts);
System.out.println("Export complete.");
}
}
Samenvatting
Aspose.3D FOSS voor Java biedt je een consistente API over meerdere formaten. De belangrijkste punten:
- OBJ – eenvoudige mesh‑uitwisseling met basismaterialen.
- STL – alleen‑geometrieformaat voor 3D‑printpijplijnen.
- glTF / GLB – modern PBR‑geschikt formaat voor web‑ en realtimegebruik. Gebruik
GltfSaveOptionsmetsetContentType(FileContentType.BINARY)voor GLB-uitvoer. - FBX – alleen importeren; rijk formaat voor het laden van assets vanuit game-engines en DCC-tools.
Gebruik format-specifieke laad- en opslaanoptieklassen (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) wanneer je fijnmazige controle nodig hebt over het import- of exportproces.
Voor meer details, bezoek de Aspose.3D documentatie of bekijk de bron op GitHub.