Aspose.3D FOSS priekš Java atbalsta piecus 3D failu formātus: OBJ, STL, glTF, GLB, un FBX (tikai importēšanai).

Visi piemēri izmanto com.aspose.threed.* pakotni:

import com.aspose.threed.*;

Maven atkarība:

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

Formāta pārskats

Pirms iedziļināšanās, šeit ir īss pārskats par četriem atbalstītajiem formātiem un to tipiskajām lietošanas situācijām.

FormātsPaplašinājumsImportētEksportētMateriālu atbalstsAinas hierarhija
OBJ.objPamata (MTL faili)Plakans
STL.stlNavPlakans
glTF 2.0.gltfPBRPilns
GLB.glbPBRPilns
FBX.fbxBagātsPilns

OBJ, STL, glTF, un GLB atbalsta gan importu, gan eksportu. FBX tiek atbalstīts tikai importam. GLB (binary glTF) tiek radīts, izmantojot GltfSaveOptions ar setContentType(FileContentType.BINARY).

OBJ: Wavefront objekts

OBJ ir viens no visplašāk atbalstītajiem 3D režģa formātiem. Tas saglabā ģeometriju kā vienkāršu tekstu, ar izvēles .mtl piederošu failu materiāliem.

OBJ failu ielāde

Visvienkāršākais veids ir nodot faila ceļu tieši:

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

Lai iegūtu lielāku kontroli, izmantojiet ObjLoadOptions:

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

Kad OBJ fails atsaucas uz MTL failu (caur mtllib norādījumu), bibliotēka automātiski mēģinās ielādēt materiālu definīcijas no tā. MTL failam jābūt tajā pašā direktorijā kā OBJ failam vai ceļā, kas norādīts norādījumā.

Saglabāšana kā OBJ

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

OBJ lietošanas gadījumi

  • Tīklu datu apmaiņa starp dažādiem 3D rīkiem.
  • Modeļu importēšana no aktīvu bibliotēkām, kas izplata OBJ formātā.
  • Ātra ģeometrijas pārbaude bez sarežģītām ainas hierarhijām.

STL: Stereolitogrāfija

STL ir standarta formāts 3D drukāšanai. Tas attēlo neapstrādātu trīsstūra ģeometriju bez materiāliem, krāsām vai skatuves hierarhijas. STL faili ir pieejami divās versijās: ASCII (cilvēkam lasāma) un binārā (kompakta).

STL failu ielāde

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

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

Saglabāšana kā STL

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

Lai kontrolētu izvadi, izmantojiet StlSaveOptions:

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

STL apsvērumi

  • STL saglabā tikai trīsstūra ģeometriju. Materiāli, tekstūras un skatuves hierarhija netiek atbalstīti un tiek izlaisti eksportējot.
  • STL eksports veic ne automātiski trīsstūru veidošana. Binārais STL ieraksta tikai pirmos 3 virsotnes katras daudzstūra sejas; kvadrātveida un n-gona sejas tiek klusi apgrieztas. ASCII STL ieraksta visus virsotņu indeksus katrai sejai, radot nepareizu izvadi ne-trīsstūru sejām. Vienmēr izmantojiet pre-triangulated meshes (all-triangle faces), eksportējot uz STL.
  • Binārais STL ir būtiski mazāks nekā ASCII STL lieliem modeļiem.
  • STL ir izvēlētā formāts, ja mērķis ir 3D printeris vai slicera programmatūra.

glTF: GL pārraides formāts

glTF ir mūsdienīgs formāts, kas izstrādāts, lai nodrošinātu efektīvu 3D satura pārraidi un ielādi, īpaši tīmeklī un reāllaika lietojumprogrammās. Tas atbalsta PBR materiālus, ainas hierarhijas un animācijas.

Ielādē glTF failus

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

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

Saglabā kā glTF

Pamatsaglabāšana izmanto faila paplašinājumu, lai noteiktu formātu:

scene.save("output.gltf");

Lai iegūtu detalizētu kontroli, izmantojiet GltfSaveOptions:

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

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

GltfSaveOptions detaļas

MetodeMērķis
setFlipCoordinateSystem(boolean)Apgriezt koordinātu sistēmas asi eksportēšanas laikā. Noderīgi, pārvēršot no Y‑augšas uz Z‑augšu vai otrādi.
setPrettyPrint(boolean)Formatēt izvadi JSON ar atkāpēm, lai uzlabotu lasāmību. Iestatiet uz false lai ražošanas vidē būtu mazāks faila izmērs.

glTF lietošanas gadījumi

  • Tīmekļa balstīti 3D skatītāji (three.js, Babylon.js).
  • Reāllaika lietojumprogrammas un spēļu dzinēji.
  • PBR materiālu definīciju saglabāšana starp rīkiem.

FBX: Filmbox (tikai importēšana)

