Aspose.3D FOSS for Java palaiko penkis 3D failų formatus: OBJ, STL, Gltf, GLB,ir FBX Šis pranešimas yra praktinis, formatu-per-formatu vadovas, kuriame pateikiamas kaip įkrauti ir išsaugoti kiekvieną, kokias galimybes galima rasti ir kaip konvertuoti tarp jų.

Visi pavyzdžiai naudojami com.aspose.threed.* Pakuotės :

import com.aspose.threed.*;

Maven priklausomybės požymiai:

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

Pažintinė forma

Prieš įžengdami, čia pateikiamas greitas keturių palaikytų formatų ir jų tipinių naudojimo atvejų apžvalga.

FormatasIšplėstinėImportoEksportoMaterialinė paramaSceno hierarchijos
OBJ.objTaipTaipPagrindiniai (MTL failų)plokščių
STL.stlTaipTaipNė vienasplokščių
GTTF 2.0.gltfTaipTaipPBRVisiškas
GLB.glbTaipTaipPBRVisiškas
FBX.fbxTaipNeTurtingasVisiškas

OBJ, STL, glTF ir GLB palaiko tiek importą, tiek eksportą. FBX palaikoma Importuojamas tik.GLB (binary glTF) yra gaminamas per GltfSaveOptions su setContentType(FileContentType.BINARY).

OBJ: Vandenų frontas objektas

OBJ yra vienas iš plačiausiai remiamų 3D mesh formatus. ji saugoja geometriją kaip plokščia tekstą, su pasirinktu .mtl Kompanijos medžiagos.

Įkrovimas OBJ failus

Paprasčiausias būdas yra tiesiogiai perkelti failų maršrutą:

Scene scene = Scene.fromFile("model.obj");

Daugiau kontrolės, naudojimo ObjLoadOptions:

ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);

Kai OBJ failas nurodo MTL failą (per a mtllib direktyva), biblioteka stengsis automatiškai įkrauti medžiagos apibrėžimus iš jos. MTL failas turėtų būti toje pačioje adreso kaip OBJ failo arba keliu, nurodytą direktyvos.

Sutaupyti kaip OBJ

Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");

OBJ naudojasi atvejais

  • Keitimasis mesh duomenimis tarp skirtingų 3D įrankių.
  • Importuojamos modeliai iš turto bibliotekų, kuriose yra OBJ formatu.
  • Greitas geometrijos patikrinimas be sudėtingų scenos hierarchijų.

Žyma: stereolito

STL yra standartinis 3D spausdinimo formatas. tai reiškia žalią trianguliuotą geometriją be medžiagų, spalvų ar scenos hierarchijos. STl failai ateina į dvi variantas: ASCII (žmogaus skaityti) ir binarinius (kompaktiškas).

Įkrovimas STL failus

// Simple load
Scene scene = Scene.fromFile("part.stl");

// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);

Sutaupyti kaip STL

Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");

Norėdami kontroliuoti produkciją, naudokite StlSaveOptions:

StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);

STL apžvalgos

  • STL saugoma tik triukšmo geometrija. medžiagos, tekstūros ir scenos hierarchijos nėra palaikomos ir yra išleisti eksportui.
  • STL eksporto įmonei Ne Dvejetainis STL rašo tik pirmąsias 3 vertikalus kiekvieno poligonų veido; ketvirto ir n-gonų veidai tyliai išdžiūvę. ASCII ST L parašys visus verteklio rodiklius vienam veidui, sukuriant klaidingą išleidimą ne triangulių veidams. Visada naudokite pre-triangulinius matus (visos triunglių veidus) eksportuojant į STl.
  • Dvejetainis STL yra žymiai mažesnis nei ASCII STl dideliems modeliams.
  • STL yra pasirinkimo formatas, kai tikslas yra 3D spausdintuvas arba slicer programinė įranga.

GLTF: transliacijos formatas

glTF yra šiuolaikinis formatas, skirtas efektyviai perduoti ir įkrauti 3D turinį, ypač interneto ir realaus laiko programose.

Įkrovimas glTF failus

Scene scene = Scene.fromFile("scene.gltf");

// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);

Sutaupyti kaip glTF

Pagrindinis saugojimas naudoja failų išplėtimą, kad nustatytų formatą:

scene.save("output.gltf");

Išsamios kontrolės, naudojimo GltfSaveOptions:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

GltfSaveOptions Detalės

MetodaiTikslas
setFlipCoordinateSystem(boolean)Eksporto metu sklandžiai sujungti koordinato sistemos ašį. Naudinga konvertuojant iš Y-up į Z-Up arba atvirkščiai.
setPrettyPrint(boolean)Formatuoti JSON išleidimą su skaitymo indentacija. false Mažesnio dydžio failas gamyboje.

GTTF naudojimo atvejų

  • 3D žiūrovai (trys.js, Babylon.js).
  • Realaus laiko programos ir žaidimų varikliai.
  • PBR medžiagų apibrėžimų išsaugojimas per įrankius.

