Aspose.3D FOSS pentru Java susține cinci formate de fișier 3D: OBJ, STL, Glată, GLB, şi FBX Acest post este un ghid practic, format-pe-format care arată cum să încărcați și să salvați fiecare dintre ele, ce opțiuni sunt disponibile și cum de a converti între ele.

Toate exemplele folosesc com.aspose.threed.* pachetă :

import com.aspose.threed.*;

Dependența de Maven:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

Formatul peisajului

Înainte de a se scufunda, aici este o imagine rapidă a celor patru formate susținute și cazurile lor tipice de utilizare.

FormatulextindereImportulExportulSuport materialIerarhia scenelor
OBJ.objDaDaDate de bază (file MTL)Flată
STL.stlDaDaNiciunFlată
GST 2.0.gltfDaDaPBRcompletă
GLB.glbDaDaPBRcompletă
FBX.fbxDaNubogatecompletă

OBJ, STL, glTF și GLB susțin atât importurile cât și exporturile. FBX este susținut pentru Importul numai.GLB (GlTF binar) este produs prin intermediul GltfSaveOptions Cu setContentType(FileContentType.BINARY).

Obiectul Wavefront

OBJ este unul dintre cele mai susținute formate 3D de mesh. stocă geometria ca text pla, cu un format opțional .mtl Fișierul de companie pentru materiale.

Încărcare OBJ fișiere

Cea mai simplă abordare este să treci direct prin ruta de fișier:

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

Pentru mai multă control, utilizarea ObjLoadOptions:

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

Când fișierul OBJ se referă la un fișiere MTL (prin intermediul unui mtllib Directiva), biblioteca va încerca să încărcească definițiile de material din ea automat. fișierul MTL ar trebui să fie în același directorat ca și fișa OBJ sau pe calea specificată în directivă.

Scăderea ca OBJ

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

OBJ utilizează cazuri

  • Schimbarea datelor mesh între diferite instrumente 3D.
  • Importarea de modele din bibliotecile de active care distribuie în format OBJ.
  • Inspecția rapidă a geometriei fără ierarhie complexă.

Etichetă: stereolitografie

STL este formatul standard pentru imprimarea 3D. reprezintă geometria triangulară brută fără materiale, culori sau ierarhie scenă. fișierele STl vin în două variante: ASCII (numeroasă) și binare (compact).

Încărcare de fișiere STL

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

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

Scăderea ca STL

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

Pentru a controla productia, utilizati StlSaveOptions:

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

Considerații STL

  • STL stocă numai geometria triunghiului. materialele, texturile și ierarhia scenelor nu sunt susținute și se pun pe export.
  • Exportul de la STL Nu STL binar scrie doar primele 3 verticale ale fiecărui poligon; fețele quad și n-gon sunt tăcut truncate. ASCII STl scrie toate indicele de vertice pe față, producând o ieșire malformată pentru fețe non-triangle. Folosiți întotdeauna mesele pre-trangulate (fete triangles) atunci când se exportă la ST L.
  • STL binar este semnificativ mai mic decât ASCII STl pentru modele mari.
  • STL este formatul de alegere atunci când ținta este un imprimant 3D sau software-ul slicer.

GLTF: Formatul de transmisie GL

GlTF este un format modern conceput pentru transmiterea și încărcarea eficientă a conținutului 3D, în special pe web și în aplicații în timp real. susține materiale PBR, ierarhie scenă și animații.

Încărcarea fișierelor glTF

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

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

Scăderea ca gltf

Salvați de bază utilizează extinderea fișierului pentru a determina formatul:

scene.save("output.gltf");

Pentru control detaliat, utilizarea GltfSaveOptions:

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

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

GltfSaveOptions Detalii

MetodaScopul
setFlipCoordinateSystem(boolean)Flip axul sistemului de coordonare în timpul exportului. Util atunci când se convertează din Y-up la Z-Up sau invers.
setPrettyPrint(boolean)Formatează ieșirea JSON cu indentație pentru citabilitate. false pentru dimensiunea mai mică a fișierului în producție.

GST utilizează cazuri

  • Vizualizări 3D pe web (three.js, Babylon.js).
  • Aplicații în timp real și motoare de joc.
  • Conservarea definițiilor de material PBR pe instrumente.

