Aspose.3D FOSS priekš Java atbalsta piecus 3D failu formātus: OBJ, STL, glTF, GLB, un FBX (tikai importēšanai).
Visi piemēri izmanto com.aspose.threed.* pakotni:
import com.aspose.threed.*;
Maven atkarība:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Formāta pārskats
Pirms iedziļināšanās, šeit ir īss pārskats par četriem atbalstītajiem formātiem un to tipiskajām lietošanas situācijām.
| Formāts | Paplašinājums | Importēt | Eksportēt | Materiālu atbalsts | Ainas hierarhija |
|---|---|---|---|---|---|
| OBJ | .obj | Jā | Jā | Pamata (MTL faili) | Plakans |
| STL | .stl | Jā | Jā | Nav | Plakans |
| glTF 2.0 | .gltf | Jā | Jā | PBR | Pilns |
| GLB | .glb | Jā | Jā | PBR | Pilns |
| FBX | .fbx | Jā | Nē | Bagāts | Pilns |
OBJ, STL, glTF, un GLB atbalsta gan importu, gan eksportu. FBX tiek atbalstīts tikai importam. GLB (binary glTF) tiek radīts, izmantojot GltfSaveOptions ar setContentType(FileContentType.BINARY).
OBJ: Wavefront objekts
OBJ ir viens no visplašāk atbalstītajiem 3D režģa formātiem. Tas saglabā ģeometriju kā vienkāršu tekstu, ar izvēles .mtl piederošu failu materiāliem.
OBJ failu ielāde
Visvienkāršākais veids ir nodot faila ceļu tieši:
Scene scene = Scene.fromFile("model.obj");
Lai iegūtu lielāku kontroli, izmantojiet ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Kad OBJ fails atsaucas uz MTL failu (caur mtllib norādījumu), bibliotēka automātiski mēģinās ielādēt materiālu definīcijas no tā. MTL failam jābūt tajā pašā direktorijā kā OBJ failam vai ceļā, kas norādīts norādījumā.
Saglabāšana kā OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
OBJ lietošanas gadījumi
- Tīklu datu apmaiņa starp dažādiem 3D rīkiem.
- Modeļu importēšana no aktīvu bibliotēkām, kas izplata OBJ formātā.
- Ātra ģeometrijas pārbaude bez sarežģītām ainas hierarhijām.
STL: Stereolitogrāfija
STL ir standarta formāts 3D drukāšanai. Tas attēlo neapstrādātu trīsstūra ģeometriju bez materiāliem, krāsām vai skatuves hierarhijas. STL faili ir pieejami divās versijās: ASCII (cilvēkam lasāma) un binārā (kompakta).
STL failu ielāde
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Saglabāšana kā STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Lai kontrolētu izvadi, izmantojiet StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
STL apsvērumi
- STL saglabā tikai trīsstūra ģeometriju. Materiāli, tekstūras un skatuves hierarhija netiek atbalstīti un tiek izlaisti eksportējot.
- STL eksports veic ne automātiski trīsstūru veidošana. Binārais STL ieraksta tikai pirmos 3 virsotnes katras daudzstūra sejas; kvadrātveida un n-gona sejas tiek klusi apgrieztas. ASCII STL ieraksta visus virsotņu indeksus katrai sejai, radot nepareizu izvadi ne-trīsstūru sejām. Vienmēr izmantojiet pre-triangulated meshes (all-triangle faces), eksportējot uz STL.
- Binārais STL ir būtiski mazāks nekā ASCII STL lieliem modeļiem.
- STL ir izvēlētā formāts, ja mērķis ir 3D printeris vai slicera programmatūra.
glTF: GL pārraides formāts
glTF ir mūsdienīgs formāts, kas izstrādāts, lai nodrošinātu efektīvu 3D satura pārraidi un ielādi, īpaši tīmeklī un reāllaika lietojumprogrammās. Tas atbalsta PBR materiālus, ainas hierarhijas un animācijas.
Ielādē glTF failus
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Saglabā kā glTF
Pamatsaglabāšana izmanto faila paplašinājumu, lai noteiktu formātu:
scene.save("output.gltf");
Lai iegūtu detalizētu kontroli, izmantojiet GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
GltfSaveOptions detaļas
| Metode | Mērķis |
|---|---|
setFlipCoordinateSystem(boolean) | Apgriezt koordinātu sistēmas asi eksportēšanas laikā. Noderīgi, pārvēršot no Y‑augšas uz Z‑augšu vai otrādi. |
setPrettyPrint(boolean) | Formatēt izvadi JSON ar atkāpēm, lai uzlabotu lasāmību. Iestatiet uz false lai ražošanas vidē būtu mazāks faila izmērs. |
glTF lietošanas gadījumi
- Tīmekļa balstīti 3D skatītāji (three.js, Babylon.js).
- Reāllaika lietojumprogrammas un spēļu dzinēji.
- PBR materiālu definīciju saglabāšana starp rīkiem.
FBX: Filmbox (tikai importēšana)
FBX ir Autodesk īpašnieka formāts, kas plaši tiek izmantots spēļu izstrādē un digitālā satura veidošanā. Aspose.3D FOSS priekš Java atbalsta FBX priekš tikai importam — eksports uz FBX nav pieejams.
Tikai binārais FBX. FBX importētājs lasa tikai bināros FBX failus. ASCII FBX faila nodrošināšana izraisa
ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Mezglu hierarhija un materiālu izguve no FBX nav pilnībā pārbaudīta; sarežģītas FBX ainas var netikt pilnībā ielādētas. Animācijas un rigging nav īstenoti.
FBX failu ielāde
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
FBX konvertēšana uz citām formātām
Tā kā FBX eksportēšana netiek atbalstīta, konvertējiet importētās FBX ainas uz glTF, GLB, OBJ vai STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
FBX lietošanas gadījumi
- Statisko režģa resursu importēšana no Autodesk rīkiem (Maya, 3ds Max) un to konvertēšana uz citām formātām.
- Binārās FBX ģeometrijas ielāde un atkārtota eksportēšana uz glTF/GLB, OBJ vai STL.
Masveida konvertēšana
Bieži izmantots darba plūsmas veids ir visu direktorijas failu konvertēšana no viena formāta uz citu. Šeit ir paraugs grupas konvertēšanai:
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");
}
}
}
Tas ielādē katru .obj failu direktorijā, pārvērš katru uz glTF ar skaisti formatētu izvadi, un saglabā rezultātus. Jūs varat pielāgot šo modeli jebkurai avota un mērķa formāta kombinācijai.
Starpformātu Konvertēšanas Atsauce
Šajā tabulā parādīts, ko sagaidīt, pārveidojot starp formātiem.
| No | Uz | Ģeometrija | Materiāli | Hierarhija | Piezīmes |
|---|---|---|---|---|---|
| OBJ | STL | Saglabāts | Zaudēts | N/A | STL nav materiālu atbalsta |
| OBJ | glTF/GLB | Saglabāts | Pārveidots uz PBR | Plakans | MTL materiāli kartēti, ja iespējams |
| STL | OBJ | Saglabāts | Nav | N/A | Avotā nav materiālu |
| STL | glTF/GLB | Saglabāts | Noklusējums | Plakans | Pielietots noklusējuma materiāls |
| glTF | OBJ | Saglabāts | Vienkāršots | Plaknots | PBR uz pamata materiālu |
| glTF | STL | Saglabāts | Zaudēts | Saplatināts | Tikai ģeometrija |
| FBX | OBJ | Saglabāts | Vienkāršots | Saplatināts | Materiāla vienkāršošana |
| FBX | STL | Saglabāts | Zaudēts | Plaknots | Tikai ģeometrija |
| FBX | glTF/GLB | Saglabāts | Pārveidots uz PBR | Saglabāts | Laba precizitāte |
Vispārīgi pārveidošanas vadlīnijas
- Ģeometrija Parasti tiek saglabāts starp formāta pāriem, ar vienu svarīgu izņēmumu: eksportējot uz STL, tīkliem jābūt pilnīgi no trīsstūra sejas sastāvīgiem. Binārais STL klusi apgriež kvadrātu un n‑daļas sejas līdz to pirmajiem 3 virsotnēm; ASCII STL rada deformētu izvadi ne‑trīsstūra sejām.
- Materiāli vislabāk izdzīvo starp glTF un FBX importētajām ainas, kas ietver materiālu datus. Pārveidošana uz STL vienmēr izmet materiālus. Pārveidošana uz OBJ vienkāršo materiālus uz pamata MTL modeli.
- Ainas hierarhija ir saglabāta starp glTF-format failiem. OBJ un STL izveido plakanu struktūru. FBX hierarhija un materiālu izguve nav pilnībā pārbaudīta šajā versijā.
Visu kopā
Šeit ir pilns piemērs, kas ielādē OBJ failu, pārbauda tā mezglus un eksportē gan uz glTF, gan 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.");
}
}
Kopsavilkums
Aspose.3D FOSS priekš Java nodrošina konsekventu API vairākos formātos. Galvenie punkti:
- OBJ – vienkārša mesh apmaiņa ar pamata materiāliem.
- STL – tikai ģeometrijas formāts 3D drukāšanas cauruļvadiem.
- glTF / GLB – moderns PBR-spējīgs formāts tīmekļa un reāllaika lietošanai. Izmantojiet
GltfSaveOptionsarsetContentType(FileContentType.BINARY)GLB izvadei. - FBX – tikai importēšanai; bagāts formāts līdzekļu ielādēšanai no spēļu dzinējiem un DCC rīkiem.
Izmantojiet formātam specifiskās ielādes un saglabāšanas opciju klases (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) kad jums ir nepieciešama smalkāka kontrole pār importēšanas vai eksportēšanas procesu.
Lai iegūtu vairāk informācijas, apmeklējiet Aspose.3D dokumentācija vai pārlūkojiet avotu uz GitHub.