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-горе към Z-горе или обратно.
setPrettyPrint(boolean)Форматирайте изходния JSON с отстъп за по‑четимост. Задайте на false за по‑малък размер на файла в продукция.

Примери за употреба на glTF

  • Уеб-базирани 3D прегледачи (three.js, Babylon.js).
  • Приложения в реално време и игрови енджини.
  • Запазване на PBR дефинициите на материалите между различни инструменти.

FBX: Filmbox (само импорт)

FBX е собственически формат на Autodesk, който се използва широко в гейм разработката и създаването на цифрово съдържание. Той поддържа богати йерархии на сцената, материали и анимации. Aspose.3D FOSS за Java поддържа FBX за import only – export to FBX is not available.

Зареждане на 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");
        }
    }
}

This loads every .obj file in a directory, converts each to glTF with pretty-printed output, and saves the results. You can adapt this pattern for any source and target format combination.

Референтен материал за конвертиране между формати

Следната таблица показва какво да очаквате при конвертиране между формати.

FromToGeometryMaterialsЙерархияБележки
OBJSTLЗапазеноЗагубеноN/ASTL няма поддръжка на материали
OBJglTF/GLBЗапазеноКонвертирано в PBRПлосъкMTL материали, съпоставени, където е възможно
STLOBJЗапазеноНямаN/AНяма материали в източника
STLglTF/GLBЗапазеноПо подразбиранеПлосъкПриложен е материал по подразбиране
glTFOBJЗапазеноОпростеноИзплосканоPBR към базов материал
glTFSTLЗапазеноЗагубеноИзравненоСамо геометрия
FBXOBJЗапазеноОпростеноИзравненоОпростяване на материал
FBXSTLЗапазеноЗагубеноИзплющеноСамо геометрия
FBXglTF/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.