Introduction

Travailler avec du contenu 3D dans Java nécessite généralement le choix entre les poids lourds machines à sous et les bibliothèques de mathématiques bar-bones. aspose-3d-foss Le package offre un milieu : un scène-graph focalisé API qui gère les fichiers I/O, les hiérarchies des nœuds, construction de mesh, et coordonner les transformations sans tirer dans un rendu Un réseau de pipeline ou une chaîne d’addiction.

Aspose.3D FOSS pour Java est une bibliothèque à source ouverte distribuée sous la licence MIT. Il fournit 80 classes de gestion scène, géométrie, matériaux et conversion du format. La bibliographie lit FBX, glTF/GLB, Wavefront OBJ, et STL, en écrivant gltF / GLB , OBj et Stl (exportation FBX n’est pas mis en œuvre), ce qui le rend pratique pour le traitement 3D sur le serveur, les intégrations de outils de construction et les pipelines de conversions de données fonctionnant sur Java 21 ou plus tard.

Ce post passe par les capacités de gestion des scènes dans la bibliothèque: comment construire une scène à partir du cratch, le populer avec la géométrie et les transformations, et exporter le résultat au disque.


Ce qui est inclus

Scène Graphic Basics

Le Scene La classe est le conteneur de racine pour chaque document 3D. Il a une racines Node, les métadonnées d’actifs, clips d’animation et sous-scènes. Vous pouvez créer un vide scène et puis le populer, ou charger un fichier existant avec Scene.fromFile.

import com.aspose.threed.Scene;
import com.aspose.threed.Node;

Scene scene = new Scene();
Node root = scene.getRootNode();

// Add named child nodes to build a hierarchy
Node chassis = root.createChildNode("Chassis");
Node wheel = chassis.createChildNode("FrontLeftWheel");

Chaque Node Peut tenir un Entity (comme à Mesh ou Camera) a) à Transform, une liste de matériaux, et d’autres nodes enfant. la structure du bois Il reflète le modèle scénographique utilisé par la plupart des outils d’auteur 3D.

Mesh Construction

Le Mesh La classe vous permet de définir la géométrie des points de contrôle et du polygone. - les indicateurs. vous ajoutez des vertices avec addControlPoint,Et puis les relire dans des visages. avec createPolygon.

import com.aspose.threed.Mesh;

Mesh box = new Mesh("Box");

// Define eight corners of a cube
box.addControlPoint(0, 0, 0);
box.addControlPoint(1, 0, 0);
box.addControlPoint(1, 1, 0);
box.addControlPoint(0, 1, 0);
box.addControlPoint(0, 0, 1);
box.addControlPoint(1, 0, 1);
box.addControlPoint(1, 1, 1);
box.addControlPoint(0, 1, 1);

// Create quad faces
box.createPolygon(0, 1, 2, 3); // back
box.createPolygon(4, 5, 6, 7); // front
box.createPolygon(0, 4, 7, 3); // left
box.createPolygon(1, 5, 6, 2); // right
box.createPolygon(3, 2, 6, 7); // top
box.createPolygon(0, 1, 5, 4); // bottom

scene.getRootNode().createChildNode("Box", box);

