Į įžanginis įrašas, mes aptarėme, kas yra Aspose.3D FOSS for Java ir kaip pradėti. Šiame įraše gilinamasi į pagrindines funkcijas, sudarančias biblioteką, su kodo pavyzdžiais kiekvienai sričiai.

Visi pavyzdžiai daro prielaidą, kad naudojamas šis importas:

import com.aspose.threed.*;

Ir Maven priklausomybė:

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

Scenos grafiko API

Scenos grafikas yra Aspose pagrindas. 3D FOSS for Java. Kiekvienas 3D modelis – nesvarbu, ar įkeliamas iš failo, ar sukurtas programiškai – yra atvaizduojamas kaip medžio struktūra, kurio šaknys yra. Scene objektas.

Scena

Šis Scene class yra visų operacijų įėjimo taškas. Galite sukurti tuščią sceną arba įkelti ją iš failo:

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

Mazgo medžio šaknis pasiekiama per getRootNode().

Node

A Node žymi pavadintą poziciją scene tree. Nodes gali turėti vaikų, sudarant hierarchiją. Kiekvienas node neša vietinį Transform ir apskaičiuotas 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");

Taip pat galite sukurti mazgus nepriklausomai ir vėliau juos prijungti:

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

Entity ir Mesh

Vienas Entity yra abstrakti bazinė klasė bet kuriam, kas gali būti prisegta prie mazgo – geometrija, kameros ir šviesos. Dažniausias objektų tipas yra Mesh, kuriame yra poligoninė geometrija (viršūnės, veidai ir normalių vektoriai).

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

Kameros yra entitetai, kurie prijungiami prie mazgų:

Scene scene = new Scene();

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

Pastaba: The Camera klasė Java leidime yra minimalus stubas tik su konstruktoriais. Camera objektai, prisegti prie mazgų, yra neparašyta eksportuojant į glTF arba bet kurį kitą formatą — glTF eksportuotojas apdoroja tik Mesh objektus. Nesikliaukite, kad Camera duomenys bus išsaugoti eksportuojamuose failuose.

Pastaba: Šis Light klasė nėra prieinama Java leidime. Scenos apšvietimo duomenys iš importuotų failų saugomi kaip bendri Entity objektai.

Formatui nepriklausomas įkėlimas ir įrašymas

Viena iš bibliotekos stiprybių yra tai, kad scenų grafas yra nepriklausomas nuo formato. Įkeliate iš bet kurio palaikomo formato, manipuliuojate scena per vieną API ir įrašote į bet kurį palaikomą 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);

Formatas nustatomas pagal failo plėtinį. Taip pat galite perduoti aiškias įrašymo parinktis, kad kontroliuotumėte išvestį:

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

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

Medžiagos

Aspose.3D FOSS for Java suteikia PBR (Physically Based Rendering) medžiagų modelį per PbrMaterial. Tai yra vienintelė konkreti medžiagos klasė Java leidime.

PbrMaterial

Fizinės bazės atvaizdavimo medžiaga, kuri naudoja albedo, metalumo ir šiukšlumo parametrus. Tai yra standartinis medžiagų modelis glTF ir šiuolaikiniams realiojo laiko varikliams.

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

Medžiagų išsaugojimas tarp formatų priklauso nuo paskirties formato galimybių. PBR medžiagos natūraliai atitinka glTF ir GLB išvestį.

Transformacija ir erdvė

Kiekvienas Node scenos grafike turi Transform kuris apibrėžia jo padėtį, sukimosi kampą ir mastelį, susijusį su jo tėvu.

Vietinis 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

Bendras Transform

Šis GlobalTransform yra apskaičiuotas pasaulio erdvės transformavimas, atsižvelgiant į visą tėvų grandinę. Tai yra tik skaitymui ir atnaujinama automatiškai.

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

Ši tėvo-vaiko transformacijos paveldėjimo struktūra atitinka standartinį scenų grafo modelį, kurį naudoja 3D varikliai ir DCC įrankiai.

Matematinės priemonės

Biblioteka apima pagrindinius matematikos tipus 3D operacijoms.

Vector3

Trijų komponentų vektorius, naudojamas pozicijoms, kryptims, normalių vektorių ir spalvoms.

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 transformacijos matrica, skirta sujungti perkėlimą, sukimą ir mastelį į vieną operaciją.

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

Quaternion

Sukimo reprezentacija, kuri išvengia gimbal lock ir sklandžiai interpoliuoja. Quaternionai naudojami viduje transformacijos sistemos.

BoundingBox

Ašies lygiavietė ribinė dėžė erdviniams užklausoms, susidūrimų patikrinimams ir scenos analizei.

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

Pastaba: Node.getBoundingBox() ir Entity.getBoundingBox() dar nėra įgyvendintos. Abi grąžina tuščią BoundingBox (su sentinel Double.MAX_VALUE / Double.MIN_VALUE reikšmės) nepriklausomai nuo tinklelio geometrijos. Nenaudokite šių metodų faktiniams geometrijos ribų skaičiavimams šioje versijoje.

Žinomi apribojimai

Reikėtų pažymėti, kad Scene.render() yra nepalaikoma FOSS leidime. Iškvietus tai sukels an UnsupportedOperationException. Biblioteka sukurta failų pagrindu 3D apdorojimui – įkėlimui, transformavimui ir įrašymui – o ne realaus laiko atvaizdavimui.

Santrauka

Pagrindinės Aspose.3D FOSS Java savybės suskirstytos į penkias sritis:

SritisKlasėsPaskirtis
Scenos grafasScene, Node, Entity, Mesh, CameraHierarchinis modelio atvaizdavimas
FormataiĮkėlimo/Išsaugojimo parinktys OBJ, STL, glTF/GLB; Įkėlimas FBXFormatui nepriklausoma Įvestis/Išvestis
MedžiagosPbrMaterialPaviršiaus išvaizda (PBR)
TransformacijosTransform, GlobalTransformErdvinis pozicionavimas
MatematikaVector3, Matrix4, Quaternion, BoundingBox3D math primitives

Kitoje įraše mes pereisime prie praktinių formatų po formato pamokų, apimančių OBJ, STL, glTF ir FBX, su išsamiais įkėlimo ir išsaugojimo parametrais.