FBX: Filmbox (Să importăm doar)

FBX este un format proprietar de Autodesk care este utilizat pe scară largă în dezvoltarea jocurilor și crearea conținutului digital. Aspose.3D FOSS pentru Java susține FBx pentru Importul numai Exportul la FBX nu este disponibil.

Binare FBX numai. Importiorul FBX citește numai fișierele binare FB X. A trezit un fișiere ASCII FBx aruncă ImportException("ASCII FBX format not yet supported - only binary FBX is supported").Ierarhia nodurilor și extracția materialelor din FBX nu sunt complet verificate; scenele complexe de FB X nu pot fi încărcate complet.

Încărcare FBX fișiere

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

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

Conversia FBX în alte formate

Deoarece exportul FBX nu este susținut, convertirea scenelor importate de FB X la glTF, GLB, OBJ sau STL:

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

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

FBX utilizează cazuri

  • Importarea activelor statice de mesh din instrumentele Autodesk (Maya, 3ds Max) și conversia în alte formate.
  • Încărcarea geometriei binare FBX și re-exportarea la glTF/GLB, OBJ sau STL.

Conversie batch

Un flux de lucru comun este convertirea unui directorie întreagă a fișierelor dintr-un format în altul.Aici este un model pentru conversia batch:

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

Aceasta încărcă fiecare .obj fișier într-un director, convertează fiecare la glTF cu o ieșire bine imprimată și salvează rezultatele. puteți adapta acest model pentru orice combinație de formate sursa și țintă.

Conversie de referință cross-format

Tabela de mai jos arată ce să aștepți atunci când convertiți între formate.

dinpentruGeometrieMaterialeIerarhieNotă
OBJSTLpăstratepierdereaN/ASTL nu are niciun suport material
OBJGNL / GLBpăstrateConvertită în PBRFlatăMaterialele MTL sunt hărțuite ori de câte ori este posibil
STLOBJpăstrateNiciunN/ANu există materiale în sursă
STLGNL / GLBpăstrateDefiniţieFlatăMaterialul deficitar aplicat
GlatăOBJpăstratesimplificateFlatăPBR la materialul de bază
GlatăSTLpăstratepierdereaFlatăGeometria numai
FBXOBJpăstratesimplificateFlatăsimplificarea materialelor
FBXSTLpăstratepierdereaFlatăGeometria numai
FBXGNL / GLBpăstrateConvertită în PBRpăstrateFidelitate bună

Ghidul general de conversie

  • Geometrie este în general păstrată pe parcursul cuplurilor de format, cu o excepție importantă: atunci când se exportă la STL, mesele trebuie să constată integral din fețe triunghiale. binare ST L liniștit truncate quad și n-gon fețele la primele 3 verticale; ASCII STl produce rezultatul malformat pentru feței non-triunghile.
  • Materiale supraviețuiesc cel mai bine dintre glTF și fbx-importate scene care includ date materiale. conversia la STL întotdeauna scade materialele. convertirea la OBJ simplifică materialul în modelul MTL de bază.
  • Ierarhia scenelor este păstrată între fișierele de format glTF. OBJ și STL produc structuri plat. ierarhia FBX și extracția materialului nu sunt complet verificate în această versiune.

Pune-l cu toții împreună

Iată un exemplu complet care încărcă un fișier OBJ, inspectează nodurile sale și exportă atât la glTF cât și la 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.");
    }
}

Rezumatul

Aspose.3D FOSS pentru Java vă oferă o API constantă în mai multe formate.:

  • OBJ - schimb de mesh simplu cu materialele de bază.

  • STL - format geometric numai pentru tuburile de imprimare 3D.

  • GNL / GLB - format PBR-capabil pentru utilizarea web și în timp real. GltfSaveOptions Cu setContentType(FileContentType.BINARY) pentru producţia GLB.

  • FBX - numai import; format bogat pentru încărcarea activelor din motoarele de joc și instrumentele DCC.

  • utilizarea unui format specific de încărcare și a unei clase de opțiuni (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptionsatunci când aveți nevoie de un control fin-gran asupra procesului de import sau export.

Pentru mai multe detalii, vizitaţi Aspose.3D documentare sau să se descurce sursa de GitHub.