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

Всички примери използват com.aspose.threed.* Пакетът е:

import com.aspose.threed.*;

Зависимост от мавзолето:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

Формат на пейзажа

Преди да се потопите, тук е бърз преглед на четирите поддържани формати и техните типични случаи на употреба.

ФорматътРазширяванеВносътИзносътМатериална подкрепаИерархия на сцената
OBJ.objДаДаОсновни файлове (MTL файли)Платък
STL.stlДаДаНикойПлатък
ГЛТФ 2.0.gltfДаДаPBRпълно
GLB.glbДаДаPBRпълно
FBX.fbxДаНебогатипълно

OBJ, STL, glTF и GLB поддържат както внос, така и износ. FBX се подпомага за Само вносът.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 файл (преди A mtllib Директива), библиотеката ще се опита да изтегли дефинициите на материали от нея автоматично. файлът MTL трябва да бъде в същия каталог като файла OBJ или по пътя, посочен в директата.

За да спестите като 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 вертикали на всяко лице полигон; квадрат и n-гони лица са тихо зачервени. ASCII STl пише всички вертични индекси по лицето, произвежда деформация на изхода за нетриъгълните лица. Винаги използвайте предварително триъглени меси (всички триунджи лица) при експортиране към ST L.
  • Бинарният STL е значително по-малък от ASCII STl за големи модели.
  • STL е форматът на избор, когато целта е 3D принтер или софтуер за слайдър.

GLTF: Формат за пренос на GL

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);

GSTFG подробности за опциите

МетодътЦелта
setFlipCoordinateSystem(boolean)Използва се при конвертиране от Y-up на Z-Up или обратното.
setPrettyPrint(boolean)Форматиране на JSON с индексация за четене. false За по-малък размер на файла в производството.

ГЛТФ използва случаи

  • 3D гледатели на уеб (three.js, Babylon.js).
  • Реално време и игрални устройства.
  • Съхраняване на материалите PBR определенията в инструментите.

FBX: Филм кутия (само внос)

FBX е формат, който се използва широко в разработването на игри и създаването за цифрово съдържание. Aspose.3D FOSS for 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 не се поддържа, конвертирайте вносни сцени на ФБК към 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/AСМ няма материална подкрепа
OBJГЛТФ / GLBзапазенаПреобразуване в PBRПлатъкМТЛ материали, картографирани където е възможно
STLOBJзапазенаНикойN/AНяма материали в източника
STLГЛТФ / GLBзапазенадефектПлатъкИзползвани дефектни материали
ГЛТФOBJзапазенаопростениПлътноПБР към основен материал
ГЛТФSTLзапазенаизгубенаПлътноСамо геометрията
FBXOBJзапазенаопростениПлътноМатериална опростяване
FBXSTLзапазенаизгубенаПлътноСамо геометрията
FBXГЛТФ / GLBзапазенаПреобразуване в PBRзапазенаДобър лоялност

Общи насоки за конверсия

  • Геометрия обикновено се съхранява в рамките на формат двойки, с едно важно изключение: при износ към STL, масите трябва да са напълно от триъгълни лица. бинарна ST L тихо трънка квадрат и n-гон лица до първите 3 върти; ASCII STl произвежда деформация на изхода за нетриъгални лица .
  • Материалите Превръщането към STL винаги пада на материали. Конвертирането към OBJ опростява материалите до основния модел MTL.
  • Иерархията на сцената Съхранява се между файлове в формат glTF. 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.