I introduktionsinlägg, vi täckte vad Aspose.3D FOSS för Java är och hur man kommer igång. Detta inlägg går djupare in på nyckelfunktionerna som utgör biblioteket, med kodexempel för varje område.

Alla exempel förutsätter följande import:

import com.aspose.threed.*;

Och Maven‑beroendet:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

Scengraf‑API

Scengrafen är grunden för Aspose.3D FOSS för Java. Varje 3D-modell – oavsett om den laddas från en fil eller byggs programmässigt – representeras som ett träd av noder med rot i en Scene objekt.

Scen

Klassen Scene klass är ingångspunkten för alla operationer. Du kan skapa en tom scen eller ladda en från en fil:

// Empty scene
Scene scene = new Scene();

// Load from file
Scene loaded = Scene.fromFile("model.obj");

// Load with explicit options
Scene fromStl = Scene.fromFile("part.stl", new StlLoadOptions());

Roten av nodträdet nås via getRootNode().

Nod

En Node representerar en namngiven position i scenträdet. Noder kan ha barn, vilket bildar en hierarki. Varje nod bär en lokal Transform och en beräknad GlobalTransform.

Scene scene = new Scene();

// Create a child node under the root
Node box = scene.getRootNode().createChildNode("Box");

// Create a nested hierarchy
Node arm = scene.getRootNode().createChildNode("Arm");
Node hand = arm.createChildNode("Hand");
Node finger = hand.createChildNode("Finger");

Du kan också konstruera noder oberoende och fästa dem senare:

Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);

Entitet och Mesh

En Entity är en abstrakt basklass för allt som kan fästas på en nod – geometri, kameror och ljus. Den vanligaste entitetstypen är Mesh, som innehåller polygonal geometri (vertexar, ytor och normaler).

Scene scene = Scene.fromFile("cube.obj");

// Traverse nodes and inspect entities
for (Node child : scene.getRootNode().getChildNodes()) {
    Entity entity = child.getEntity();
    if (entity instanceof Mesh) {
        Mesh mesh = (Mesh) entity;
        System.out.println("Node: " + child.getName());
        System.out.println("  Vertices: " + mesh.getControlPoints().size());
    }
}

Kamera

Kameror är entiteter som fästs på noder:

Scene scene = new Scene();

Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node

Kameradefinitioner bevaras när man exporterar till format som stödjer dem (såsom glTF).

Obs: Den Light klassen är inte tillgänglig i Java editionen. Scenbelysningsdata från importerade filer lagras som generiska Entity objekt.

Formatoberoende inläsning och sparning

En av bibliotekets styrkor är att scengrafen är formatoberoende. Du läser in från vilket som helst stödjat format, manipulerar scenen via ett enda API och sparar till vilket som helst stödjat format.

// Load OBJ, save as glTF
Scene scene = Scene.fromFile("input.obj");
scene.save("output.gltf");

// Load FBX, save as STL (FBX is import only)
Scene scene2 = Scene.fromFile("character.fbx");
scene2.save("character.stl");

// Load STL, save as GLB
Scene scene3 = Scene.fromFile("part.stl", new StlLoadOptions());
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene3.save("part.glb", opts);

Formatet bestäms av filändelsen. Du kan också skicka explicita sparalternativ för att styra utdata:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

Material

Aspose.3D FOSS för Java tillhandahåller en PBR (Physically Based Rendering) materialmodell via PbrMaterial. Detta är den enda konkreta materialklassen i Java editionen.

PbrMaterial

Ett fysiskt baserat renderingsmaterial som använder albedo-, metalness- och roughness-parametrar. Detta är den standardmaterialmodell som används för glTF och moderna realtidsmotorer.

PbrMaterial pbr = new PbrMaterial();
pbr.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0)); // Red-ish base color
pbr.setMetallicFactor(0.0);  // Non-metallic
pbr.setRoughnessFactor(0.5); // Medium roughness

Materialbevarande över format beror på målformatets möjligheter. PBR-material mappas naturligt till glTF- och GLB-utdata.

Transform och Spatial

Varje Node i scengrafen har en Transform som definierar dess position, rotation och skala relativt dess förälder.

Lokal Transform

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("TestNode");

Transform t = node.getTransform();
t.setTranslation(1, 2, 3);       // Position
t.setScale(2, 2, 2);             // Uniform scale
t.setEulerAngles(0, 45, 0);      // Euler rotation in degrees

Global Transform

Den GlobalTransform är den beräknade världsrumstransformen, som tar hänsyn till hela föräldrakedjan. Den är skrivskyddad och uppdateras automatiskt.

Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);

Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);

// Child's global position is (15, 0, 0)
GlobalTransform global = child.getGlobalTransform();

Denna förälder‑barn-transformarv följer det standardmönster för scengraf som används av 3D-motorer och DCC-verktyg.

Matematikverktyg

Biblioteket innehåller grundläggande matematiska typer för 3D-operationer.

Vector3

En trekomponentsvektor som används för positioner, riktningar, normaler och färger.

Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);

// Addition
Vector3 sum = Vector3.add(a, b); // (1, 1, 0)

Matrix4

En 4x4 transformationsmatris för att kombinera translation, rotation och skalning i en enda operation.

Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform

Quaternion

En rotationsrepresentation som undviker gimbal lock och interpolerar mjukt. Kvaternioner används internt av transformsystemet.

BoundingBox

En axeljusterad avgränsningslåda för rumsliga frågor, kollisionskontroller och scenanalys.

BoundingBox bbox = new BoundingBox();
// BoundingBox can be computed from mesh geometry

Kända begränsningar

Det är värt att notera att Scene.render() är stöds inte i FOSS-utgåvan. Att anropa den kommer att kasta ett UnsupportedOperationException. Biblioteket är utformat för filbaserad 3D-behandling — inläsning, transformering och sparande — snarare än realtidsrendering.

Sammanfattning

De viktigaste funktionerna i Aspose.3D FOSS för Java kan delas in i fem områden:

OmrådeKlasserSyfte
ScengrafScene, Node, Entity, Mesh, CameraHierarkisk modellrepresentation
FormatLäs/skriv-alternativ för OBJ, STL, glTF/GLB; Läs för FBXFormatagnostisk I/O
MaterialPbrMaterialYtans utseende (PBR)
TransformationerTransform, GlobalTransformRumsplacering
MatematikVector3, Matrix4, Quaternion, BoundingBox3D math primitives

I nästa inlägg kommer vi att gå igenom praktiska format-för-format-tutorials som täcker OBJ, STL, glTF och FBX med detaljerade inläsnings- och sparalternativ.