Aspose.3D FOSS for Java understøtter fem 3D‑filformater: OBJ, STL, glTF, GLB, og FBX (kun import).
Alle eksempler bruger com.aspose.threed.* pakken:
import com.aspose.threed.*;
Maven‑afhængighed:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Formatoversigt
Før du dykker ned, er her en hurtig oversigt over de fire understøttede formater og deres typiske anvendelsestilfælde.
| Format | Udvidelse | Import | Export | Materialestøtte | Sceneshierarki |
|---|---|---|---|---|---|
| OBJ | .obj | Ja | Ja | Grundlæggende (MTL‑filer) | Flad |
| STL | .stl | Ja | Ja | Ingen | Flad |
| glTF 2.0 | .gltf | Ja | Ja | PBR | Fuld |
| GLB | .glb | Ja | Ja | PBR | Fuld |
| FBX | .fbx | Ja | Nej | Rig | Fuld |
OBJ, STL, glTF og GLB understøtter både import og eksport. FBX understøttes til kun import. GLB (binær glTF) genereres via GltfSaveOptions med setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ er et af de mest udbredte understøttede 3D-mesh-formater. Det gemmer geometri som almindelig tekst, med en valgfri .mtl medfølgende fil til materialer.
Indlæsning af OBJ‑filer
Den enkleste metode er at videregive filstien direkte:
Scene scene = Scene.fromFile("model.obj");
For mere kontrol, brug ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Når OBJ-filen refererer til en MTL-fil (via en mtllib direktiv), vil biblioteket forsøge at indlæse materialedefinitioner fra den automatisk. MTL-filen skal være i samme mappe som OBJ-filen eller på den sti, der er angivet i direktivet.
Gem som OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
OBJ‑anvendelsestilfælde
- Udveksling af mesh‑data mellem forskellige 3D‑værktøjer.
- Import af modeller fra asset‑biblioteker, der distribueres i OBJ‑format.
- Hurtig inspektion af geometri uden komplekse scenehierarkier.
STL: Stereolithografi
STL er standardformatet til 3D‑print. Det repræsenterer rå trianguleret geometri uden materialer, farver eller scenehierarki. STL‑filer findes i to varianter: ASCII (menneskelæselig) og binær (kompakt).
Indlæsning af STL‑filer
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Gem som STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
For at kontrollere outputtet, brug StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
STL‑overvejelser
- STL gemmer kun trekantgeometri. Materialer, teksturer og scenehierarki understøttes ikke og fjernes ved eksport.
- STL-eksport gør ikke triangulere automatisk. Binær STL skriver kun de første 3 hjørner af hver polygonflade; firkant- og n‑gon‑flader bliver tavst afkortet. ASCII STL skriver alle hjørneindekser per flade, hvilket giver fejlbehæftet output for ikke‑trekantede flader. Brug altid forud‑triangulerede mesh (alle flader er trekanter), når du eksporterer til STL.
- Binær STL er betydeligt mindre end ASCII STL for store modeller.
- STL er det foretrukne format, når målet er en 3D‑printer eller slicer‑software.
glTF: GL Transmission Format
glTF er et moderne format designet til effektiv transmission og indlæsning af 3D‑indhold, især på nettet og i realtids‑applikationer. Det understøtter PBR‑materialer, scenehierarkier og animationer.
Indlæsning af glTF‑filer
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Gem som glTF
Den grundlæggende gemning bruger filendelsen til at bestemme formatet:
scene.save("output.gltf");
For detaljeret kontrol, brug GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
GltfSaveOptions-detaljer
| Metode | Formål |
|---|---|
setFlipCoordinateSystem(boolean) | Vend koordinatsystemets akse under eksport. Nyttigt ved konvertering fra Y‑op til Z‑op eller omvendt. |
setPrettyPrint(boolean) | Formater output‑JSON’en med indrykning for læsbarhed. Sæt til false for mindre filstørrelse i produktion. |
glTF-anvendelsestilfælde
- Webbaserede 3D-fremvisere (three.js, Babylon.js).
- Realtime-applikationer og spilmotorer.
- Bevare PBR-materialdefinitioner på tværs af værktøjer.
FBX: Filmbox (kun import)
FBX er et proprietært format fra Autodesk, som er udbredt i spiludvikling og digital indholdsoprettelse. Aspose.3D FOSS for Java understøtter FBX til kun import — eksport til FBX er ikke tilgængelig.
Kun binær FBX. FBX‑importøren læser kun binære FBX‑filer. At give en ASCII FBX‑fil udløser ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Node‑hierarki og materialekstraktion fra FBX er ikke fuldt verificeret; komplekse FBX‑scener kan muligvis ikke indlæses fuldstændigt. Animationer og rigging er ikke implementeret.
Indlæsning af FBX-filer
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Konvertering af FBX til andre formater
Da FBX-eksport ikke understøttes, kan importerede FBX-scener konverteres til 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-anvendelsestilfælde
- Import af statiske mesh-aktiver fra Autodesk-værktøjer (Maya, 3ds Max) og konvertering til andre formater.
- Indlæsning af binær FBX-geometri og geneksport til glTF/GLB, OBJ eller STL.
Batchkonvertering
En almindelig arbejdsgang er at konvertere en hel mappe med filer fra ét format til et andet. Her er et mønster for 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");
}
}
}
Dette indlæser hver .obj fil i en mappe, konverterer hver til glTF med pænt formateret output, og gemmer resultaterne. Du kan tilpasse dette mønster til enhver kilde- og målformatkombination.
Reference til tværformatkonvertering
Følgende tabel viser, hvad du kan forvente ved konvertering mellem formater.
| Fra | Til | Geometri | Materialer | Hierarki | Noter |
|---|---|---|---|---|---|
| OBJ | STL | Bevarte | Mistet | N/A | STL har ingen materialestøtte |
| OBJ | glTF/GLB | Bevarte | Konverteret til PBR | Flad | MTL-materialer kortlagt hvor det er muligt |
| STL | OBJ | Bevarte | Ingen | N/A | Ingen materialer i kilden |
| STL | glTF/GLB | Bevar | Standard | Flad | Standardmaterial anvendt |
| glTF | OBJ | Bevaret | Forenklet | Fladet | PBR til grundmateriale |
| glTF | STL | Bevaret | Tabt | Fladet | Kun geometri |
| FBX | OBJ | Bevaret | Forenklet | Fladet | Materialeforenkling |
| FBX | STL | Bevaret | Tabt | Fladtrykt | Kun geometri |
| FBX | glTF/GLB | Bevaret | Konverteret til PBR | Bevaret | God nøjagtighed |
Generelle konverteringsretningslinjer
- Geometri bevares generelt på tværs af formatpar, med én vigtig undtagelse: ved eksport til STL skal mesh‑erne udelukkende bestå af trekantsflader. Binær STL afkorter stiltiende quad‑ og n‑gon‑flader til deres første 3 hjørner; ASCII STL genererer fejlbehæftet output for ikke‑trekantflader.
- Materialer overlever bedst mellem glTF- og FBX‑importerede scener, der indeholder materialedata. Konvertering til STL fjerner altid materialer. Konvertering til OBJ forenkler materialer til den grundlæggende MTL‑model.
- Sceneshierarki bevares mellem glTF-formatfiler. OBJ og STL producerer flade strukturer. FBX‑hierarki og materialekstraktion er ikke fuldt verificeret i denne version.
Sammenlægning af alt
Her er et komplet eksempel, der indlæser en OBJ‑fil, inspicerer dens noder og eksporterer til både glTF og 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.");
}
}
Opsummering
Aspose.3D FOSS for Java giver dig et konsistent API på tværs af flere formater. Nøglepunkterne:
- OBJ – simpel mesh‑udveksling med grundlæggende materialer.
- STL – kun-geometri-format til 3D‑print‑pipeline.
- glTF / GLB – moderne PBR‑kapabelt format til web‑ og realtidsbrug. Brug
GltfSaveOptionsmedsetContentType(FileContentType.BINARY)til GLB‑output. - FBX – kun import; rigt format til indlæsning af assets fra spilmotorer og DCC‑værktøjer.
Brug format‑specifikke indlæsnings‑ og gemmeindstillingsklasser (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) når du har brug for finjusteret kontrol over import‑ eller eksportprocessen.
For flere detaljer, besøg den Aspose.3D-dokumentation eller gennemse kilden på GitHub.