Aspose.3D FOSS для Java поддерживает пять 3D-форматов файлов: OBJ, STL, ГЛТФ, GLBFBX Этот пост является практичным, формат-по-формату руководством, показывающим, как загружать и сэкономить каждый из них, какие варианты доступны и как конвертировать между ними.

Все примеры используют 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 с красивым отпечатанным выходом и сохраняя результаты. Вы можете адаптировать этот шаблон для любого сочетания источника и целевого формата.

Крос-формат конверсии

Следующая таблица показывает, что ожидать при конверте между форматами.

ОтДляГеометрияМатериалыИерархииПримечания
OBJSTLсохранилисьпотерянныйN/ASTL не имеет материальной поддержки
OBJГЛТФ / ГБВсохранилисьПереведен в PBRПлатМТЛ-материалы, картографируемые где это возможно
STLOBJсохранилисьНикакогоN/AНет материалов в источнике
STLГЛТФ / ГБВсохранилисьдефолтПлатПрименение дефолта материала
ГЛТФOBJсохранилисьУпрощенныйПлюснаяПБР к базовому материалу
ГЛТФSTLсохранилисьпотерянныйПлюснаяГеометрия только
FBXOBJсохранилисьУпрощенныйПлюснаяМатериальное упрощение
FBXSTLсохранилисьпотерянныйПлюснаяГеометрия только
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.