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 directive), η βιβλιοθήκη θα προσπαθήσει να φορτώσει αυτόματα τους ορισμούς υλικών από αυτό. Το αρχείο MTL πρέπει να βρίσκεται στον ίδιο φάκελο με το αρχείο OBJ ή στη διαδρομή που καθορίζεται στην directive.

Αποθήκευση ως 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 είναι σημαντικά μικρότερο από το ASCII STL για μεγάλα μοντέλα.
  • Το STL είναι η προτιμώμενη μορφή όταν ο προορισμός είναι ένας 3D εκτυπωτής ή λογισμικό κοπής.

glTF: GL Transmission Format

Το glTF είναι μια σύγχρονη μορφή σχεδιασμένη για αποδοτική μετάδοση και φόρτωση 3D περιεχομένου, ιδιαίτερα στο διαδίκτυο και σε εφαρμογές πραγματικού χρόνου. Υποστηρίζει υλικά 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

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) και μετατροπή σε άλλες μορφές.
  • Φόρτωση χαρακτήρων με rig και κινούμενων σκηνών για επανεξαγωγή σε glTF/GLB.

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

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

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ΔιατηρημένοΚαλή πιστότητα

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

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

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

Ακολουθεί ένα πλήρες παράδειγμα που φορτώνει ένα αρχείο 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 για 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.