Είμαστε ενθουσιασμένοι να ανακοινώσουμε τη διαθεσιμότητα του Aspose.3D FOSS for Java – μια δωρεάν, ανοιχτού κώδικα βιβλιοθήκη για εργασία με μορφές αρχείων 3D σε εφαρμογές Java. Κατασκευασμένη ως μια καθαρή λύση Java χωρίς εγγενείς εξαρτήσεις, η βιβλιοθήκη λειτουργεί σε Java 21 και μεταγενέστερα, καθιστώντας την προσβάσιμη σε ένα ευρύ φάσμα έργων και περιβαλλόντων.

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

Τι είναι το Aspose.3D FOSS για Java;?

Aspose.3D FOSS for Java είναι μια ελαφριά βιβλιοθήκη επεξεργασίας αρχείων 3D που δημοσιεύεται υπό την MIT license. Παρέχει ένα API γραφήματος σκηνής που σας επιτρέπει να φορτώνετε, να ελέγχετε, να μετασχηματίζετε και να αποθηκεύετε 3D μοντέλα σε διάφορες ευρέως χρησιμοποιούμενες μορφές. Η βιβλιοθήκη είναι πλήρως γραμμένη σε Java και δεν απαιτεί εξωτερικά εγγενή δυαδικά αρχεία ή ρυθμίσεις ειδικές για την πλατφόρμα.

Ο κώδικας πηγής είναι διαθέσιμος στο GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Κύρια Σημεία

  • Καθαρό Java – χωρίς JNI, χωρίς εγγενείς βιβλιοθήκες, χωρίς περιορισμούς πλατφόρμας.
  • Java 21+ συμβατό.
  • Με άδεια MIT – χρησιμοποιήστε το σε προσωπικά, εμπορικά ή ιδιόκτητα έργα χωρίς περιορισμούς.
  • Αρχιτεκτονική γραφήματος σκηνής – ένα οικείο δέντρο κόμβων, πλεγμάτων, καμερών και υλικών.
  • Υποστήριξη πολλαπλών μορφών – διαβάζει και γράφει αρχεία OBJ, STL, glTF 2.0 και GLB· διαβάζει αρχεία FBX.

Γρήγορη Εκκίνηση

Εγκατάσταση Maven

Προσθέστε την ακόλουθη εξάρτηση στο pom.xml:

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

Η Πρώτη Σας Μετατροπή

Η πιο απλή περίπτωση χρήσης είναι η φόρτωση ενός 3D αρχείου σε μια μορφή και η αποθήκευσή του σε άλλη. Εδώ είναι μια μετατροπή δύο γραμμών από OBJ σε STL:

import com.aspose.threed.*;

public class QuickConvert {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("cube.obj");
        scene.save("output.stl");
    }
}

Το Scene class είναι το κεντρικό σημείο εισόδου. Κλήση Scene.fromFile() με διαδρομή αρχείου για φόρτωση μοντέλου, στη συνέχεια κλήση save() με τη διαδρομή προορισμού. Η βιβλιοθήκη ανιχνεύει τη μορφή από την επέκταση του αρχείου.

Δημιουργία Σκηνής από το Μηδέν

Μπορείτε επίσης να δημιουργήσετε σκηνές προγραμματιστικά:

import com.aspose.threed.*;

public class BuildScene {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();
        Node node = scene.getRootNode().createChildNode("Box");

        Transform t = node.getTransform();
        t.setTranslation(1, 2, 3);

        scene.save("scene.gltf");
    }
}

Αυτό δημιουργεί μια νέα σκηνή, προσθέτει έναν υποκόμβο με όνομα “Box” κάτω από τη ρίζα, το τοποθετεί στις συντεταγμένες (1, 2, 3) και εξάγει το αποτέλεσμα ως αρχείο glTF.

Φόρτωση με Επιλογές Κατά Μορφή

Όταν χρειάζεστε πιο ακριβή έλεγχο της διαδικασίας φόρτωσης, κάθε μορφή παρέχει μια αφιερωμένη κλάση επιλογών. Για παράδειγμα, η φόρτωση ενός αρχείου STL με ρητές επιλογές:

import com.aspose.threed.*;

