Aspose.3D FOSS για Java υποστηρίζει πέντε μορφές αρχείων 3D: OBJ, STL, glTF, GLB, και FBX (μόνο εισαγωγή).

Όλα τα παραδείγματα χρησιμοποιούν το com.aspose.threed.* πακέτο:

import com.aspose.threed.*;

Εξάρτηση Maven:

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

Τοπίο Μορφών

Πριν βυθιστούμε, εδώ είναι μια σύντομη επισκόπηση των τεσσάρων υποστηριζόμενων μορφών και των τυπικών περιπτώσεων χρήσης τους.

ΜορφήΕπέκτασηΕισαγωγήΕξαγωγήΥποστήριξη ΥλικούΙεραρχία Σκηνής
OBJ.objΝαιΝαιΒασική (αρχεία MTL)Επίπεδο
STL.stlΝαιΝαιΚανέναΕπίπεδο
glTF 2.0.gltfΝαιΝαιPBRΠλήρης
GLB.glbΝαιΝαιPBRΠλήρης
FBX.fbxΝαιΌχιΠλούσιοΠλήρης

Τα OBJ, STL, glTF και GLB υποστηρίζουν τόσο εισαγωγή όσο και εξαγωγή. Το FBX υποστηρίζεται για μόνο εισαγωγή. Το GLB (binary glTF) παράγεται μέσω GltfSaveOptions με setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

Το OBJ είναι μία από τις πιο ευρέως υποστηριζόμενες μορφές 3D πλέγματος. Αποθηκεύει τη γεωμετρία ως απλό κείμενο, με ένα προαιρετικό .mtl συνοδευτικό αρχείο για υλικά.

Φόρτωση αρχείων OBJ

Η πιο απλή προσέγγιση είναι να περάσετε τη διαδρομή του αρχείου απευθείας:

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

Για μεγαλύτερο έλεγχο, χρησιμοποιήστε ObjLoadOptions:

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

Όταν το αρχείο OBJ αναφέρει ένα αρχείο MTL (μέσω ενός mtllib οδηγία), η βιβλιοθήκη θα προσπαθήσει να φορτώσει αυτόματα τους ορισμούς υλικών από αυτό. Το αρχείο MTL πρέπει να βρίσκεται στον ίδιο φάκελο με το αρχείο OBJ ή στη διαδρομή που καθορίζεται στην οδηγία.

Αποθήκευση ως OBJ

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

Χρήσεις του OBJ

  • Ανταλλαγή δεδομένων πλέγματος μεταξύ διαφορετικών εργαλείων 3D.
  • Εισαγωγή μοντέλων από βιβλιοθήκες πόρων που διανέμουν σε μορφή OBJ.
  • Γρήγορη επιθεώρηση της γεωμετρίας χωρίς σύνθετες ιεραρχίες σκηνής.

STL: Στερεολιθογραφία

Το STL είναι η τυπική μορφή για 3D εκτύπωση. Αντιπροσωπεύει ακατέργαστη τριγωνοποιημένη γεωμετρία χωρίς υλικά, χρώματα ή ιεραρχία σκηνής. Τα αρχεία STL διατίθενται σε δύο παραλλαγές: ASCII (ανθρώπινα αναγνώσιμα) και binary (συμπαγή).

Φόρτωση αρχείων STL

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

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

Αποθήκευση ως STL

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

Για να ελέγξετε την έξοδο, χρησιμοποιήστε StlSaveOptions:

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

Παρατηρήσεις για το STL

  • Το STL αποθηκεύει μόνο τριγωνική γεωμετρία. Τα υλικά, οι υφές και η ιεραρχία σκηνής δεν υποστηρίζονται και αφαιρούνται κατά την εξαγωγή.
  • Η εξαγωγή STL κάνει δεν τριγωνοποιεί αυτόματα. Το δυαδικό STL γράφει μόνο τις πρώτες 3 κορυφές κάθε πολυγωνικής όψης· οι τετράγωνες και n‑γωνικές όψεις περικόπτονται σιωπηρά. Το ASCII STL γράφει όλους τους δείκτες κορυφών ανά όψη, παράγοντας κατεστραμμένη έξοδο για μη‑τριγωνικές όψεις. Πάντα χρησιμοποιείτε προ‑τριγωνοποιημένα πλέγματα (όλες οι όψεις τριγώνου) κατά την εξαγωγή σε STL.
  • Το binary STL είναι σημαντικά μικρότερο από το ASCII STL για μεγάλα μοντέλα.
  • Το STL είναι η προτιμώμενη μορφή όταν ο προορισμός είναι ένας 3D εκτυπωτής ή λογισμικό κοπής (slicer).