FBX ir Autodesk īpašnieka formāts, kas plaši tiek izmantots spēļu izstrādē un digitālā satura veidošanā. Aspose.3D FOSS priekš Java atbalsta FBX priekš tikai importam — eksports uz FBX nav pieejams.

Tikai binārais FBX. FBX importētājs lasa tikai bināros FBX failus. ASCII FBX faila nodrošināšana izraisa ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Mezglu hierarhija un materiālu izguve no FBX nav pilnībā pārbaudīta; sarežģītas FBX ainas var netikt pilnībā ielādētas. Animācijas un rigging nav īstenoti.

FBX failu ielāde

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

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

FBX konvertēšana uz citām formātām

Tā kā FBX eksportēšana netiek atbalstīta, konvertējiet importētās FBX ainas uz glTF, GLB, OBJ vai STL:

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

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

FBX lietošanas gadījumi

  • Statisko režģa resursu importēšana no Autodesk rīkiem (Maya, 3ds Max) un to konvertēšana uz citām formātām.
  • Binārās FBX ģeometrijas ielāde un atkārtota eksportēšana uz glTF/GLB, OBJ vai STL.

Masveida konvertēšana

Bieži izmantots darba plūsmas veids ir visu direktorijas failu konvertēšana no viena formāta uz citu. Šeit ir paraugs grupas konvertēšanai:

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

Tas ielādē katru .obj failu direktorijā, pārvērš katru uz glTF ar skaisti formatētu izvadi, un saglabā rezultātus. Jūs varat pielāgot šo modeli jebkurai avota un mērķa formāta kombinācijai.

Starpformātu Konvertēšanas Atsauce

Šajā tabulā parādīts, ko sagaidīt, pārveidojot starp formātiem.

NoUzĢeometrijaMateriāliHierarhijaPiezīmes
OBJSTLSaglabātsZaudētsN/ASTL nav materiālu atbalsta
OBJglTF/GLBSaglabātsPārveidots uz PBRPlakansMTL materiāli kartēti, ja iespējams
STLOBJSaglabātsNavN/AAvotā nav materiālu
STLglTF/GLBSaglabātsNoklusējumsPlakansPielietots noklusējuma materiāls
glTFOBJSaglabātsVienkāršotsPlaknotsPBR uz pamata materiālu
glTFSTLSaglabātsZaudētsSaplatinātsTikai ģeometrija
FBXOBJSaglabātsVienkāršotsSaplatinātsMateriāla vienkāršošana
FBXSTLSaglabātsZaudētsPlaknotsTikai ģeometrija
FBXglTF/GLBSaglabātsPārveidots uz PBRSaglabātsLaba precizitāte

Vispārīgi pārveidošanas vadlīnijas

  • Ģeometrija Parasti tiek saglabāts starp formāta pāriem, ar vienu svarīgu izņēmumu: eksportējot uz STL, tīkliem jābūt pilnīgi no trīsstūra sejas sastāvīgiem. Binārais STL klusi apgriež kvadrātu un n‑daļas sejas līdz to pirmajiem 3 virsotnēm; ASCII STL rada deformētu izvadi ne‑trīsstūra sejām.
  • Materiāli vislabāk izdzīvo starp glTF un FBX importētajām ainas, kas ietver materiālu datus. Pārveidošana uz STL vienmēr izmet materiālus. Pārveidošana uz OBJ vienkāršo materiālus uz pamata MTL modeli.
  • Ainas hierarhija ir saglabāta starp glTF-format failiem. OBJ un STL izveido plakanu struktūru. FBX hierarhija un materiālu izguve nav pilnībā pārbaudīta šajā versijā.

Visu kopā

Šeit ir pilns piemērs, kas ielādē OBJ failu, pārbauda tā mezglus un eksportē gan uz glTF, gan 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.");
    }
}

Kopsavilkums

Aspose.3D FOSS priekš Java nodrošina konsekventu API vairākos formātos. Galvenie punkti:

  • OBJ – vienkārša mesh apmaiņa ar pamata materiāliem.
  • STL – tikai ģeometrijas formāts 3D drukāšanas cauruļvadiem.
  • glTF / GLB – moderns PBR-spējīgs formāts tīmekļa un reāllaika lietošanai. Izmantojiet GltfSaveOptions ar setContentType(FileContentType.BINARY) GLB izvadei.
  • FBX – tikai importēšanai; bagāts formāts līdzekļu ielādēšanai no spēļu dzinējiem un DCC rīkiem.

Izmantojiet formātam specifiskās ielādes un saglabāšanas opciju klases (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) kad jums ir nepieciešama smalkāka kontrole pār importēšanas vai eksportēšanas procesu.

Lai iegūtu vairāk informācijas, apmeklējiet Aspose.3D dokumentācija vai pārlūkojiet avotu uz GitHub.