Į įž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:
| Sritis | Klasės | Paskirtis |
|---|---|---|
| Scenos grafas | Scene, Node, Entity, Mesh, Camera | Hierarchinis modelio atvaizdavimas |
| Formatai | Įkėlimo/Išsaugojimo parinktys OBJ, STL, glTF/GLB; Įkėlimas FBX | Formatui nepriklausoma Įvestis/Išvestis |
| Medžiagos | PbrMaterial | Paviršiaus išvaizda (PBR) |
| Transformacijos | Transform, GlobalTransform | Erdvinis pozicionavimas |
| Matematika | Vector3, Matrix4, Quaternion, BoundingBox | 3D 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.