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
| Format | Uitbreiding | Lees → | Schrijven |
|---|---|---|---|
| FBX (ASCII en Binaire, 6.x-7.x) | .fbx | Ja ja | niet |
| GST 1.0 / 2.0 | .gltf | Ja ja | Ja ja |
| GTTB Binaire | .glb | Ja ja | Ja ja |
| Wavefront OBJ | .obj | Ja ja | Ja ja |
| STL (ASCII en binaire) | .stl | Ja ja | Ja 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
- Ontwikkelaar Guide - API-wandelingen en Gebruik patroon
- Kennisbasis Hoe te artikelen en FAQs
- Vuur Referentie - volwaardige klasse en Methode documentatie