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-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
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");
}
}
}
Це завантажує кожен .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 | Збережено | Висока точність |
Загальні рекомендації щодо перетворення
- Геометрія завжди зберігається у всіх парах форматів.
- Матеріали найкраще зберігаються між 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.