glTF: GL Transmission Format

Το glTF είναι μια σύγχρονη μορφή σχεδιασμένη για αποδοτική μετάδοση και φόρτωση 3D περιεχομένου, ιδιαίτερα στο web και σε εφαρμογές πραγματικού χρόνου. Υποστηρίζει υλικά PBR, ιεραρχίες σκηνής και κινούμενα σχέδια.

Φόρτωση αρχείων glTF

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

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

Αποθήκευση ως glTF

Η βασική αποθήκευση χρησιμοποιεί την επέκταση του αρχείου για να καθορίσει τη μορφή:

scene.save("output.gltf");

Για λεπτομερή έλεγχο, χρησιμοποιήστε GltfSaveOptions:

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

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

Λεπτομέρειες GltfSaveOptions

ΜέθοδοςΣκοπός
setFlipCoordinateSystem(boolean)Αναστρέψτε τον άξονα του συστήματος συντεταγμένων κατά την εξαγωγή. Χρήσιμο όταν μετατρέπετε από Y‑up σε Z‑up ή αντίστροφα.
setPrettyPrint(boolean)Μορφοποιήστε το JSON εξόδου με εσοχές για ευανάγνωστη παρουσίαση. Ορίστε σε false για μικρότερο μέγεθος αρχείου στην παραγωγή.

Περιστάσεις χρήσης glTF

  • Προβολείς 3D μέσω web (three.js, Babylon.js).
  • Εφαρμογές σε πραγματικό χρόνο και μηχανές παιχνιδιών.
  • Διατήρηση των ορισμών υλικών PBR μεταξύ εργαλείων.

FBX: Filmbox (Μόνο εισαγωγή)

Το FBX είναι ένα ιδιόκτητο φορμά από την Autodesk που χρησιμοποιείται ευρέως στην ανάπτυξη παιχνιδιών και τη δημιουργία ψηφιακού περιεχομένου. Aspose.3D FOSS για Java υποστηρίζει το FBX για μόνο εισαγωγή — η εξαγωγή σε FBX δεν είναι διαθέσιμη.

Μόνο δυαδικό FBX. Ο εισαγωγέας FBX διαβάζει μόνο δυαδικά αρχεία FBX. Η παροχή ενός ASCII αρχείου FBX προκαλεί ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Η ιεραρχία κόμβων και η εξαγωγή υλικών από το FBX δεν είναι πλήρως επαληθευμένες· σύνθετες σκηνές FBX ενδέχεται να μην φορτωθούν πλήρως. Οι κινήσεις και το rigging δεν έχουν υλοποιηθεί.

Φόρτωση αρχείων FBX

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

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

Μετατροπή FBX σε άλλες μορφές

Δεδομένου ότι η εξαγωγή FBX δεν υποστηρίζεται, μετατρέψτε τις εισαγόμενες σκηνές FBX σε glTF, GLB, OBJ ή STL:

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

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

Περιστάσεις χρήσης FBX

  • Εισαγωγή στατικών στοιχείων πλέγματος από εργαλεία Autodesk (Maya, 3ds Max) και μετατροπή σε άλλες μορφές.
  • Φόρτωση γεωμετρίας δυαδικού FBX και επανεξαγωγή σε glTF/GLB, OBJ ή STL.

Μαζική Μετατροπή

Μια κοινή ροή εργασίας είναι η μετατροπή ολόκληρου ενός καταλόγου αρχείων από μια μορφή σε άλλη. Ακολουθεί ένα πρότυπο για μαζική μετατροπή:

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

Αυτό φορτώνει κάθε .obj αρχείο σε έναν φάκελο, μετατρέπει το καθένα σε glTF με έξοδο ωραίας μορφοποίησης, και αποθηκεύει τα αποτελέσματα. Μπορείτε να προσαρμόσετε αυτό το μοτίβο για οποιονδήποτε συνδυασμό μορφής πηγής και προορισμού.