public class LoadWithOptions {
    public static void main(String[] args) throws Exception {
        StlLoadOptions opts = new StlLoadOptions();
        Scene scene = Scene.fromFile("part.stl", opts);

        // Inspect the loaded scene
        System.out.println("Root children: "
            + scene.getRootNode().getChildNodes().size());

        // Re-export as OBJ
        scene.save("part.obj");
    }
}

Το Scene.fromFile() static μέθοδος δέχεται οποιονδήποτε από τους τύπους επιλογών φόρτωσης: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, ή FbxLoadOptions.

Περιήγηση στο Γράφημα Σκηνής

Μόλις φορτωθεί μια σκηνή, μπορείτε να περιηγηθείτε στο δέντρο κόμβων για να ελέγξετε ή να τροποποιήσετε το περιεχόμενό του:

import com.aspose.threed.*;

public class TraverseScene {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("model.gltf");

        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("Node: " + child.getName());

            Transform t = child.getTransform();
            System.out.println("  Translation: " + t.getTranslation());

            Entity entity = child.getEntity();
            if (entity instanceof Mesh) {
                Mesh mesh = (Mesh) entity;
                System.out.println("  Vertices: "
                    + mesh.getControlPoints().size());
            }
        }
    }
}

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

Εφαρμογή Μετασχηματισμών

Η τοποθέτηση κόμβων σε τρισδιάστατο χώρο γίνεται μέσω του Transform αντικειμένου σε κάθε Node:

import com.aspose.threed.*;

public class TransformExample {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();

        Node parent = scene.getRootNode().createChildNode("Parent");
        parent.getTransform().setTranslation(10, 0, 0);

        Node child = parent.createChildNode("Child");
        child.getTransform().setTranslation(5, 0, 0);
        child.getTransform().setScale(2, 2, 2);

        // Child's world position is (15, 0, 0) due to
        // parent-child transform inheritance

        scene.save("transformed.gltf");
    }
}

Οι μετασχηματισμοί ακολουθούν το τυπικό μοντέλο κληρονομικότητας γονέα‑παιδιού: η θέση του παιδιού στον παγκόσμιο χώρο είναι ο συνδυασμός του τοπικού του μετασχηματισμού και όλων των μετασχηματισμών των προγόνων μέχρι τη ρίζα.

Τι περιλαμβάνεται

Η βιβλιοθήκη παρέχει ένα εστιασμένο σύνολο δυνατοτήτων σχεδιασμένο γύρω από το μοντέλο γραφήματος σκηνής 3D.

Γράφημα Σκηνής

Το γράφημα σκηνής είναι η ραχοκοκαλιά του API. Κάθε αρχείο 3D αναπαρίσταται ως δομή δέντρου:

ΚλάσηΡόλος
SceneΚύριο δοχείο επιπέδου κορυφής· η ρίζα του γραφήματος σκηνής
NodeΜια ονομασμένη θέση στο δέντρο· περιέχει μετασχηματισμούς και θυγατρικούς κόμβους
EntityΑφηρημένη βάση για οπτικά αντικείμενα προσαρτημένα σε κόμβους
MeshΠολυγωνική γεωμετρία – κορυφές, επιφάνειες, κανονικές
CameraΟρισμός εικονικής κάμερας
TransformΤοπική μετατόπιση, περιστροφή και κλίμακα για έναν κόμβο
GlobalTransformΥπολογισμένος μετασχηματισμός σε παγκόσμιο χώρο

Υλικά

Η βιβλιοθήκη παρέχει ένα μοντέλο υλικού PBR (Physically Based Rendering):

  • PbrMaterial – υλικό από φυσική απόδοση με albedo, metalness, roughness, emissive color και transparency. Αυτό είναι η μόνη συγκεκριμένη κλάση υλικού διαθέσιμη στην έκδοση Java.

Εργαλεία Μαθηματικών

Το com.aspose.threed το πακέτο περιλαμβάνει βασικές μαθηματικές δομές:

  • Vector3 – διάνυσμα 3-συστατικών για θέσεις, κατευθύνσεις και χρώματα.
  • Matrix4 – πίνακας μετασχηματισμού 4x4.
  • Quaternion – αναπαράσταση περιστροφής.
  • BoundingBox – κουτί περιβάλλοντος ευθυγραμμισμένο με τους άξονες για χωρικά ερωτήματα.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Επιλογές Φόρτωσης και Αποθήκευσης

