Aspose.3D FOSS for Java understøtter fem 3D‑filformater: OBJ, STL, glTF, GLB, og FBX (kun import).
Alle eksempler bruger com.aspose.threed.* pakke:
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 | Filendelse | Importér | Eksporter | Materialestøtte | Scenehierarki |
|---|---|---|---|---|---|
| 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-objekt
OBJ er et af de mest udbredte 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 tilgang 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 distribuerer i OBJ-format.
- Hurtig inspektion af geometri uden komplekse scenehierarkier.
STL: Stereolitografi
STL er det standardformat for 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-filer indeholder kun trianguleret geometri. Materialer, teksturer og scenehierarki går tabt under eksport.
- 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 realtidsapplikationer. Det understøtter PBR-materialer, scenehierarkier og animationer.
Indlæser glTF-filer
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Gemmer 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. Indstil til false for mindre filstørrelse i produktion. |
glTF-anvendelsestilfælde
- Webbaserede 3D-fremvisere (three.js, Babylon.js).
- Real-time-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. Det understøtter rige scenehierarkier, materialer og animationer. Aspose.3D FOSS for Java understøtter FBX for kun import – eksport til FBX er ikke tilgængelig.
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, skal du konvertere importerede FBX-scener 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 aktiver fra Autodesk-værktøjer (Maya, 3ds Max) og konvertering til andre formater.
- Indlæser riggede karakterer og animerede scener til geneksport til glTF/GLB.
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, når du konverterer mellem formater.
| Fra | Til | Geometri | Materialer | Hierarki | Noter |
|---|---|---|---|---|---|
| OBJ | STL | Bevarte | Tabt | N/A | STL har ingen materialestøtte |
| OBJ | glTF/GLB | Uændret | Konverteret til PBR | Flad | MTL-materialer kortlagt hvor det er muligt |
| STL | OBJ | Uændret | Ingen | N/A | Ingen materialer i kilden |
| STL | glTF/GLB | Bevarte | Standard | Flad | Standardmateriale anvendt |
| glTF | OBJ | Bevarte | Forenklet | Fladet | PBR til grundmateriale |
| glTF | STL | Bevaret | Tabt | Fladet | Kun geometri |
| FBX | OBJ | Bevaret | Forenklet | Fladet | Materialforenkling |
| FBX | STL | Bevaret | Tabt | Fladet | Kun geometri |
| FBX | glTF/GLB | Bevaret | Konverteret til PBR | Bevaret | God nøjagtighed |
Generelle konverteringsretningslinjer
- Geometri bevares altid på tværs af alle formatpar.
- Materialer overlever bedst mellem glTF og FBX, som begge understøtter rige materialemodeller. Konvertering til STL fjerner altid materialer. Konvertering til OBJ forenkler materialer til den grundlæggende MTL-model.
- Sceneshierarki bevares mellem glTF og FBX. OBJ og STL producerer flade strukturer.
Sammenlægning af det hele
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 pipelines.
- glTF / GLB – moderne PBR-kompatibelt 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 gemme‑indstillingsklasser (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) når du har brug for finjusteret kontrol over import‑ eller eksportprocessen.
For flere detaljer, besøg Aspose.3D dokumentation eller gennemse kilden på GitHub.