Le feu de la mer comprend triangulate(), optimize(removeVertices),et Boolean Les opérations (union, difference, intersectMais ces méthodes sont en la sortie actuelle — ils retournent un clone de la messe d’entrée sans effectuer La fonction appelée.

Transformation et positionnement

Chacun Node Porter A Transform qui contrôle sa traduction locale, son rotation, Elles se composent à travers la hiérarchie afin de déplacer un node parent. Il déplace tous ses enfants.

import com.aspose.threed.Transform;
import com.aspose.threed.Node;

Node node = scene.getRootNode().createChildNode("Shifted");
Transform t = node.getTransform();
t.setTranslation(5.0, 0.0, -3.0);
t.setScale(2.0, 2.0, 2.0);
t.setEulerAngles(0, 45.0, 0);

Pour une question de positionnement absolu, appelez-vous node.getGlobalTransform() pour récupérer La composée GlobalTransform,ou node.evaluateGlobalTransform(true) Pour obtenir un Matrix4 Il s’agit d’une offset géométrique.

PBR matériel

Le PbrMaterial La classe fournit des propriétés de rendement physiquement fondées : couleur albedo, facteur métallique, rigidité, couleur émissive et transparence. Assignez un matériau à un node lors de la création de l’enfant.

import com.aspose.threed.PbrMaterial;
import com.aspose.threed.Vector4;
import com.aspose.threed.Vector3;

PbrMaterial mat = new PbrMaterial("RedMetal");
mat.setAlbedo(new Vector4(0.9, 0.1, 0.1, 1.0));
mat.setMetallicFactor(0.8);
mat.setRoughnessFactor(0.3);
mat.setEmissiveColor(new Vector3(0, 0, 0));

scene.getRootNode().createChildNode("Part", box, mat);

Format de détection

Le FileFormat classe fournit des outils de recherche et détection statiques. vous pouvez résoudre un format par extension de fichier ou évaluer une flux pour identifier des fichiers inconnus.

import com.aspose.threed.FileFormat;

FileFormat fmt = FileFormat.getFormatByExtension("model.glb");
boolean canRead  = fmt.getCanImport();
boolean canWrite = fmt.getCanExport();

Conversion de coordonnées

AxisSystem vous permettra de définir l’axe, l’axi et la portée d’un coordonnées, puis comptez un Matrix4 transformation de la géométrie entre conventions (par exemple, d’un système à droite Z-up à un Y-Up Une main gauche).

import com.aspose.threed.AxisSystem;
import com.aspose.threed.Axis;
import com.aspose.threed.CoordinateSystem;
import com.aspose.threed.Matrix4;

AxisSystem source = new AxisSystem(
    CoordinateSystem.RIGHT_HANDED, Axis.Z_AXIS, Axis.Y_AXIS);
AxisSystem target = new AxisSystem(
    CoordinateSystem.LEFT_HANDED, Axis.Y_AXIS, Axis.Z_AXIS);
Matrix4 conversion = source.transformTo(target);

Démarrage rapide

Ajouter la dépendance Maven :

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

Créez une scène simple et exportez-la :

import com.aspose.threed.Scene;
import com.aspose.threed.Mesh;
import com.aspose.threed.Node;
import com.aspose.threed.StlSaveOptions;
import com.aspose.threed.FileContentType;

Scene scene = new Scene();
Mesh mesh = new Mesh("Triangle");
mesh.addControlPoint(0, 0, 0);
mesh.addControlPoint(1, 0, 0);
mesh.addControlPoint(0, 1, 0);
mesh.createPolygon(0, 1, 2);

scene.getRootNode().createChildNode("Shape", mesh);

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

Formats soutenus

FormatsExtensionLireÉcrire
FBX (ASCII et Binaire, 6.x-7.x).fbxOuiNon pas
GST 1.0 / 2.0.gltfOuiOui
GSTB Binaire.glbOuiOui
Le Wavefront OBJ.objOuiOui
STL (ASCII et binaire).stlOuiOui

Chaque format est dédié à LoadOptions et SaveOptions Les sous-classe (pour Par exemple, FbxLoadOptions, GltfSaveOptions, StlSaveOptionsCe qui expose Les paramètres spécifiques au format, tels que le flipping de coordonnées et le type de contenu Sélectionner .


Source ouverte et licence

Aspose.3D FOSS pour Java est sorti sous la licence MIT. Disponible sur GitHub à Aspose 3D-FOSS pour Java. Vous pouvez utiliser, modifier et redistribuer la bibliothèque en commerce et dans le cadre de l’utilisation des données. Des projets non commercials sans restrictions.


Pour commencer