In the esittelypostaus, me käsittelimme mitä Aspose.3D FOSS for Java on ja miten aloittaa. Tämä postaus menee syvemmälle kirjaston keskeisiin ominaisuuksiin, sisältäen koodiesimerkkejä jokaisesta alueesta.
Kaikki esimerkit olettavat seuraavan tuonnin:
import com.aspose.threed.*;
Ja Maven-riippuvuus:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Scene Graph -API
Kohtausgrafiikka on Aspose.3D FOSS for Java perusta. Jokainen 3D-malli – olipa se ladattu tiedostosta tai rakennettu ohjelmallisesti – esitetään solmujen puuna, jonka juuri on Scene objekti.
Scene
Luokka Scene luokka on sisäänkäynti kaikille toiminnoille. Voit luoda tyhjän kohtauksen tai ladata sen tiedostosta:
// 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());
Solmupuun juuri on saavutettavissa kautta getRootNode().
Node
A Node edustaa nimettyä sijaintia kohtauspuussa. Solmuilla voi olla lapsia, muodostaen hierarkian. Jokainen solmu kantaa paikallista Transform ja laskettua 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");
Voit myös luoda solmuja itsenäisesti ja liittää ne myöhemmin:
Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);
Entity ja Mesh
An Entity on abstrakti perusluokka kaikelle, mikä voidaan liittää solmuun – geometria, kamerat ja valot. Yleisin entiteettityyppi on Mesh, joka sisältää polygonigeometrian (kärjet, pinnat ja normaalit).
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());
}
}
Camera
Kamerat ovat solmuihin liitettäviä entityjä:
Scene scene = new Scene();
Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node
Huomaa: The Camera luokka Java -versiossa on minimaalinen stub, jossa on vain konstruktorit. Kameraentiteetit, jotka on liitetty solmuihin, ovat ei kirjoitettu kun viedään glTF-muotoon tai mihin tahansa muuhun formaattiin — glTF-vientityökalu käsittelee vain Mesh entiteettejä. Älä luota siihen, että kamera‑data säilyy viedyissä tiedostoissa.
Huomautus: Se Light luokka ei ole saatavilla Java-versiossa. Tuodusta tiedostoista peräisin oleva valaistustieto tallennetaan geneerisinä Entity objekteina.
Formaattiriippumaton lataus ja tallennus
Yksi kirjaston vahvuuksista on, että kohtausgrafi on formaattiriippumaton. Lataat mistä tahansa tuetusta formaatista, muokkaat kohtauksen yhden API:n kautta ja tallennat mihin tahansa tuettuun formaattiin.
// 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);
Formaatti määräytyy tiedostopäätteen perusteella. Voit myös antaa eksplisiittisiä tallennusasetuksia ohjataksesi tulostetta:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Materiaalit
Aspose.3D FOSS for Java tarjoaa PBR (Physically Based Rendering) -materiaalimallin kautta PbrMaterial. Tämä on ainoa konkreettinen materiaaliluokka Java-versiossa.
PbrMaterial
Fysiikassa perustuva renderöintimateriaali, joka käyttää albedo-, metallisuus- ja karheusparametreja. Tämä on glTF:n ja nykyaikaisten reaaliaikaisten moottoreiden standardimateriaalimalli.
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
Materiaalin säilyminen eri formaattien välillä riippuu kohdeformaatin ominaisuuksista. PBR-materiaalit kartoittuvat luonnollisesti glTF- ja GLB-tulosteisiin.
Transformaatio ja Spatial
Jokainen Node kohtausgraafissa on Transform joka määrittelee sen sijainnin, kierron ja mittakaavan suhteessa sen vanhempaan.
Paikallinen transformaatio
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
Globaalinen transformaatio
Se GlobalTransform on laskettu maailmanavaruuden muunnos, joka ottaa huomioon koko vanhempaketjun. Tämä on vain luku -tilassa ja päivittyy automaattisesti.
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();
Tämä vanhempi‑lapsi -transformaation periytyminen noudattaa 3D-moottoreissa ja DCC-työkaluissa käytettyä standardista kohtausgrafiikkamallia.
Matematiikkatyökalut
Kirjasto sisältää ydinnumeeriset matemaattiset tyypit 3D-toiminnoille.
Vector3
Kolmikomponenttinen vektori, jota käytetään sijainteihin, suuntiin, normaalivektoreihin ja väreihin.
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-muunnosmatriisi, jonka avulla yhdistetään siirto, kierto ja skaalaus yhdeksi toimenpiteeksi.
Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform
Quaternion
Kiertojen esitys, joka välttää gimbal lock -ongelman ja interpoloi sujuvasti. Quaternioneja käytetään sisäisesti muunnossysteemissä.
BoundingBox
Akselien suuntaisesti kohdistettu BoundingBox tilakyselyihin, törmäystarkistuksiin ja kohtauksen analysointiin.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be constructed directly with min/max Vector3 values
Huomautus: Node.getBoundingBox() ja Entity.getBoundingBox() eivät ole vielä toteutettu. Molemmat palauttavat tyhjän BoundingBox (sentinel-arvoineen Double.MAX_VALUE / Double.MIN_VALUE arvot) riippumatta verkon geometriasta. Älä käytä näitä metodeja todellisten geometrinen raja-arvojen laskemiseen tässä versiossa.
Tunnetut rajoitukset
On syytä huomata, että Scene.render() on ei ole tuettu FOSS-versiossa. Kutsuminen aiheuttaa poikkeuksen UnsupportedOperationException. Kirjasto on suunniteltu tiedostopohjaiseen 3D-käsittelyyn – lataamiseen, muuntamiseen ja tallentamiseen – eikä reaaliaikaiseen renderöintiin.
Yhteenveto
Keskeiset ominaisuudet Aspose.3D FOSS:lle Java jakautuvat viiteen osa-alueeseen:
| Alue | Luokat | Tarkoitus |
|---|---|---|
| Kohtausgrafi | Scene, Node, Entity, Mesh, Camera | Hierarkkinen mallin esitys |
| Formaatit | Lataus-/tallennusvaihtoehdot OBJ:lle, STL:lle, glTF/GLB:lle; lataus FBX:lle | Formaattiriippumaton I/O |
| Materiaalit | PbrMaterial | Pinnan ulkonäkö (PBR) |
| Muunnokset | Transform, GlobalTransform | Tilallinen sijoittelu |
| Matematiikka | Vector3, Matrix4, Quaternion, BoundingBox | 3D math primitives |
Seuraavassa julkaisussa käymme läpi käytännön formaatti-kohtaiset tutoriaalit, jotka kattavat OBJ:n, STL:n, glTF:n ja FBX:n sekä yksityiskohtaiset lataus- ja tallennusvaihtoehdot.