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 не триангулира автоматично. Бинарният STL записва само първите 3 върха на всяка полигонална лице; четирикътови и n‑гранни лица се отрязват без предупреждение. ASCII 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‑up към Z‑up или обратно. |
setPrettyPrint(boolean) | Форматирайте изходния JSON с отстъп за четимост. Задайте на false за по-малък размер на файла в продукция. |
Приложения на glTF
- Уеб базирани 3D прегледачи (three.js, Babylon.js).
- Приложения в реално време и игрови енджини.
- Запазване на PBR дефинициите на материалите между различни инструменти.
FBX: Filmbox (само импорт)
FBX е собственически формат на Autodesk, който се използва широко в гейм разработката и създаването на цифрово съдържание. Aspose.3D FOSS за Java поддържа FBX за само за импортиране — експортирането към FBX не е налично.
Само бинарен FBX. Импортерът за FBX чете само бинарни FBX файлове. Предаването на ASCII FBX файл предизвиква ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Йерархията на възлите и извличането на материали от FBX не са напълно проверени; сложни FBX сцени може да не се заредят изцяло. Анимациите и ригингът не са реализирани.
Зареждане на 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) и конвертиране към други формати.
- Зареждане на бинарна FBX геометрия и повторен експорт към glTF/GLB, OBJ или STL.
Пакетно конвертиране
Често срещан работен процес е конвертирането на цял каталог от файлове от един формат в друг. Ето шаблон за пакетно конвертиране:
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");
}
}
}
Това зарежда всяко .obj файл в директория, конвертира всеки в glTF с красиво форматиран изход и запазва резултатите. Можете да адаптирате този шаблон за всяка комбинация от изходен и целеви формат.
Препратка за конвертиране между формати
Следната таблица показва какво да очаквате при конвертиране между формати.
| От | Към | Геометрия | Материали | Йерархия | Бележки |
|---|---|---|---|---|---|
| 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 | Запазено | Добра вярност |
Общи насоки за конвертиране
- Геометрия обикновено се запазва между двойките формати, с едно важно изключение: при експортиране към STL мрежите трябва да се състоят изцяло от триъгълни лица. Бинарният STL тихо съкращава четириъгълни и n‑гранни лица до първите им 3 върха; ASCII STL генерира деформиран изход за лица, които не са триъгълници.
- Материали оцеляват най-добре между сцени, импортирани от glTF и FBX, които включват данни за материали. Конвертирането към STL винаги премахва материалите. Конвертирането към OBJ опростява материалите до базовия MTL модел.
- Йерархия на сцената се запазва между файлове във формат glTF. OBJ и STL създават плоски структури. Йерархията на FBX и извличането на материали не са напълно проверени в тази версия.
Събиране на всичко заедно
Ето пълен пример, който зарежда 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 за Java ви предоставя последователен API за множество формати. Ключовите точки:
- OBJ – прост обмен на мрежи с базови материали.
- STL – формат само за геометрия, предназначен за 3D печатни процеси.
- glTF / GLB – модерен формат, поддържащ PBR, за уеб и реално‑време. Използвайте
GltfSaveOptionsсsetContentType(FileContentType.BINARY)за GLB изход. - FBX – само за импортиране; богат формат за зареждане на активи от игрови енджини и DCC инструменти.
Използвайте класове за зареждане и запазване, специфични за формата (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) когато се нуждаете от фино управление на процеса на импортиране или експортиране.
За повече подробности, посетете Aspose.3D документация или прегледайте източника на GitHub.