Nous sommes ravis d’annoncer la disponibilité de Aspose.3D FOSS pour Java - une bibliothèque libre et open source pour travailler avec les formats de fichiers 3D dans les applications Java. Construit comme une solution Java pure sans dépendances, la bibliotheque fonctionne sur Java 21 et plus tard, ce qui le rend accessible à un large éventail de projets et environnements.
Ce post passe par ce que la bibliothèque offre, comment commencer et où partir d’ici.
Qu’est-ce que le 3D FOSS pour Java ?
Aspose.3D FOSS pour Java est une bibliothèque de traitement de fichiers 3D légère publiée sous le numéro 1 du code. Licence de M.Il fournit une API de scène-graphes qui vous permet de charger, d’inspecter, de transformer et de sauvegarder des modèles 3D dans plusieurs formats largement utilisés. La bibliothèque est entièrement écrit en Java et ne nécessite pas de binaries natives externes ou de configurations spécifiques à la plateforme.
Le code source est disponible sur GitHub : HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
Les clés hauts
- Le Java pur - pas de JNI, pas des bibliothèques indigènes, aucune restriction sur la plateforme.
- Le Java 21+ compatible .
- M. Licence - l’utiliser dans des projets personnels, commerciaux ou propriétaires sans restrictions.
- Architecture scène-graphes - un arbre familial de nodes, de mesures, des caméras et des matériaux.
- Support multi-formats - lire et écrire les fichiers OBJ, STL, glTF 2.0 et GLB; lire les Fichières FBX.
Démarrage rapide
Maven Installation
Ajoutez la dépendance suivante à votre pom.xml:
<dependency>
<groupId>org.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.5.0</version>
</dependency>Votre première conversion
Le cas d’utilisation le plus simple est de télécharger un fichier 3D dans un format et de l’enregistrer dans une autre. Voici une conversion à deux lignes de STL à OBJ:
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");
}
}
Le Scene La classe est le point d’entrée central. appeler Scene.fromFile() avec un fil de route pour charger un modèle, puis appeler save() avec la voie cible. La bibliothèque infère le format de l’extension de fichier.
Créer une scène de Scratch
Vous pouvez également créer des scènes de manière programmée :
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");
}
}
Cela crée une nouvelle scène, ajoute un node enfant appelé “Box” sous la racine, le positionne dans les coordonnées (1, 2, 3), et exporte le résultat comme un fichier glTF.
Créer des options spécifiques au format
Lorsque vous avez besoin de contrôle plus fin sur le processus de chargement, chaque format fournit une classe d’options dédiée. par exemple, télécharger un fichier STL avec des options explicites:
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");
}
}
Le Scene.fromFile() La méthode statique accepte l’un des types d’option de charge : ObjLoadOptions, StlLoadOptions, GltfLoadOptions,ou FbxLoadOptions.
Traverser le scénario graphique
Une fois une scène chargée, vous pouvez marcher sur l’arbre de node pour inspecter ou modifier son contenu:
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());
}
}
}
}
Ce modèle est utile pour déboucher, générer des rapports sur les contenus de modèles ou modifier sélectivement des parties d’une scène avant de re-exporter.
Application des transformations
La positionnement des nodes dans l’espace 3D est effectué à travers le Transform Objet sur chaque 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");
}
}
Les transformations suivent le modèle de patrimoine parent-enfant standard : la position spatiale du monde d’un enfant est la combinaison de sa transformation locale et tous les ancêtres se transformeront jusqu’à la racine.
Ce qui est inclus
La bibliothèque a un ensemble axé sur les capacités conçues autour du modèle scène-graphes 3D.
Scène Graph
Le graphique de scène est le dos de l’API. Chaque fichier 3D est représenté comme une structure d’arbre:
| Classes | Rôle |
|---|---|
Scene | Contenteur de haut niveau; la racine du graphique scène |
Node | Une position nommée dans l’arbre; maintient les transformations et les nodes de l’enfant |
Entity | Base abstraite pour les objets visuels attachés aux nodes |
Mesh | Géométrie polygonale - vertices, visages, normales |
Camera | Définition de la caméra virtuelle |
Transform | Traduction locale, rotation et échelle pour un node |
GlobalTransform | Transformation spatiale informatique |
Matériaux
La bibliothèque fournit un modèle matériel PBR (Rendering physiquement basé):
- PbrMaterial - matériel de rendement physiquement basé avec albedo, métallité, rigidité et couleur émissive.C’est la seule classe de matériaux concrètes disponible dans l’édition Java.
Utilités mathématiques
Le com.aspose.threed Le package comprend les primitives mathématiques essentielles :
- Vector 3 - Vector 3 composants pour les positions, directions et couleurs.
- Matrix 4 - 4x4 matrix de transformation.
- Quaternation - La représentation de la rotation.
- BoundingBox - boîte de bord axée pour les requêtes spatiales.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)
Réserver et stocker les options
Chaque format a des classes d’options dédiées qui vous permettent de contrôler le comportement d’importation et d ́exportation :
| Formats | Options de charge | Sauver les options |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| GST / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | (On ne fait que l’importation) |
Par exemple, pour exporter glTF avec JSON bien imprimé et un système de coordonnées flipped:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Formats soutenus
La table ci-dessous résume les formats que Aspose.3D FOSS pour Java peut lire et écrire.
| Formats | Extension | Importation | Exportation | Notes |
|---|---|---|---|---|
| OBJ | .obj | Oui | Oui | Avec les matériaux MTL |
| STL | .stl | Oui | Oui | Binaux + ASCII |
| GST 2.0 | .gltf | Oui | Oui | Formats JSON |
| GLB | .glb | Oui | Oui | Binaires GlTF par GltfSaveOptions |
| FBX | .fbx | Oui | Non pas | Importation uniquement |
OBJ, STL, glTF et GLB supportent la charge et l’économie. FBX est soutenu pour les importations uniquement.
Guide de sélection du format
Le choix du format approprié dépend de votre cas d’utilisation :
- OBJ Il est idéal lorsque vous avez besoin de la compatibilité maximale à travers les outils 3D. Presque chaque application de modélisation peut lire et écrire OBJ. Il fonctionne bien pour l’échange de données mesh mais ne porte que des informations matérielles de base par le biais des fichiers MTL compagnons.
- STL Il stocke la géométrie triangulée crude sans matériaux ou hiérarchie de scène, ce qui est exactement ce que le logiciel de coupe-ciel attend. Si votre pipeline se termine sur un imprimante 3D, STL est l’option simple.
- GTTF est le standard moderne pour la web et en temps réel 3D. Il soutient les matériaux PBR, les hiérarchies de scène complète, et est conçu pour une transmission efficace. Utilisez glTF lors de la construction des spectateurs Web, travaillez avec trois.js ou Babylon.JS, ou ciblez n’importe quel pipeline de rendement en tempo réelle.
- FBX Il est profondément intégré dans le développement de jeux et les flux de travail de création de contenu numérique. il soutient des données riches sur la scène, y compris les hiérarchies et matériaux. Aspose.3D FOSS pour Java soutien FBX Importation uniquement - utilisez-le pour charger les actifs FBX et les convertir dans d’autres formats.
Les limites connues
Il est important de noter que Scene.render() est Pas soutenu dans la FOSS édition. appeler cette méthode va jeter un UnsupportedOperationException.La bibliothèque est conçue pour le traitement 3D basé sur les fichiers - chargement, manipulation, transformation et économie de modèles - plutôt que la rendu en temps réel à un écran.
Source ouverte et licence
Aspose.3D FOSS pour Java est sorti sous le Licence de MIT.Cela signifie que vous êtes libre de :
- Utilisez la bibliothèque dans les applications commerciales et propriétaires.
- Modifiez le code source pour répondre à vos besoins.
- Distribuez la bibliothèque dans le cadre de votre propre logiciel.
Il n’y a pas de frais de royauté, aucun limites d’utilisation et aucune exigence d’attribution au-delà de ce que la licence MIT spécifie.
Le code source complet est hébergé sur GitHub, et les contributions sont bienvenues : HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
Les exigences système
| Requirements | détails |
|---|---|
| Version Java | 21 or later |
| dépendance | Le tout (Java) |
| Plateformes | Tout site qui fonctionne avec un JVM |
| Construire un outil | Maven (recommandé) |
Pour commencer
Voici les moyens pour vous aider à se lever et à courir :
- Documentaire - des guides complets et des parcours API sont disponibles sur le site Site de documentation Aspose.3D.
- Base de connaissances - comment pratiquer les articles et les conseils de résolution des problèmes dans le Métro 3D KB.
- Le référencement API - une référence de classe et méthode détaillée à la Aspose.3D API de référence.
- Code source - Browse et contribue à GitHub.
- Maven Centre - le package est publié comme
org.aspose:aspose-3d-foss:26.5.0à Maven Central.
Cas d’utilisation courantes
Voici quelques scénarios pratiques où Aspose.3D FOSS pour Java se convient bien:
Formats de transformation des pipelines
Beaucoup d’équipes reçoivent des actifs 3D dans un format mais les ont besoin dans l’autre. Une équipe de conception peut travailler sur FBX tandis que l’équipe web a besoin de glTF. La bibliothèque vous permet de construire des pipelines de conversion automatisées:
// 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
Avant d’intégrer un actif 3D dans votre application, vous pouvez vouloir valider son contenu – vérifier les comptes de nœuds, vévoir la géométrie ou confirmer que les éléments attendus sont présents :
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");
}
}
Assemblée scène
Vous pouvez charger plusieurs modèles et les combiner dans une seule scène:
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");
Qu’est-ce que le prochain
Dans les prochains articles, nous couvrirons :
- Une profonde immersion dans les fonctionnalités clés de l’API scène-graphes, des matériaux et des outils mathématiques.
- Un guide pratique pour travailler avec chaque format 3D soutenu - OBJ, STL, glTF et FBX - y compris les options de chargement / sauvegarde et les modèles de conversion de batch.
Restez en forme et sentez-vous libre d’explorer la bibliothèque et de partager vos commentaires sur GitHub.