Κάθε μορφή διαθέτει ειδικές κλάσεις επιλογών που σας επιτρέπουν να ελέγχετε τη συμπεριφορά εισαγωγής και εξαγωγής:

ΜορφήΦόρτωση επιλογώνΑποθήκευση επιλογών
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (μόνο εισαγωγή)

Για παράδειγμα, για εξαγωγή glTF με μορφοποιημένο JSON και αντιστροφή του συστήματος συντεταγμένων:

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

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

Υποστηριζόμενες μορφές

Ο παρακάτω πίνακας συνοψίζει τις μορφές που το Aspose.3D FOSS για Java μπορεί να διαβάσει και να γράψει.

ΜορφήΕπέκτασηΕισαγωγήΕξαγωγήΣημειώσεις
OBJ.objΝαιΝαιΜε υλικά MTL
STL.stlΝαιΝαιΔυαδικό + ASCII
glTF 2.0.gltfΝαιΝαιμορφή JSON
GLB.glbΝαιΝαιΔυαδικό glTF μέσω GltfSaveOptions
FBX.fbxΝαιΌχιΜόνο εισαγωγή

Τα OBJ, STL, glTF και GLB υποστηρίζουν τόσο τη φόρτωση όσο και την αποθήκευση. Το FBX υποστηρίζεται μόνο για εισαγωγή.

Οδηγός επιλογής μορφής

Η επιλογή της κατάλληλης μορφής εξαρτάται από την περίπτωση χρήσης σας:

  • OBJ είναι ιδανικό όταν χρειάζεστε μέγιστη συμβατότητα μεταξύ των 3D εργαλείων. Σχεδόν κάθε εφαρμογή μοντελοποίησης μπορεί να διαβάσει και να γράψει OBJ. Λειτουργεί καλά για ανταλλαγή δεδομένων πλέγματος, αλλά μεταφέρει μόνο βασικές πληροφορίες υλικού μέσω των συνοδευτικών αρχείων MTL.
  • STL είναι η προτιμώμενη μορφή για ροές εργασίας 3D εκτύπωσης. Αποθηκεύει ακατέργαστη τριγωνοποιημένη γεωμετρία χωρίς υλικά ή ιεραρχία σκηνής, κάτι που ακριβώς περιμένει το λογισμικό slicing. Εάν η αλυσίδα σας τελειώνει σε έναν 3D εκτυπωτή, το STL είναι η απλή επιλογή.
  • glTF είναι το σύγχρονο πρότυπο για το web και το 3D σε πραγματικό χρόνο. Υποστηρίζει υλικά PBR, πλήρεις ιεραρχίες σκηνής και έχει σχεδιαστεί για αποδοτική μετάδοση. Χρησιμοποιήστε το glTF όταν δημιουργείτε προβολείς βασισμένους στο web, εργάζεστε με three.js ή Babylon.js, ή στοχεύετε σε οποιοδήποτε pipeline απόδοσης σε πραγματικό χρόνο.
  • FBX είναι βαθιά ενσωματωμένο στις ροές εργασίας ανάπτυξης παιχνιδιών και δημιουργίας ψηφιακού περιεχομένου. Υποστηρίζει πλούσια δεδομένα σκηνής, συμπεριλαμβανομένων ιεραρχιών και υλικών. Aspose.3D FOSS για Java υποστηρίζει FBX μόνο εισαγωγή – χρησιμοποιήστε το για να φορτώσετε περιουσιακά στοιχεία FBX και να τα μετατρέψετε σε άλλες μορφές.

Γνωστοί περιορισμοί

Είναι σημαντικό να σημειωθεί ότι Scene.render() είναι δεν υποστηρίζεται στην έκδοση FOSS. Η κλήση αυτής της μεθόδου θα προκαλέσει ένα UnsupportedOperationException. Η βιβλιοθήκη έχει σχεδιαστεί για επεξεργασία 3D βασισμένη σε αρχεία – φόρτωση, επεξεργασία, μετασχηματισμό και αποθήκευση μοντέλων – αντί για πραγματικό‑χρόνο απόδοση σε οθόνη.

Ανοιχτός Κώδικας και Άδεια

