Aspose.3D FOSS för Java stöder fem 3D‑filformat: OBJ, STL, glTF, GLB, och FBX (endast import).
Alla exempel använder com.aspose.threed.* paket:
import com.aspose.threed.*;
Maven‑beroende:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Formatöversikt
Innan du dyker ner, här är en snabb översikt över de fyra stödda formaten och deras typiska användningsområden.
| Format | Filändelse | Importera | Exportera | Materialstöd | Scenhierarki |
|---|---|---|---|---|---|
| OBJ | .obj | Ja | Ja | Grundläggande (MTL-filer) | Platt |
| STL | .stl | Ja | Ja | Ingen | Platt |
| glTF 2.0 | .gltf | Ja | Ja | PBR | Full |
| GLB | .glb | Ja | Ja | PBR | Full |
| FBX | .fbx | Ja | Nej | Rik | Full |
OBJ, STL, glTF och GLB stöder både import och export. FBX stöds för endast import. GLB (binär glTF) skapas via GltfSaveOptions med setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ är ett av de mest allmänt stödda 3D-meshformaten. Det lagrar geometri som vanlig text, med ett valfritt .mtl tillhörande fil för material.
Laddar OBJ-filer
Det enklaste tillvägagångssättet är att skicka filvägen direkt:
Scene scene = Scene.fromFile("model.obj");
För mer kontroll, använd ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
När OBJ-filen refererar till en MTL-fil (via en mtllib direktiv), kommer biblioteket att försöka läsa in materialdefinitioner från den automatiskt. MTL-filen bör ligga i samma katalog som OBJ-filen eller på den sökväg som anges i direktivet.
Spara som OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
OBJ-användningsfall
- Utbyta meshdata mellan olika 3D-verktyg.
- Importera modeller från tillgångsbibliotek som distribueras i OBJ-format.
- Snabb inspektion av geometri utan komplexa scenhierarkier.
STL: Stereolitografi
STL är det standardformat som används för 3D-utskrift. Det representerar rå triangulerad geometri utan material, färger eller scenhierarki. STL-filer finns i två varianter: ASCII (läsbar för människor) och binär (kompakt).
Laddar STL-filer
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Spara som STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
För att kontrollera utdata, använd StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
STL-överväganden
- STL-filer innehåller endast triangulerad geometri. Material, texturer och scenhierarki går förlorade vid export.
- Binär STL är avsevärt mindre än ASCII STL för stora modeller.
- STL är det föredragna formatet när målet är en 3D-skrivare eller skivningsprogramvara.
glTF: GL Transmission Format
glTF är ett modernt format utformat för effektiv överföring och inläsning av 3D-innehåll, särskilt på webben och i realtidsapplikationer. Det stöder PBR-material, scenhierarkier och animationer.
Laddar glTF-filer
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Sparar som glTF
Den grundläggande sparningen använder filändelsen för att bestämma formatet:
scene.save("output.gltf");
För detaljerad kontroll, använd GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Detaljer för GltfSaveOptions
| Metod | Syfte |
|---|---|
setFlipCoordinateSystem(boolean) | Vänd koordinatsystemets axel vid export. Användbart när du konverterar från Y-upp till Z-upp eller vice versa. |
setPrettyPrint(boolean) | Formatera utdata-JSON med indrag för läsbarhet. Ställ in på false för mindre filstorlek i produktion. |
Användningsfall för glTF
- Webbaserade 3D‑visare (three.js, Babylon.js).
- Realtidsapplikationer och spelmotorer.
- Bevara PBR-materialdefinitioner mellan verktyg.
FBX: Filmbox (Endast import)
FBX är ett proprietärt format från Autodesk som är allmänt använt inom spelutveckling och digitalt innehållsskapande. Det stöder rika scenhierarkier, material och animationer. Aspose.3D FOSS för Java stöder FBX för endast import – export till FBX är inte tillgänglig.
Laddar FBX-filer
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Konvertera FBX till andra format
Eftersom FBX-export inte stöds, konvertera importerade FBX-scener till glTF, GLB, OBJ eller STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
FBX-användningsfall
- Import av tillgångar från Autodesk-verktyg (Maya, 3ds Max) och konvertering till andra format.
- Laddar riggade karaktärer och animerade scener för återexport till glTF/GLB.
Batchkonvertering
Ett vanligt arbetsflöde är att konvertera en hel katalog med filer från ett format till ett annat. Här är ett mönster för batchkonvertering:
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");
}
}
}
Det här laddar varje .obj fil i en katalog, konverterar varje till glTF med snyggt formaterad utskrift och sparar resultaten. Du kan anpassa detta mönster för vilken källa- och målformatkombination som helst.
Referens för konvertering mellan format
Följande tabell visar vad du kan förvänta dig när du konverterar mellan format.
| Från | Till | Geometri | Material | Hierarki | Anteckningar |
|---|---|---|---|---|---|
| OBJ | STL | Bevarad | Förlorad | N/A | STL har inget materialstöd |
| OBJ | glTF/GLB | Bevarad | Konverterad till PBR | Platt | MTL-material mappade där det är möjligt |
| STL | OBJ | Bevarad | Ingen | N/A | Inga material i källan |
| STL | glTF/GLB | Bevarad | Standard | Platt | Standardmaterial tillämpat |
| glTF | OBJ | Bevarad | Förenklad | Plattad | PBR till grundmaterial |
| glTF | STL | Bevarad | Förlorad | Plattad | Endast geometri |
| FBX | OBJ | Bevarad | Förenklad | Plattad | Materialförenkling |
| FBX | STL | Bevarad | Förlorad | Plattad | Endast geometri |
| FBX | glTF/GLB | Bevarad | Konverterad till PBR | Bevarad | God trohet |
Allmänna konverteringsriktlinjer
- Geometri behålls alltid över alla formatpar.
- Material behåller sig bäst mellan glTF och FBX, som båda stödjer rika materialmodeller. Att konvertera till STL tar alltid bort material. Att konvertera till OBJ förenklar material till den grundläggande MTL-modellen.
- Scenhierarki bevaras mellan glTF och FBX. OBJ och STL ger platta strukturer.
Sätter ihop allt
Här är ett komplett exempel som laddar en OBJ‑fil, inspekterar dess noder och exporterar till både glTF och 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.");
}
}
Sammanfattning
Aspose.3D FOSS for Java ger dig ett konsekvent API över flera format. Nyckelpunkterna:
- OBJ – enkel mesh-utbyte med grundläggande material.
- STL – endast-geometri-format för 3D-utskriftspipelines.
- glTF / GLB – modernt PBR-kompatibelt format för webb och realtidsanvändning. Använd
GltfSaveOptionsmedsetContentType(FileContentType.BINARY)för GLB-utdata. - FBX – endast import; rikt format för att ladda tillgångar från spelmotorer och DCC-verktyg.
Använd format‑specifika laddnings‑ och sparalternativsklasser (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) när du behöver fin‑granulär kontroll över import‑ eller exportprocessen.
För mer information, besök Aspose.3D-dokumentation eller bläddra i källkoden på GitHub.