Einführung

3D-Inhalte in Java benötigen normalerweise einen Wahl zwischen schweren Gewicht. Spielmotoren und bare-bones Mathematikbibliotheken. aspose-3d-foss Das Paket bietet eine mittlerer Boden: eine fokussierte Scene-Graph API, die Dateien I/O, Node Hierarchien und, Misch Konstruktion, und koordinieren Transformationen ohne die Trennung in einer Rendering Pipeline oder eine innere Abhängigkeitskette.

Aspose.3D FOSS für Java ist eine Open Source-Bibliothek unter der MIT Lizenz verteilt. Es bietet 80 Klassen umfasst Scene Management, Geometrie, Materialien und Formatkonvertierung. Die Bibliotheke liest FBX, glTF/GLB, Wavefront OBJ und STL, und schreibt gltF / GLB , OBG und Stl (FBX Export wird nicht implementiert), macht es praktisch für Server-side 3D Verarbeitung, Build-tool Integrationen und Daten-Konvertierungsleitungen, die auf Java 21 oder später laufen.

Dieser Beitrag geht durch die Fähigkeiten des Scene-Managements in der Bibliothek: wie man eine Szenen aus dem Schraub baut, sie mit Geometrie und Transformationen populiert und das Ergebnis auf den Disk exportiert.


Was ist enthalten

Grafische Grundlagen

Die Scene Klasse ist der Wurzelcontainer für jedes 3D-Dokument. Es hält eine Worte Node, Vermögensmetadata, Animationsclips und Unterszenen. Sie können eine leere scenen und dann populieren, oder ein vorhandenes Datei mit 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");

Jeder Node kann eine halten Entity (Sie wie A Mesh oder Cameraa) A Transform, eine Liste von Materialien und weitere Kinderknoten. die Baumstruktur spiegeln das Scene-Graph-Pattern, das von den meisten 3D-Autoring Tools verwendet wird.

Mesh Bau

Die Mesh Klasse ermöglicht es Ihnen, Geometrie von Kontrollpunkten und Polygonen zu definieren. Indikatoren. Sie fügen Vertikale mit addControlPoint,Dann verbinden sie in Gesichter. mit 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);

Das Feuerwerk umfasst triangulate(), optimize(removeVertices),und Boolean Die Operationen (union, difference, intersectDiese Methoden sind aber in die aktuelle Release – sie geben eine Klone der Eingabe-Messe zurück, ohne zu erfüllen die sogenannte Operation.

Transformation und Positionierung

Jeder Node Tritt A Transform die ihre lokalen Übersetzung, Rotation kontrolliert, Diese werden durch die Hierarchie zusammengefasst, damit ein Elternknoten bewegt wird. Sie bewegt alle ihre Kinder.

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

Für absolute Positionierung von Fragen, rufen Sie node.getGlobalTransform() Zurücknehmen Die kompositierte GlobalTransform,oder node.evaluateGlobalTransform(true) Um einen zu bekommen Matrix4 Dazu gehören geometrische Offset.

PBR Materialien

Die PbrMaterial Klasse bietet physisch-basierte rendering Eigenschaften: Albedo Farbe, Metallfaktor, Rötung, emissionsfähige Farbfarbe und Transparenz. Zuweisen Sie ein Material an einen Knoten, wenn das Kind erstellt wird.

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 der Erkennung

Die FileFormat Klasse bietet statische Such- und Erkennungstools. Sie können Löschen Sie ein Format durch Dateierweiterung oder suchen sie einen Stream, um unbekannte Dateien zu identifizieren.

import com.aspose.threed.FileFormat;

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

Koordinatorische Systemkonvertierung

AxisSystem Sie können die Up-Axis, Front-axis und Handvollheit eines Koordinator, dann berechnet ein Matrix4 Um die Geometrie zwischen den Konventionen (z. B. von einem Z-up rechtshandigen System zu einem Y-Up) Eine linksgeschneiderte Hand).

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

Schnelle Start

Die Maven-Verhängigkeit hinzufügen:

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

Erstellen Sie eine einfache Szenen und exportieren sie:

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

Unterstützte Formate

FormatierungErweiterungLesenSchreiben
FBX (ASCII und Binary, 6.x-7.x).fbxJa jaNo nicht
GFW 1.0 / 2.0.gltfJa jaJa ja
GTTB binär.glbJa jaJa ja
Wavefront OBJ.objJa jaJa ja
STL (ASCII und binäre).stlJa jaJa ja

Jedes Format ist gewidmet LoadOptions und SaveOptions Unterklasse (für zum Beispiel, FbxLoadOptions, GltfSaveOptions, StlSaveOptionsDas zeigt Formatspezifische Einstellungen wie Koordinaten-Systemflieben und Inhaltstyp Die Selektion .


Open Source & Lizenzierung

Aspose.3D FOSS für Java wird unter der MIT-Lizenz veröffentlicht. auf GitHub verfügbar Aspose.3D-FOSS für Java. Sie können die Bibliothek in kommerziellen und Nicht-kommerzielle Projekte ohne Einschränkungen.


zu beginnen