Aspose.3D FOSS for Java κυκλοφορεί υπό την MIT License. Αυτό σημαίνει ότι είστε ελεύθεροι να:

  • Χρησιμοποιήσετε τη βιβλιοθήκη σε εμπορικές και ιδιόκτητες εφαρμογές.
  • Τροποποιήσετε τον πηγαίο κώδικα ώστε να ταιριάζει στις ανάγκες σας.
  • Διανείμετε τη βιβλιοθήκη ως μέρος του δικού σας λογισμικού.

Δεν υπάρχουν τέλη δικαιωμάτων, περιορισμοί χρήσης, ούτε απαιτήσεις αποτίμησης πέρα από ό,τι ορίζει η άδεια MIT.

Ο πλήρης κώδικας πηγής φιλοξενείται στο GitHub και οι συνεισφορές είναι ευπρόσδεκτες: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Απαιτήσεις Συστήματος

ΑπαίτησηΛεπτομέρεια
Java έκδοση21 or later
ΕξαρτήσειςΚαμία (καθαρό Java)
ΠλατφόρμεςΟποιαδήποτε πλατφόρμα που τρέχει μια JVM
Εργαλείο κατασκευήςMaven (συνιστάται)

Ξεκινώντας

Ακολουθούν οι πόροι που θα σας βοηθήσουν να ξεκινήσετε:

  • Τεκμηρίωση – ολοκληρωμένοι οδηγοί και περιηγήσεις API είναι διαθέσιμοι στο Aspose.3D ιστότοπος τεκμηρίωσης.
  • Βάση γνώσεων – πρακτικά άρθρα «πώς‑να» και συμβουλές αντιμετώπισης προβλημάτων στο Aspose.3D KB.
  • Αναφορά API – λεπτομερής αναφορά κλάσεων και μεθόδων στο Aspose.3D Αναφορά API.
  • Κώδικας Πηγής – περιηγηθείτε και συνεισφέρετε στο GitHub.
  • Maven Central – το πακέτο δημοσιεύεται ως com.aspose:aspose-3d-foss στο Maven Central.

Συνηθισμένες περιπτώσεις χρήσης

Ακολουθούν μερικά πρακτικά σενάρια όπου το Aspose.3D FOSS για Java ταιριάζει καλά:

Διαδικασίες μετατροπής μορφών

Πολλές ομάδες λαμβάνουν 3D assets σε μια μορφή αλλά τα χρειάζονται σε άλλη. Μια ομάδα σχεδίασης μπορεί να εργάζεται σε FBX ενώ η ομάδα web χρειάζεται glTF. Η βιβλιοθήκη σας επιτρέπει να δημιουργήσετε αυτοματοποιημένες διαδικασίες μετατροπής:

// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");

GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);

scene.save("asset.glb", opts);

3D Model Inspection and Validation

Πριν ενσωματώσετε ένα 3D περιουσιακό στοιχείο στην εφαρμογή σας, ίσως θέλετε να επικυρώσετε το περιεχόμενό του — ελέγχοντας τον αριθμό των κόμβων, επαληθεύοντας τη γεωμετρία ή επιβεβαιώνοντας ότι τα αναμενόμενα στοιχεία είναι παρόντα:

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

int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);

for (Node child : scene.getRootNode().getChildNodes()) {
    if (child.getEntity() instanceof Mesh) {
        Mesh mesh = (Mesh) child.getEntity();
        System.out.println(child.getName() + ": "
            + mesh.getControlPoints().size() + " vertices");
    }
}

Συναρμολόγηση Σκηνής

Μπορείτε να φορτώσετε πολλαπλά μοντέλα και να τα συνδυάσετε σε μία ενιαία σκηνή:

Scene scene = new Scene();

Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");

// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}

scene.save("assembled.gltf");

Τι Ακολουθεί

Στις επόμενες δημοσιεύσεις, θα καλύψουμε:

  • Μια εις βάθος ανάλυση των βασικών χαρακτηριστικών του API γραφήματος σκηνής, των υλικών και των μαθηματικών βοηθητικών λειτουργιών.
  • Ένας πρακτικός οδηγός για τη δουλειά με κάθε υποστηριζόμενο 3D φορμάτ — OBJ, STL, glTF και FBX — που περιλαμβάνει επιλογές φόρτωσης/αποθήκευσης και πρότυπα μαζικής μετατροπής.

Μείνετε συντονισμένοι και μη διστάσετε να εξερευνήσετε τη βιβλιοθήκη και να μοιραστείτε τα σχόλιά σας στο GitHub.