V úvodním příspěvku, jsme pokryli, co Aspose.3D FOSS pro Java je a jak začít. Tento příspěvek jde hlouběji do klíčových funkcí, které tvoří knihovnu, s ukázkami kódu pro každou oblast.

Všechny příklady předpokládají následující import:

import com.aspose.threed.*;

A Mavenová závislost:

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

API scénového grafu

Scénový graf je základem Aspose.3D FOSS pro Java. Každý 3D model – ať už načtený ze souboru nebo vytvořený programově – je reprezentován jako strom uzlů zakořeněný v Scene objektu.

Scéna

Třída Scene třída je vstupním bodem pro všechny operace. Můžete vytvořit prázdnou scénu nebo načíst jednu ze souboru:

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

Kořen stromu uzlů je přístupný přes getRootNode().

Uzel

A Node reprezentuje pojmenovanou pozici ve scénovém stromu. Uzly mohou mít potomky, čímž vytvářejí hierarchii. Každý uzel nese lokální Transform a vypočtený 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");

Můžete také vytvářet uzly nezávisle a připojit je později:

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

Entita a Mesh

An Entity je abstraktní základní třída pro cokoliv, co může být připojeno k uzlu – geometrie, kamery a světla. Nejčastějším typem entity je Mesh, který obsahuje polygonální geometrii (vrcholy, plochy a normály).

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

Kamery jsou entity, které se připojují k uzlům:

Scene scene = new Scene();

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

Definice kamer jsou zachovány při exportu do formátů, které je podporují (např. glTF).

Poznámka: The Light třída není k dispozici v edici Java. Data o osvětlení scény z importovaných souborů jsou uložena jako obecné Entity objekty.

Načítání a ukládání nezávislé na formátu

Jednou ze silných stránek knihovny je, že graf scény je nezávislý na formátu. Načtete z libovolného podporovaného formátu, manipulujete se scénou pomocí jediné API a uložíte do libovolného podporovaného formátu.

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

Formát je určen příponou souboru. Můžete také předat explicitní možnosti ukládání pro kontrolu výstupu:

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

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

Materiály

Aspose.3D FOSS pro Java poskytuje model materiálu PBR (Physically Based Rendering) prostřednictvím PbrMaterial. Toto je jediná konkrétní třída materiálu v edici Java.

PbrMaterial

Materiál založený na fyzikálně založeném renderování, který používá parametry albedo, metalnost a drsnost. Jedná se o standardní model materiálu pro glTF a moderní real‑time enginy.

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

Zachování materiálu napříč formáty závisí na schopnostech cílového formátu. PBR materiály se přirozeně mapují na výstup glTF a GLB.

Transform a Spatial

Každý Node v grafu scény má Transform který určuje jeho polohu, rotaci a měřítko relativně k jeho rodiči.

Lokální transformace

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

Globální transformace

Tento GlobalTransform je vypočtená transformace ve světovém prostoru, která zohledňuje celý řetězec rodičů. Toto je jen pro čtení a aktualizuje se automaticky.

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

Toto dědění transformací mezi rodičem a potomkem následuje standardní vzor grafu scény používaný 3D enginy a nástroji DCC.

Math Utilities

Knihovna obsahuje základní matematické typy pro 3D operace.

Vector3

Trojkomponentový vektor používaný pro pozice, směry, normály a barvy.

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

4x4 transformační matice pro kombinaci translace, rotace a měřítka do jediné operace.

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

Quaternion

Reprezentace rotace, která zabraňuje gimbal locku a interpoluje plynule. Kvaterniony jsou interně používány transformačním systémem.

BoundingBox

Osa‑zarovnaná BoundingBox pro prostorové dotazy, kontrolu kolizí a analýzu scény.

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

Známá omezení

Stojí za zmínku, že Scene.render() je není podporováno v edici FOSS. Volání vyvolá UnsupportedOperationException. Knihovna je navržena pro souborově založené 3D zpracování – načítání, transformaci a ukládání – spíše než pro renderování v reálném čase.

Shrnutí

Klíčové funkce Aspose.3D FOSS pro Java se dělí do pěti oblastí:

OblastTřídyÚčel
Graf scényScene, Node, Entity, Mesh, CameraHierarchické modelové znázornění
FormátyMožnosti načítání/ukládání pro OBJ, STL, glTF/GLB; načítání pro FBXFormátově agnostický I/O
MateriályPbrMaterialVzhled povrchu (PBR)
TransformaceTransform, GlobalTransformProstorové umístění
MatematikaVector3, Matrix4, Quaternion, BoundingBox3D math primitives

V dalším příspěvku projdeme praktické tutoriály formát po formátu, které pokrývají OBJ, STL, glTF a FBX s podrobnými možnostmi načítání a ukládání.