Introduktion
At arbejde med 3D-indhold i Java kræver typisk at vælge mellem tungvægt spilmotorer og bare-bones matematiske biblioteker. aspose-3d-foss Pakken tilbyder en midterrunde: en fokuseret scenen-graf API, der håndterer filer I/O, node hierarkier, Mesh konstruktion, og koordinere transformationer uden at trække i en rendering En indfødt afhængighedskæde eller en pipe.
Det giver 80 klasser omfang scene management, geometri, materialer og format konvertering. biblioteket læser FBX, glTF/GLB, Wavefront OBJ og STL, og skriver gltF / GLB , OBD og StL (FBX eksport er ikke implementeret), hvilket gør det praktisk for server-side 3D behandling, build-tool integrationer og data-conversion pipelines der kører på Java 21 eller senere.
Denne post går gennem scenen-management evner i biblioteket: hvordan man bygger en scene fra skraber, populerer det med geometri og transformationer, og eksporterer resultatet til disk.
Hvad er inkluderet
Skemaer af grafiske basik
Den Scene Klassen er roden container for hvert 3D-dokument. Det holder en rød Node, aktiver metadata, animation klipp og under-scener. Du kan skabe en tom scenen og derefter populere den, eller last en eksisterende fil med 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");
Alle Node Kan holde en Entity (som en af A) Mesh eller Cameraa) A Transform, en liste over materialer, og yderligere børns knuder. træstrukturen Det er en spejl for den scene-grafiske mønster, der bruges af de fleste 3D-forfatterværktøjer.
Mesh byggeri
Den Mesh Klasse giver dig mulighed for at definere geometri fra kontrolpunkter og polygon. Indikatorer. du tilføjer vertikaler med addControlPoint,Så kobler de til ansigter. Med 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);
I den nye ild indeholder triangulate(), optimize(removeVertices),Og Boolean Operationer (union, difference, intersectMen disse metoder er i stand til at den nuværende release - de returnerer en klone af indtastningsmasken uden at udføre Den såkaldte operation.
Transformation og positionering
Hver af dem Node bærer A Transform som kontrollerer sin lokale oversættelse, rotation, Disse komponerer gennem hierarkiet, så der bevæger en modersnode Han bevæger alle sine børn.
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);
For absolutte positioneringspørgsmål, kald node.getGlobalTransform() at tilbagekalde Den sammensatte GlobalTransform,eller node.evaluateGlobalTransform(true) For at få en Matrix4 Det omfatter geometriske offset.
PBR materialer
Den PbrMaterial Klasse giver fysisk-baserede renderingegenskaber: albedo farve, metallisk faktor, grusomhed, emissionsfarve og gennemsigtighed. Tildele et materiale til en knude, når du skaber barnet.
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);
Formateret af detektion
Den FileFormat klasse giver statisk lookup og detektion værktøjer. du kan løse et format ved filudvidelse eller undersøge en strøm for at identificere ukendte filer.
import com.aspose.threed.FileFormat;
FileFormat fmt = FileFormat.getFormatByExtension("model.glb");
boolean canRead = fmt.getCanImport();
boolean canWrite = fmt.getCanExport();
Koordinat-system konvertering
AxisSystem kan du definere den op-axis, front-aksis og håndværdigheden af en koordinater, og derefter beregne en Matrix4 For at forandre geometri mellem Konventioner (f.eks. fra et Z-up højrehåndssystem til en Y-Up En af venstre hånden).
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);
Hurtig start
Tilføj Maven afhængighed:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Byg en simpel scene og eksporter den:
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);
Støtte formater
| Formateret | Udvidelse | Læs | Skriv til |
|---|---|---|---|
| FBX (ASCII og Binary, 6.x-7.x) | .fbx | Ja ja | Ikke |
| GF 1.0 / 2.0 | .gltf | Ja ja | Ja ja |
| GST Binær | .glb | Ja ja | Ja ja |
| Vækst af OBJ | .obj | Ja ja | Ja ja |
| STL (ASCII og binær) | .stl | Ja ja | Ja ja |
Hver form har dedikeret sig til LoadOptions og SaveOptions Undergrundsforeningen (for Et eksempel, FbxLoadOptions, GltfSaveOptions, StlSaveOptionsDet eksponerer format-specifikke indstillinger såsom koordinat-system flydning og indholdstype af Selektion.
Åbent kilde og licensering
Aspose.3D FOSS for Java udgives under MIT-licens. Tilgængelig på GitHub 3D-FOSS for Java - Højhed. Du kan bruge, ændre og redistribuere biblioteket i kommercielle og Ikke-kommercielle projekter uden begrænsninger.
At blive startet
- Udviklerguide - Firevejs vandreture og Brug af mønstre
- Kendskabsbase Hvordan man skriver artikler og FAQ’er
- Færdeskab Reference - fuld klasse og Metode dokumentation