Aspose.3D FOSS for Java tukee viittä 3D-tiedostomuotoa: OBJ, STL, glTF, GLB, ja FBX (vain tuonti).

Kaikki esimerkit käyttävät com.aspose.threed.* pakettia:

import com.aspose.threed.*;

Maven‑riippuvuus:

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

Formaattien maisema

Ennen kuin sukellamme asiaan, tässä on nopea yleiskatsaus neljään tuettuun formaattiin ja niiden tyypillisiin käyttötapauksiin.

MuotoTiedostopääteTuontiVientiMateriaalitukiKohtauksen hierarkia
OBJ.objKylläKylläPerus (MTL-tiedostot)Tasainen
STL.stlKylläKylläEiTasainen
glTF 2.0.gltfKylläKylläPBRTäysi
GLB.glbKylläKylläPBRTäysi
FBX.fbxKylläEiRikasTäysi

OBJ, STL, glTF ja GLB tukevat sekä tuontia että vientiä. FBX on tuettu vain tuonti. GLB (binääri glTF) tuotetaan via GltfSaveOptions avulla setContentType(FileContentType.BINARY).

OBJ: Wavefront-objekti

OBJ on yksi laajimmin tuetuista 3D-verkkomuodoista. Se tallentaa geometrian tavallisena tekstinä, valinnaisena .mtl lisätiedosto materiaaleille.

OBJ‑tiedostojen lataaminen

Yksinkertaisin tapa on antaa tiedostopolku suoraan:

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

Lisää hallintaa varten käytä ObjLoadOptions:

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

Kun OBJ-tiedosto viittaa MTL-tiedostoon (kautta mtllib direktiivin), kirjasto yrittää ladata materiaalimäärittelyt siitä automaattisesti. MTL-tiedoston tulisi olla samassa hakemistossa OBJ-tiedoston kanssa tai polussa, joka on määritelty direktiivissä.

Tallennus OBJ-muodossa

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

OBJ:n käyttötapaukset

  • Mesh-datan vaihtaminen eri 3D-työkalujen välillä.
  • Mallien tuominen omaisuuskirjastoista, jotka jakavat OBJ-muodossa.
  • Nopea geometrian tarkastelu ilman monimutkaisia kohtaushierarkioita.

STL: Stereolitografia

STL on 3D-tulostuksen vakiomuoto. Se esittää raakaa kolmioituja geometriaa ilman materiaaleja, värejä tai kohtaushierarkiaa. STL-tiedostot ovat kahdessa variantissa: ASCII (luettavissa ihmiselle) ja binaari (tiivis).

STL-tiedostojen lataaminen

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

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

Tallennus STL-muodossa

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

Ohjaamaan tulostusta, käytä StlSaveOptions:

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

STL-asiat

  • STL-tiedostot sisältävät vain kolmioidun geometrian. Materiaalit, tekstuurit ja kohtauksen hierarkia menetetään viennin aikana.
  • Binäärinen STL on merkittävästi pienempi kuin ASCII STL suurille malleille.
  • STL on suositeltu formaatti, kun kohteena on 3D-tulostin tai viipalointiohjelmisto.

glTF: GL Transmission Format

glTF on moderni formaatti, joka on suunniteltu tehokkaaseen 3D-sisällön siirtoon ja lataamiseen, erityisesti verkossa ja reaaliaikaisissa sovelluksissa. Se tukee PBR-materiaaleja, kohtauksen hierarkioita ja animaatioita.

Ladataan glTF-tiedostoja

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

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

Tallennetaan glTF-muodossa

Perustallennus käyttää tiedostopäätettä määrittääkseen formaatin:

scene.save("output.gltf");

Tarkempaan hallintaan, käytä GltfSaveOptions:

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

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

GltfSaveOptions‑tiedot

MenetelmäTarkoitus
setFlipCoordinateSystem(boolean)Käännä koordinaatistojärjestelmän akseli viennin aikana. Hyödyllinen, kun muunnetaan Y-ylöspäin Z-ylöspäin tai päinvastoin.
setPrettyPrint(boolean)Muotoile tulosteen JSON sisennyksellä luettavuuden parantamiseksi. Aseta arvoon false pienemmän tiedostokoon saavuttamiseksi tuotannossa.

glTF:n käyttötapaukset

  • Verkossa toimivat 3D‑katseluohjelmat (three.js, Babylon.js).
  • Reaaliaikaiset sovellukset ja pelimoottorit.
  • PBR‑materiaalimääritelmien säilyttäminen eri työkalujen välillä.

