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 (бінарний glTF) виробляється за допомогою GltfSaveOptions з setContentType(FileContentType.BINARY).
Об’єкт 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-принту. він представляє сурову трикутну геометрію без матеріалів, кольорів або іерархії сцен. файли ST L походять в двох варіантах: 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 пише тільки перші 3 вертикали кожної полігони; квадратні і н-гонні обличчя тихо закручуються. ASCII ST L записує всі вертексні показники на обличчі, виробляючи зловмисний вихід для нетриангних обличччя. завжди використовуйте передтроульовані меші (всі трикутники) при експорті до STl.
- Бінарний STL значно менший, ніж ASCII STl для великих моделей.
- STL - це формат вибору, коли ціль 3D-принтер або програмне забезпечення для слайзера.
GLTF: формат передачі
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 Маленький розмір файлу в виробництві. |
ГЛТФ використовує випадки
- 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 не підтримується, конвертуйте імпортні сцені FB X на 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 | У НБУ немає матеріальної підтримки |
| OBJ | ГЛТФ / ГРБ | збережено | Перетворення в PBR | Платний | МТЛ-матеріали, маперовані там, де це можливо |
| STL | OBJ | збережено | Ніхто | N/A | Немає матеріалів в джерелі |
| STL | ГЛТФ / ГРБ | збережено | дефолт | Платний | Використання дефектних матеріалів |
| ГЛТФ | OBJ | збережено | спрощене | Флатент | ПБР до базового матеріалу |
| ГЛТФ | STL | збережено | втрачений | Флатент | Геометрія тільки |
| FBX | OBJ | збережено | спрощене | Флатент | матеріальна спрощення |
| FBX | STL | збережено | втрачений | Флатент | Геометрія тільки |
| FBX | ГЛТФ / ГРБ | збережено | Перетворення в PBR | збережено | Добро вірність |
Загальні напрямки конверсії
- Геометрія Зазвичай зберігається між форматними парами, з одним важливим винятком: при експорті до STL меші повинні складатися повністю з тріумфальних обличчя. бінарний ST L тихо тримає квадратні і н-гони обличчя до перших 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-принтерних трубопроводів.
- ГЛТФ / GLB - сучасний формат, доступний для веб- і реального часу.
GltfSaveOptionsзsetContentType(FileContentType.BINARY)Продукція GLB. - FBX - імпорт тільки; багатий формат для завантаження активів з ігрових двигунів та інструментів DCC.
Використовуйте формат-специфічне завантаження і зберегти класи варіантів (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) коли потрібен тонкий контроль над імпорту або експорту.
Для отримання додаткових деталей, відвідайте 3D документація або перейдіть до джерела GitHub.