Introductie

3D-inhoud in Java vereist meestal een keuze tussen zware gewicht. spelmotoren en bar-bones wiskundige bibliotheken. de aspose-3d-foss Het pakket biedt een middengrond: een geconcentreerde scène-graph API die bestanden I/O, node hiërarchieën beheert, mesh bouw, en coördineren transformaties zonder trekken in een rendering een pipeline of een inheemse afhankelijkheidsketen.

Aspose.3D FOSS voor Java is een open source bibliotheek die wordt verdeeld onder de MIT-licentie. Het biedt 80 klassen omvang scène management, geometrie, materialen en format conversie. De bibliothetiek leest FBX, glTF/GLB, Wavefront OBJ, en STL, schrijft gltF / GLB , OBG, and STl (FBX export is niet uitgevoerd), waardoor het praktisch voor server-side 3D verwerking, build-tool integraties en data-conversie pipelines die op Java 21 of later worden uitgewerkt.

Dit bericht gaat door de scène-management mogelijkheden in de bibliotheek: hoe om een scene te bouwen van schroeven, populeren met geometrie en transformaties, en export het resultaat naar de schijf.


Wat is opgenomen

Scène Graph Basics

De The Scene De klasse is de wortelcontainer voor elk 3D-document.Het heeft een worte Node, activa metadata, animatieclip’s en sub-scènes. u kunt een leeg scène en vervolgens populeren, of laden van een bestaande bestand met 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");

Elke Node Kan een Entity (zoals een Mesh of Camera, a Transform, een lijst met materialen, en nog meer kinderknoten. de boomstructuur spiegel de scène-graph patroon gebruikt door de meeste 3D schrijvers tools.

Mesh bouw

De The Mesh De klas laat je geometrie definiëren vanuit controlepunten en polygonen. verticale. u voegt verticaal met addControlPoint,en verbinden ze met gezicht met 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);

De mesh API bevat triangulate(), optimize(removeVertices),En Boolean De operaties (union, difference, intersectMaar deze methoden zijn in de de huidige release — ze terugbrengen een clone van de input mesh zonder het uitvoeren van De genoemde operatie.

Transformatie en Positioning

Elk van de Node draagt A Transform die de lokale vertaling, rotatie, Deze worden gecomposeerd door de hiërarchie zodat een ouder node wordt verplaatst. Hij verplaatst al zijn kinderen.

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

Voor absolute positionering vragen, call node.getGlobalTransform() om terug te krijgen De gecomposeerde GlobalTransform,Of node.evaluateGlobalTransform(true) Om een te krijgen Matrix4 Dit omvat geometrische offset.

PBR materialen

De The PbrMaterial De klas biedt fysiek gebaseerde rendering eigenschappen: albedo kleur, metalen factor, roosheid, emissieve kleur en transparantie. Verwijder een materiaal aan een knoop bij het maken van het kind.

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 Detectie

De The FileFormat klassen biedt statische lookup en detectie-instrumenten. u kunt een format oplossen door het bestand uitbreiden of proberen een stroom om onbekende bestanden te identificeren.

import com.aspose.threed.FileFormat;

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

Coördinatie-systeem conversie

AxisSystem laat je de up-axis, front-axi en handigheid van een het coördinatie systeem, dan berekent een Matrix4 om de geometrie te veranderen tussen conventies (bijvoorbeeld, van een Z-up rechterhandsysteem tot een Y-Up een linkshandig).

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

Snelle start

Voeg de Maven afhankelijkheid toe:

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

Maak een eenvoudige scène en exporteer het:

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

Ondersteunde formaten

FormatUitbreidingLees →Schrijven
FBX (ASCII en Binaire, 6.x-7.x).fbxJa janiet
GST 1.0 / 2.0.gltfJa jaJa ja
GTTB Binaire.glbJa jaJa ja
Wavefront OBJ.objJa jaJa ja
STL (ASCII en binaire).stlJa jaJa ja

Elk format is gewijd aan LoadOptions en SaveOptions onderklassen (voor Voorbeeld van, FbxLoadOptions, GltfSaveOptions, StlSaveOptionsDat toont aan Format-specifieke instellingen zoals coördinaten-stelselvlieping en inhoudstype De selectie.


Open source & licentie

Aspose.3D FOSS voor Java wordt vrijgegeven onder de MIT-licentie. beschikbaar op GitHub bij Aspose.3D-FOSS voor Java. U kunt de bibliotheek gebruiken, wijzigen en herverdelen in commerciële en Niet-commerciële projecten zonder beperkingen.


te beginnen