Αναφορά Δια-Μορφής Μετατροπής

Ο παρακάτω πίνακας δείχνει τι να περιμένετε κατά τη μετατροπή μεταξύ μορφών.

ΑπόΠροςΓεωμετρίαΥλικάΙεραρχίαΣημειώσεις
OBJSTLΔιατηρημένοΧαμένοN/AΤο STL δεν υποστηρίζει υλικά
OBJglTF/GLBΔιατηρημένοΜετατράπηκε σε PBRΕπίπεδοΥλικά MTL αντιστοιχίστηκαν όπου ήταν δυνατόν
STLOBJΔιατηρημένοΚανέναN/AΔεν υπάρχουν υλικά στην πηγή
STLglTF/GLBΔιατηρημένοΠροεπιλογήΕπίπεδοΠροεπιλεγμένο υλικό εφαρμόστηκε
glTFOBJΔιατηρημένοΑπλοποιημένοΙσοπεδωμένοPBR σε βασικό υλικό
glTFSTLΔιατηρημένοΧαμένοΙσοπεδωμένοΜόνο γεωμετρία
FBXOBJΔιατηρημένοΑπλοποιημένοΙσοπεδωμένοΑπλοποίηση υλικού
FBXSTLΔιατηρημένοΧαμένοΙσοπεδωμένοΜόνο γεωμετρία
FBXglTF/GLBΔιατηρημένοΜετατράπηκε σε PBRΔιατηρήθηκεΚαλή πιστότητα

Γενικές Οδηγίες Μετατροπής

  • Γεωμετρία Γενικά διατηρείται μεταξύ ζευγών μορφών, με μία σημαντική εξαίρεση: όταν εξάγεται σε STL, τα πλέγματα πρέπει να αποτελούνται εξ ολοκλήρου από τριγωνικές όψεις. Το Binary STL κόβει σιωπηρά τις τετράπλευρες και n‑γωνικές όψεις στα πρώτα 3 κορυφαία σημεία τους· το ASCII STL παράγει κατεστραμμένη έξοδο για μη τριγωνικές όψεις.
  • Υλικά διατηρούνται καλύτερα μεταξύ σκηνών που έχουν εισαχθεί από glTF και FBX και περιλαμβάνουν δεδομένα υλικών. Η μετατροπή σε STL αφαιρεί πάντα τα υλικά. Η μετατροπή σε OBJ απλοποιεί τα υλικά στο βασικό μοντέλο MTL.
  • Ιεραρχία σκηνής διατηρείται μεταξύ αρχείων μορφής glTF. Τα OBJ και STL παράγουν επίπεδες δομές. Η ιεραρχία FBX και η εξαγωγή υλικών δεν έχουν επαληθευτεί πλήρως σε αυτήν την έκδοση.

Συνδυάζοντας Όλα

Ακολουθεί ένα πλήρες παράδειγμα που φορτώνει ένα αρχείο OBJ, εξετάζει τους κόμβους του και εξάγει τόσο σε glTF όσο και σε 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.");
    }
}

Σύνοψη

Aspose.3D FOSS for Java σας παρέχει ένα συνεπές API σε πολλαπλές μορφές. Τα βασικά σημεία:

  • OBJ – απλή ανταλλαγή πλέγματος με βασικά υλικά.
  • STL – μορφή μόνο γεωμετρίας για αγωγούς εκτύπωσης 3D.
  • glTF / GLB – σύγχρονη μορφή με δυνατότητα PBR για χρήση στο web και σε πραγματικό χρόνο. Χρησιμοποιήστε GltfSaveOptions με setContentType(FileContentType.BINARY) για έξοδο GLB.
  • FBX – μόνο εισαγωγή· πλούσια μορφή για φόρτωση πόρων από μηχανές παιχνιδιών και εργαλεία DCC.

Χρησιμοποιήστε κλάσεις επιλογών φόρτωσης και αποθήκευσης ειδικές για μορφή (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) όταν χρειάζεστε λεπτομερή έλεγχο της διαδικασίας εισαγωγής ή εξαγωγής.

Για περισσότερες λεπτομέρειες, επισκεφθείτε το Aspose.3D τεκμηρίωση ή περιηγηθείτε στην πηγή στο GitHub.