Į įvadinis įrašas, mes aptarėme, kas yra Aspose.3D FOSS for Java ir kaip pradėti. Šiame įraše gilinamasi į pagrindines savybes, kurios sudaro biblioteką, su kodo pavyzdžiais kiekvienai sričiai.
Visi pavyzdžiai daro prielaidą, kad yra š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.3D FOSS for Java pagrindas. Kiekvienas 3D modelis – nesvarbu, ar įkeliamas iš failo, ar sukuriamas programiškai – yra vaizduojamas kaip mazgų medis, kurio šaknis yra Scene objektas.
Scena
Klasė Scene klasė yra įėjimo taškas visoms operacijoms. 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 šaknies prieiga gaunama per getRootNode().
Mazgas
A Node reiškia pavadintą poziciją scenos medyje. Mazgai gali turėti vaikų, sudarant hierarchiją. Kiekvienas mazgas turi vietinį Transform ir apskaičiuotą 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 savarankiškai ir vėliau juos prijungti:
Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);
Entity ir Mesh
An Entity yra abstrakti bazinė klasė bet kuriam objektui, kurį galima prisegti prie mazgo – geometrijai, kameroms ir šviesoms. Dažniausia objektų tipas yra Mesh, kuri saugo poligoninę geometriją (viršūnes, veidus ir normalės).
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
Kamerų apibrėžimai išsaugomi eksportuojant į formatus, kurie juos palaiko (pvz., glTF).
Pastaba: The Light klasė nėra prieinama Java leidime. Scenos apšvietimo duomenys iš importuotų failų saugomi kaip bendriniai 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 roughness parametrus. Tai yra standartinis medžiagų modelis glTF ir šiuolaikiniams realaus 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į, sukimo kampą ir mastelį, susijusius su 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
Globalus Transform
Šis GlobalTransform yra apskaičiuota pasaulio erdvės transformacija, atsižvelgiant į visą tėvų grandinę. Tai yra tik skaitymui skirta 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ų grafų 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, normalioms 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 atvaizdavimas, kuris išvengia gimbal lock ir sklandžiai interpoliuoja. Kvaternionai yra 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 computed from mesh geometry
Žinomi apribojimai
Reikėtų pažymėti, kad Scene.render() yra nepalaikoma FOSS leidime. Iškvietus tai sukels an UnsupportedOperationException. Biblioteka sukurta failų pagrindu veikiančiam 3D apdorojimui – įkėlimui, transformavimui ir išsaugojimui – o ne realaus laiko renderavimui.
Santrauka
Pagrindinės Aspose.3D FOSS Java savybės suskirstytos į penkias sritis:
| Sritis | Klasių | Tikslas |
|---|---|---|
| Scenos grafikas | Scene, Node, Entity, Mesh, Camera | Hierarchinis modelio atvaizdavimas |
| Formatai | Įkėlimo/Išsaugojimo parinktys OBJ, STL, glTF/GLB; Įkėlimas FBX | Formatui nepriklausomas I/O |
| Medžiagos | PbrMaterial | Paviršiaus išvaizda (PBR) |
| Transformacijos | Transform, GlobalTransform | Erdvinė padėtis |
| 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.