Šajā ievaddaļas ziņojums, mēs apskatījām, kas Aspose.3D FOSS for Java ir un kā sākt. Šis ziņojums dziļāk aplūko galvenās funkcijas, kas veido bibliotēku, ar koda piemēriem katram laukam.

Visu piemēru pieņem sekojošu importu:

import com.aspose.threed.*;

Un Maven atkarību:

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

Scēnas grafika API

Ainas grafiks ir Aspose.3D FOSS for Java pamats. Katrs 3D modelis – neatkarīgi no tā, vai tas ir ielādēts no faila vai izveidots programmatiski – tiek attēlots kā mezglu koks, kura sakne ir Scene objekts.

Scēna

Klase Scene klase ir ieejas punkts visām operācijām. Jūs varat izveidot tukšu ainu vai ielādēt to no faila:

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

Mezglu koka sakne tiek piekļūta caur getRootNode().

Mezgls

A Node pārstāv nosauktu pozīciju ainas kokā. Mezgli var būt ar bērniem, veidojot hierarhiju. Katrs mezgls nes lokālu Transform un aprēķinātu 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");

Jūs varat arī konstruēt mezglus neatkarīgi un pievienot tos vēlāk:

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

Entity un Mesh

Viens Entity ir abstrakta pamata klase visam, kas var tikt pievienots mezglam — ģeometrija, kameras un gaismas. Visbiežāk sastopamais vienību veids ir Mesh, kas satur daudzstūru ģeometriju (virsotnes, sejas un normāles).

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

Kameras ir entītijas, kas tiek pievienotas mezgliem:

Scene scene = new Scene();

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

Piezīme: Šī Camera klase Java izdevumā ir minimāls stubbs tikai ar konstruktoriem. Kameru vienības, kas pievienotas mezgliem, ir nav rakstītas eksportējot uz glTF vai jebkuru citu formātu — glTF eksportētājs apstrādā tikai Mesh vienības. Neuzticieties, ka kameras dati tiks saglabāti eksportētajos failos.

Piezīme: Šis Light klase nav pieejama Java izdevumā. Ainas apgaismojuma dati no importētajiem failiem tiek saglabāti kā vispārīgi Entity objekti.

Formāta neatkarīga ielāde un saglabāšana

Viena no bibliotēkas stiprajām pusēm ir tas, ka ainas grafs ir formāta neatkarīgs. Jūs ielādējat no jebkura atbalstīta formāta, manipulējat ar ainu caur vienu API un saglabājat jebkura atbalstīta formāta.

// 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āts tiek noteikts pēc faila paplašinājuma. Jūs varat arī nodot konkrētas saglabāšanas opcijas, lai kontrolētu izvadi:

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

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

Materiāli

Aspose.3D FOSS priekš Java nodrošina PBR (Fiziski balstīta renderēšana) materiāla modeli caur PbrMaterial. Tas ir vienīgā konkrētā materiālu klase Java izdevumā.

PbrMaterial

Fiziski balstīts renderēšanas materiāls, kas izmanto albedo, metālisma un raupjuma parametrus. Šis ir standarta materiālu modelis glTF un mūsdienīgām reāllaika dzinējām.

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

Materiālu saglabāšana starp formātiem ir atkarīga no mērķa formāta iespējas. PBR materiāli dabiski tiek kartēti uz glTF un GLB izvadi.

Transformācija un Telpiskums

Katrs Node scēnas grafā ir Transform kas definē tā pozīciju, rotāciju un mērogu attiecībā pret vecāku.

Lokālā transformācija

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ālā transformācija

Tas GlobalTransform ir aprēķinātā pasaules telpas transformācija, ņemot vērā visu vecāku ķēdi. Tas ir tikai lasāms un atjaunojas automātiski.

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

Šī vecāku-bērnu transformācijas mantošana seko standartam ainas grafu shēmai, ko izmanto 3D dzinēji un DCC rīki.

Matemātikas utilītprogrammas

Bibliotēka ietver pamatmatemātikas tipus 3D operācijām.

Vector3

Trīskomponentu vektors, ko izmanto pozīcijām, virzieniem, normālām un krāsām.

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 transformācijas matrica, kas apvieno translāciju, rotāciju un mērogu vienā operācijā.

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

Quaternion

Rotācijas reprezentācija, kas novērš gimbal lock un interpolē gludi. Kvaternioni tiek izmantoti iekšēji transformācijas sistēmā.

BoundingBox

Asiāli izlīdzināta robežkaste telpiskām vaicājumiem, sadursmju pārbaudēm un ainas analīzei.

BoundingBox bbox = new BoundingBox();
// BoundingBox can be constructed directly with min/max Vector3 values

Piezīme: Node.getBoundingBox() un Entity.getBoundingBox() vēl nav ieviesti. Abi atgriež tukšu BoundingBox (ar sentinel Double.MAX_VALUE / Double.MIN_VALUE vērtības) neatkarīgi no režģa ģeometrijas. Neizmantojiet šīs metodes, lai aprēķinātu faktiskos ģeometrijas robežus šajā versijā.

Zināmie ierobežojumi

Ir vērts atzīmēt, ka Scene.render() ir nav atbalstīts FOSS izdevumā. Izsaucot to, tiks izraisīta UnsupportedOperationException. Bibliotēka ir paredzēta failu bāzētai 3D apstrādei — ielādei, transformēšanai un saglabāšanai — nevis reāllaika renderēšanai.

Kopsavilkums

Galvenās Aspose.3D FOSS Java funkcijas sadalās piecās jomās:

JomaKlasesMērķis
Ainas grafiksScene, Node, Entity, Mesh, CameraHierarhiska modeļa attēlojums
FormātiIelādes/saglabāšanas iespējas OBJ, STL, glTF/GLB; Ielāde FBXFormātam neatkarīga I/O
MateriāliPbrMaterialVirsmu izskats (PBR)
TransformācijasTransform, GlobalTransformTelpiskā pozicionēšana
MatemātikaVector3, Matrix4, Quaternion, BoundingBox3D math primitives

Nākamajā rakstā mēs soli pa solim izskatīsim praktiskus formāta pa formātam pamācības, kas aptver OBJ, STL, glTF un FBX, ar detalizētām ielādes un saglabāšanas opcijām.