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 yleiskuva

Ennen kuin sukellamme syvemmälle, 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 GltfSaveOptions kanssa setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

OBJ on yksi laajimmin tuetuista 3D‑verkkomuodoista. Se tallentaa geometrian tavallisena tekstinä, valinnaisen .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ä.

Tallentaminen OBJ‑muotoon

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

OBJ:n käyttötapaukset

  • Verkkoaineiston vaihtaminen eri 3D‑työkalujen välillä.
  • Mallien tuonti 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-tiedostoja on kahta varianttia: 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);

Tallentaminen STL-muodossa

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

Ohjaamaan tulostetta, käytä StlSaveOptions:

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

STL-harkinnat

  • STL tallentaa vain kolmio-geometrian. Materiaalit, tekstuurit ja kohtaushierarkia eivät ole tuettuja ja ne poistetaan viennissä.
  • STL-vienti tekee ei trianguloida automaattisesti. Binäärinen STL kirjoittaa vain kunkin polygonin ensimmäiset 3 kärkeä; nelikulmaiset ja n-gon‑kasvot katkaistaan hiljaisesti. ASCII STL kirjoittaa kaikki kärkipisteindeksit per kasvot, mikä tuottaa virheellistä tulostetta ei‑kolmiokasvoille. Käytä aina esitäsmätrianguloituja verkkoja (kaikki kolmiokasvot) kun viet STL-muotoon.
  • Binaari-STL on merkittävästi pienempi kuin ASCII-STL suurille malleille.
  • STL on ensisijainen 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, kohtaushierarkioita ja animaatioita.

glTF-tiedostojen lataaminen

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

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

Tallentaminen glTF-muodossa

Perus tallennus käyttää tiedostopäätettä määrittääkseen formaatin:

scene.save("output.gltf");

Yksityiskohtaista hallintaa varten, käytä GltfSaveOptions:

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

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

GltfSaveOptions‑yksityiskohdat

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 tuotannossa pienemmän tiedostokoon saavuttamiseksi.

glTF‑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. Aspose.3D FOSS Java:lle tukee FBX:ää vain tuonti — vienti FBX:ään ei ole saatavilla.

Vain binäärinen FBX. FBX-tuonti lukee vain binäärisiä FBX-tiedostoja. ASCII FBX -tiedoston antaminen aiheuttaa ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Soluhierarkiaa ja materiaalin poimintaa FBX:stä ei ole täysin varmistettu; monimutkaiset FBX‑kohtaukset eivät välttämättä lataudu kokonaan. Animaatioita ja riggausta ei ole toteutettu.

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‑käyttötapaukset

  • Staattisten verkko‑omaisuuksien tuonti Autodesk‑työkaluista (Maya, 3ds Max) ja niiden muuntaminen muihin formaatteihin.
  • Binaarisen FBX‑geometrian lataaminen ja uudelleenvienti glTF/GLB‑, OBJ‑ tai STL‑muotoon.

Erämuunnos

Yleinen työnkulku on muuntaa koko hakemisto tiedostoja 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 mihin tahansa lähde- ja kohdeformaattiyhdistelmään.

Ristiformaattimuunnoksen viite

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

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

Yleiset muunnosohjeet

  • Geometria säilyy yleensä formaattiparien välillä, yksi tärkeä poikkeus: kun viedään STL-muotoon, verkkojen on koostuttava kokonaan kolmioista. Binary STL leikkaa hiljaisesti nelikulmio- ja n-gon-pinnat niiden ensimmäisiin kolmeen kärkeen; ASCII STL tuottaa virheellistä tulostetta ei‑kolmioisille pinnoille.
  • Materiaalit selviävät parhaiten glTF- ja FBX-tuoduissa kohtauksissa, jotka sisältävät materiaalitiedot. Muuntaminen STL-muotoon poistaa aina materiaalit. Muuntaminen OBJ-muotoon yksinkertaistaa materiaalit perus MTL-malliin.
  • Kohtauksen hierarkia säilyy glTF-muodon tiedostojen välillä. OBJ ja STL tuottavat tasaisia rakenteita. FBX-hierarkiaa ja materiaalien poimintaa ei ole täysin varmistettu tässä versiossa.

Kokonaisuuden kokoaminen

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

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 tarjoaa sinulle yhdenmukaisen API:n useiden formaattien välillä. Keskeiset kohdat:

  • OBJ – yksinkertainen verkkojen vaihtaminen 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-tulostukseen.
  • FBX – vain tuonti; rikas formaatti pelimoottoreista ja DCC-työkaluista ladattaville resursseille.

Käytä formaattiin spesifisiä 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.