Aspose.3D FOSS для Java поддерживает пять 3D-форматов файлов: OBJ, STL, ГЛТФ, GLB,и FBX Этот пост является практичным, формат-по-формату руководством, показывающим, как загружать и сэкономить каждый из них, какие варианты доступны и как конвертировать между ними.
Все примеры используют com.aspose.threed.* Пакет →:
import com.aspose.threed.*;
В зависимости от мавзолей:
<dependency>
<groupId>org.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.5.0</version>
</dependency>Формат ландшафтов
Перед погружкой здесь проходит быстрый обзор четырех поддерживаемых формата и их типичных случаев использования.
| Формат | Расширение | Импорт | экспорт | Материальная поддержка | Иерархия сценария |
|---|---|---|---|---|---|
| OBJ | .obj | Да | Да | Файлы МТЛ (MtL files) | Плат |
| STL | .stl | Да | Да | Никакого | Плат |
| ГЛТФ 2.0 | .gltf | Да | Да | PBR | Полный |
| GLB | .glb | Да | Да | PBR | Полный |
| FBX | .fbx | Да | Не | богатые | Полный |
OBJ, STL, GLTF и GLB поддерживают как импорт, так и экспорт. Импорт только.GLB (бинарный ГЛТФ) производится через 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 Библиотека будет пытаться автоматически загрузить определения материала из нее. файл МТЛ должен находиться в том же каталоге, что и файл ОБД или на пути, указанном в директиве.
Сберегание как OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
ОБД использует случаи
- Обмен мешами данных между различными 3D-инструментами.
- Импорт моделей из библиотек активов, которые распространяются в формате OBJ.
- Быстрая инспекция геометрии без сложных иерархий сцены.
СТЕРОЛИТОГРАФИЯ - Stereolithography
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 пишет только первые 3 вертикали каждого полигона лица; квадратные и н-гонные лица тихо перекручиваются. ASCII STl пишется все вертексные показатели по лицу, производив деформированный выход для нетриангловных лиц. Всегда используйте предварительно триангулированные мешки (всех трехгранных лицей) при экспорте в СТЛ.
- Бинарный STL значительно меньше ASCII STl для крупных моделей.
- STL - это формат выбора, когда цель 3D-принтер или слайзер программного обеспечения.
ГЛТФ: 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);
Сберегание как ГЛТФ
Основное сохранение использует расширение файла для определения формата:
scene.save("output.gltf");
Для детального контроля, использования GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
ГТФСайнДекларация
| Метод | Цель |
|---|---|
setFlipCoordinateSystem(boolean) | Флип координатной системы оси во время экспорта. Полезный при конверте от Y-up до Z-Up или наоборот. |
setPrettyPrint(boolean) | Форматировать выход JSON с индексацией для чтения. false Для небольшого размера файла в производстве. |
ГЛТФ использует случаи
- 3D-видетели на веб-базе (three.js, Babylon.js).
- Реальные приложения и игровые двигатели.
- Сохранение определений материалов ПБР по инструментам.
FBX: Filmbox (Импорт только)
FBX является собственным формат Autodesk, который широко используется в разработке игр и создании цифрового контента. Aspose.3D FOSS для Java поддерживает FBx для Импорт только — экспорт на FBX не доступен.
Бинарный FBX только. Импортер FBX читает только бинарные файлы FB X. Проходя через файл ASCII FBx, выбросывается
ImportException("ASCII FBX format not yet supported - only binary FBX is supported").Иерархия узлов и извлечение материалов из FBX не полностью проверены; сложные FB X сцены могут быть не полными.
Загрузка файлов 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 | ГЛТФ / ГБВ | сохранились | Переведен в PBR | Плат | МТЛ-материалы, картографируемые где это возможно |
| STL | OBJ | сохранились | Никакого | N/A | Нет материалов в источнике |
| STL | ГЛТФ / ГБВ | сохранились | дефолт | Плат | Применение дефолта материала |
| ГЛТФ | OBJ | сохранились | Упрощенный | Плюсная | ПБР к базовому материалу |
| ГЛТФ | STL | сохранились | потерянный | Плюсная | Геометрия только |
| FBX | OBJ | сохранились | Упрощенный | Плюсная | Материальное упрощение |
| FBX | STL | сохранились | потерянный | Плюсная | Геометрия только |
| FBX | ГЛТФ / ГБВ | сохранились | Переведен в PBR | сохранились | Хорошая лояльность |
Общие направления конверсии
- Геометрия В целом сохраняется в формате пара, с одним важным исключением: при экспорте на STL мечеты должны состоять из трехсторонних ликов. бинарный STD тихо трясает квадратные и н-гонные лица к первым 3 вертикам; ASCII STR производит деформированный выход для нетриъгловных листов.
- Материалы Лучше всего выжить между ввозимыми сценями GLTF и FBX, которые включают материалы. Конвертирование на STL всегда падает материал. конвертация на OBJ упрощает материалы к базовому модели MTL.
- Иерархия сценария Сохраняется между файлами формата GSTF. OBJ и STL производят плоские структуры. Иерархия FBX и материалная экстракция не полностью проверены в этой версии.
Положите все вместе
Вот полный пример, который загружает файл OBJ, проверяет его узлы и экспортирует как в GLTF, так и в ГЛБ:
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-печатных трубопроводов.
- ГЛТФ / GLB - современный формат, доступный для веб- и реального времени.
GltfSaveOptionsСsetContentType(FileContentType.BINARY)В производстве ГБ. - FBX — только импорт; богатый формат для зарядки активов из игровых двигателей и инструментов DCC.
Используйте формат-специфический нагрузку и сберечь опционы класса (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptionsкогда вам нужен фино-граненный контроль над импортным или экспортным процессом.
Для получения дополнительных деталей посетите Аппоз.3D документация или пересекайте источник на GitHub.