FBX: Filmbox (tik importo)

FBX yra Autodesk nuosavybės formatas, kuris plačiai naudojamas žaidimų kūrimo ir skaitmeninio turinio kūrimui. Aspose.3D FOSS for Java palaiko FBx už Importuojamas tik Eksporto į FBX nėra.

Binarinis FBX tik. FBX importuotojas skaito tik binarinius FBx failus. per ASCII FB X failą išmetamas ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Nodo hierarchijos ir medžiagos ekstrakcija iš FBX nėra visiškai patvirtinta; sudėtingos FB X scenos negali būti visiškai įkraunamos.

FBX failų įkrovimas

Scene scene = Scene.fromFile("character.fbx");

// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);

Konvertuoti FBX į kitus formatus

Kadangi FBX eksportuojamas ne palaikomas, importuotos FB X scenos konvertuoja į glTF, GLB, OBJ arba STL:

Scene scene = Scene.fromFile("character.fbx");

// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);

FBX naudojami atvejai

  • Importuoti statinius mėsos turtus iš Autodesk įrankių (Maya, 3ds Max) ir konvertuojant į kitus formatus.
  • Dvejetainis FBX geometrija ir reeksporto į glTF / GLB, OBJ arba STL.

Batch konvertavimas

Bendras darbo srautas yra viso failų katalogo konvertavimas iš vieno formato į kitą. čia pateikiamas batch konversijos modelis:

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

Tai apkrova kiekvieną .obj failą kataloge, konvertuoja kiekvieną į glTF su gerai spausdinta išleidimo ir taupo rezultatus. Jūs galite pritaikyti šį modelį bet šaltinio ir tikslinės formato derinys.

Cross-Format konvertavimo referencija

Toliau pateikta lentelė rodo, ko tikėtis konvertuojant tarp formatus.

ĮGeometrijosmedžiagosHierarchijosPastabos
OBJSTLišsaugotasPrarastasN/ASTL neturi jokios materialinės paramos
OBJGTTF / GLBišsaugotasKonvertuota į PBRplokščiųMTL medžiagos, kad būtų galima
STLOBJišsaugotasNė vienasN/AJokių medžiagų šaltinyje
STLGTTF / GLBišsaugotasĮvertinimasplokščiųĮdiegtos medžiagos
GltfOBJišsaugotasPaprastasplokščiųPBR į pagrindinę medžiagą
GltfSTLišsaugotasPrarastasplokščiųGeometrija tik
FBXOBJišsaugotasPaprastasplokščiųMaterialinė supaprastinimas
FBXSTLišsaugotasPrarastasplokščiųGeometrija tik
FBXGTTF / GLBišsaugotasKonvertuota į PBRišsaugotasGeras ištikimumas

Bendrosios konvertavimo gairės

  • Geometrijos paprastai išsaugota per formos poras, su vienu svarbiu išimtimi: eksportuojant į STL, žiedai turi būti visiškai sudarytos iš triukšmo veidų. binarus STT tyliai trunkuoja keturius ir n-gon veidus į pirmąsias 3 vertikalus; ASCII STS gamina sutrikdytas rezultatas ne triukų veidams.
  • medžiagos Geriausia išgyventi tarp glTF ir FBX importo scenos, kuriose yra medžiagų duomenų. Konvertavimas į STL visada nuleidžia medžiagas. konvertavimas į OBJ supaprastina medžiagos į pagrindinį MTL modelį.
  • Sceno hierarchijos išsaugota tarp glTF formatu failų. OBJ ir STL gamina plokščias struktūras. FBX hierarchijos ir medžiagos ekstrakcijos nėra visiškai patvirtintos šioje versijoje.

Įdėti viską kartu

Štai pilnas pavyzdys, kuris įkeliamas OBJ failas, patikrinamas jo mazgai ir eksportuojamas į tiek glTF, tiek 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.");
    }
}

Apibendrinimas

Aspose.3D FOSS for Java suteikia jums nuoseklią API per kelius formatus.:

  • OBJ - paprastas maišytuvas keičiamas su pagrindiniais medžiagomis.
  • STL - Geometrijos formatas tik 3D spausdinimo vamzdžiams.
  • GTTF / GLB - šiuolaikinis PBR-galimas formatas žiniatinklio ir realaus laiko naudojimui. GltfSaveOptions su setContentType(FileContentType.BINARY) GLB produkcijos.
  • FBX - importuoti tik; turtingas formatas lotiems turtui iš žaidimų variklių ir DCC įrankių.

Naudokite formatui skirtą įkrovimą ir išsaugoti pasirinkimo klases (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptionskai jums reikia grynai žalios kontrolės importo ar eksporto proceso.

Daugiau informacijos rasite čia: Aspose.3D dokumentacija arba iškeliame šaltinį į GitHub.