Aspose.3D FOSS за Java поддържа пет 3D файлови формата: OBJ, STL, glTF, GLB, и FBX (само за импортиране).
Всички примери използват com.aspose.threed.* пакет:
import com.aspose.threed.*;
Maven зависимост:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Ландшафт на форматите
Преди да се потопим, ето бърз преглед на четирите поддържани формати и типичните им случаи на употреба.
| Формат | Разширение | Импорт | Експорт | Поддръжка на материали | Йерархия на сцената |
|---|---|---|---|---|---|
| OBJ | .obj | Да | Да | Основен (MTL файлове) | Плосък |
| STL | .stl | Да | Да | Няма | Плосък |
| glTF 2.0 | .gltf | Да | Да | PBR | Пълен |
| GLB | .glb | Да | Да | PBR | Пълен |
| FBX | .fbx | Да | Не | Богат | Пълен |
OBJ, STL, glTF и GLB поддържат както внос, така и износ. FBX се поддържа за само импорт. GLB (binary glTF) се произвежда чрез GltfSaveOptions с setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ е един от най-широко поддържаните 3D мрежови формати. Той съхранява геометрията като обикновен текст, с опционален .mtl съпътстващ файл за материали.
Зареждане на OBJ файлове
Най‑опростеният подход е да подадете пътя към файла директно:
Scene scene = Scene.fromFile("model.obj");
За по-голям контрол използвайте ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Когато OBJ файлът реферира MTL файл (чрез mtllib директива), библиотеката ще се опита автоматично да зареди дефинициите на материалите от него. MTL файлът трябва да се намира в същата директория като OBJ файла или на пътя, указан в директивата.
Записване като OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
Примери за употреба на OBJ
- Обмен на мрежови данни между различни 3D инструменти.
- Импортиране на модели от библиотеки с активи, които разпространяват в OBJ формат.
- Бърз преглед на геометрията без сложни йерархии на сцената.
STL: Стереолитография
STL е стандартният формат за 3D печат. Той представлява сурова триангулирана геометрия без материали, цветове или йерархия на сцената. STL файловете се предлагат в два варианта: ASCII (четим за хора) и бинарен (компактен).
Зареждане на STL файлове
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Записване като STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
За да контролирате изхода, използвайте StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
Съображения за STL
- STL файловете съдържат само триангулирана геометрия. Материалите, текстурите и йерархията на сцената се губят при експортиране.
- Бинарният STL е значително по-малък от ASCII STL за големи модели.
- STL е предпочитаният формат, когато целта е 3D принтер или софтуер за нарязване.
glTF: GL Transmission Format
glTF е модерен формат, създаден за ефективно предаване и зареждане на 3D съдържание, особено в уеб среда и в реално‑времеви приложения. Той поддържа PBR материали, йерархии на сцената и анимации.
Зареждане на glTF файлове
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Записване като glTF
Основното записване използва разширението на файла, за да определи формата:
scene.save("output.gltf");
За детайлен контрол, използвайте GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Подробности за GltfSaveOptions
| Метод | Цел |
|---|---|
setFlipCoordinateSystem(boolean) | Обръщане на оста на координатната система при експортиране. Полезно при конвертиране от Y-горе към Z-горе или обратно. |
setPrettyPrint(boolean) | Форматирайте изходния JSON с отстъп за по‑четимост. Задайте на false за по‑малък размер на файла в продукция. |
Примери за употреба на glTF
- Уеб-базирани 3D прегледачи (three.js, Babylon.js).
- Приложения в реално време и игрови енджини.
- Запазване на PBR дефинициите на материалите между различни инструменти.
FBX: Filmbox (само импорт)
FBX е собственически формат на Autodesk, който се използва широко в гейм разработката и създаването на цифрово съдържание. Той поддържа богати йерархии на сцената, материали и анимации. Aspose.3D FOSS за Java поддържа FBX за import only – export to FBX is not available.
Зареждане на FBX файлове
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Конвертиране на FBX към други формати
Тъй като експортирането на FBX не се поддържа, конвертирайте импортираните FBX сцени към glTF, GLB, OBJ или STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
Примери за употреба на FBX
- Импортиране на активи от инструменти на Autodesk (Maya, 3ds Max) и конвертиране към други формати.
- Зареждане на ригирани персонажи и анимирани сцени за повторен експорт към glTF/GLB.
Пакетно конвертиране
Обичаен работен процес е конвертирането на цял каталог с файлове от един формат в друг. Ето шаблон за пакетно конвертиране:
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");
}
}
}
This loads every .obj file in a directory, converts each to glTF with pretty-printed output, and saves the results. You can adapt this pattern for any source and target format combination.
Референтен материал за конвертиране между формати
Следната таблица показва какво да очаквате при конвертиране между формати.
| From | To | Geometry | Materials | Йерархия | Бележки |
|---|---|---|---|---|---|
| OBJ | STL | Запазено | Загубено | N/A | STL няма поддръжка на материали |
| OBJ | glTF/GLB | Запазено | Конвертирано в PBR | Плосък | MTL материали, съпоставени, където е възможно |
| STL | OBJ | Запазено | Няма | N/A | Няма материали в източника |
| STL | glTF/GLB | Запазено | По подразбиране | Плосък | Приложен е материал по подразбиране |
| glTF | OBJ | Запазено | Опростено | Изплоскано | PBR към базов материал |
| glTF | STL | Запазено | Загубено | Изравнено | Само геометрия |
| FBX | OBJ | Запазено | Опростено | Изравнено | Опростяване на материал |
| FBX | STL | Запазено | Загубено | Изплющено | Само геометрия |
| FBX | glTF/GLB | Запазено | Конвертирано в PBR | Запазено | Добра точност |
Общи насоки за конвертиране
- Геометрия винаги се запазва при всички двойки формати.
- Материали оцелява най-добре между glTF и FBX, които и двете поддържат богати модели на материали. Конвертирането към STL винаги премахва материалите. Конвертирането към OBJ опростява материалите до базовия MTL модел.
- Йерархия на сцената се запазва между glTF и FBX. OBJ и STL създават плоски структури.
Събиране на всичко заедно
Ето пълен пример, който зарежда OBJ файл, инспектира неговите възли и експортира както в glTF, така и в 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.");
}
}
Обобщение
Aspose.3D FOSS for Java ви предоставя последователен API за множество формати. Ключовите точки:
- OBJ – прост обмен на мрежи с базови материали.
- STL – формат само за геометрия, предназначен за 3D печатни процеси.
- glTF / GLB – модерен формат, поддържащ PBR, за уеб и реалновремево използване. Използвайте
GltfSaveOptionsсsetContentType(FileContentType.BINARY)за изход в GLB. - FBX – само за импортиране; богат формат за зареждане на активи от игрови енджини и DCC инструменти.
Използвайте класове за опции за зареждане и запазване, специфични за формата (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) когато се нуждаете от фино управление на процеса на импортиране или експортиране.
За повече подробности, посетете Aspose.3D документация или прегледайте изходния код на GitHub.