FBX: Filmbox (vain tuonti)

FBX on Autodeskin omistama formaatti, jota käytetään laajasti pelikehityksessä ja digitaalisen sisällön luomisessa. Se tukee rikkaiden kohtaushierarkioiden, materiaalien ja animaatioiden käsittelyä. Aspose.3D FOSS for Java tukee FBX:ää vain tuonti – FBX-vienti ei ole saatavilla.

FBX-tiedostojen lataaminen

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

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

FBX:n muuntaminen muihin formaatteihin

Koska FBX-vientiä ei tueta, muunna tuodut FBX-kohtaukset glTF-, GLB-, OBJ- tai STL-muotoon:

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

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

FBX:n käyttötapaukset

  • Assettien tuonti Autodesk-työkaluista (Maya, 3ds Max) ja niiden muuntaminen muihin formaatteihin.
  • Ladataan rigattuja hahmoja ja animoituja kohtauksia uudelleenvientiin glTF/GLB-muotoon.

Erämuunnos

Yleinen työnkulku on muuntaa koko hakemiston tiedostot yhdestä formaatista toiseen. Tässä on malli erämuunnokselle:

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

Tämä lataa jokaisen .obj tiedoston hakemistossa, muuntaa jokaisen glTF-muotoon kauniisti muotoillulla tulosteella, ja tallentaa tulokset. Voit mukauttaa tätä mallia mille tahansa lähde- ja kohdeformaattiyhdistelmälle.

Ristiformaattimuunnoksen viite

Seuraava taulukko näyttää, mitä odottaa muunnostaessa formaattien välillä.

LähdeKohdeGeometriaMateriaalitHierarkiaMuistiinpanot
OBJSTLSäilytettyKadonnutN/ASTL:ssä ei ole materiaalitukea
OBJglTF/GLBSäilytettyMuunnettu PBR:ksiLitteäMTL-materiaalit kartoitettiin mahdollisuuksien mukaan
STLOBJSäilytettyEiN/ALähteessä ei materiaaleja
STLglTF/GLBSäilytettyOletusTasainenOletusmateriaali sovellettu
glTFOBJSäilytettyYksinkertaistettuLitistettyPBR perusmateriaaliin
glTFSTLSäilytettyKadonnutLitistettyVain geometria
FBXOBJSäilytettyYksinkertaistettuLitistettyMateriaalin yksinkertaistaminen
FBXSTLSäilytettyKadonnutLitistettyVain geometria
FBXglTF/GLBSäilytettyMuunnettu PBR:ksiSäilytettyHyvä tarkkuus

Yleiset muunnosohjeet

  • Geometria säilyy aina kaikissa formaattipareissa.
  • Materiaalit selviytyvät parhaiten glTF:n ja FBX:n välillä, jotka molemmat tukevat rikkaita materiaalimalleja. STL:ksi muuntaminen poistaa aina materiaalit. OBJ:ksi muuntaminen yksinkertaistaa materiaalit perus MTL-malliin.
  • Kohtauksen hierarkia säilyy glTF:n ja FBX:n välillä. OBJ ja STL tuottavat litteitä rakenteita.

Kokoamalla kaikki yhteen

Tässä on täydellinen esimerkki, joka lataa OBJ-tiedoston, tarkastelee sen solmuja ja vie sen sekä glTF- että GLB-muotoihin:

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

Yhteenveto

Aspose.3D FOSS for Java antaa sinulle yhdenmukaisen API:n useiden formaattien välillä. Keskeiset kohdat:

  • OBJ – yksinkertainen verkkojen vaihtomuoto perusmateriaaleilla.
  • STL – pelkästään geometriaan perustuva formaatti 3D-tulostusputkille.
  • glTF / GLB – moderni PBR-yhteensopiva formaatti verkkoon ja reaaliaikaiseen käyttöön. Käytä GltfSaveOptions kanssa setContentType(FileContentType.BINARY) GLB-ulostulolle.
  • FBX – vain tuonti; rikas formaatti resurssien lataamiseen pelimoottoreista ja DCC-työkaluista.

Käytä formaattiin perustuvia lataus- ja tallennusvaihtoehtoluokkia (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) kun tarvitset tarkkaa hallintaa tuonti- tai vientiprosessiin.

Lisätietoja, käy Aspose.3D-dokumentaatio tai selaa lähdekoodia. GitHub.