Ievads
Darbs ar 3D saturu Java parasti prasa izvēlēties starp smagajiem spēļu dzinējiem un minimālām matemātikas bibliotēkām. The aspose-3d-foss pakotne piedāvā kompromisu: koncentrētu scene-graph API, kas apstrādā failu I/O, mezglu hierarhijas, mesh konstrukciju un koordinātu pārveidojumus, neiesaistot renderēšanu pipeline vai vietējo atkarību ķēdi.
Aspose.3D FOSS priekš Java ir atvērtā koda bibliotēka, kas izplatīta zem MIT licences. Tā nodrošina 80 klases, kas aptver ainu pārvaldību, ģeometriju, materiālus un formātu konvertēšanu. Bibliotēka lasa FBX, glTF/GLB, Wavefront OBJ un STL, un raksta glTF/GLB, OBJ un STL (FBX eksportēšana nav īstenota), padarot to praktisku servera pusē 3D apstrādei, build-tool integrācijām un datu konvertēšanas cauruļvadiem, kas darbojas uz Java 21 vai jaunākiem.
Šis raksts izskaidro ainu pārvaldības iespējas bibliotēkā: kā izveidot ainu no nulles, piepildīt to ar ģeometriju un transformācijām, un eksportēt rezultātu uz disku.
Kas iekļauts
Scene Graph pamati
The Scene klase ir saknes konteineris katram 3D dokumentam. Tā satur root Node, resursu metadati, animācijas klipi un apakšskati. Jūs varat izveidot tukšu skatu un pēc tam to aizpildīt, vai ielādēt esošu failu ar Scene.fromFile.
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
Scene scene = new Scene();
Node root = scene.getRootNode();
// Add named child nodes to build a hierarchy
Node chassis = root.createChildNode("Chassis");
Node wheel = chassis.createChildNode("FrontLeftWheel");
Katrs Node var saturēt Entity (piemēram Mesh vai Camera), Transform, materiālu saraksts, un papildu bērna mezgli. Koka struktūra atspoguļo ainas grafika modeli, ko izmanto vairums 3D autorēšanas rīku.
Mesh konstrukcija
Klase Mesh klase ļauj definēt ģeometriju no kontroles punktiem un poligona indeksi. Jūs pievienojat virsotnes ar addControlPoint, tad savienojiet tos sejas ar createPolygon.
import com.aspose.threed.Mesh;
Mesh box = new Mesh("Box");
// Define eight corners of a cube
box.addControlPoint(0, 0, 0);
box.addControlPoint(1, 0, 0);
box.addControlPoint(1, 1, 0);
box.addControlPoint(0, 1, 0);
box.addControlPoint(0, 0, 1);
box.addControlPoint(1, 0, 1);
box.addControlPoint(1, 1, 1);
box.addControlPoint(0, 1, 1);
// Create quad faces
box.createPolygon(0, 1, 2, 3); // back
box.createPolygon(4, 5, 6, 7); // front
box.createPolygon(0, 4, 7, 3); // left
box.createPolygon(1, 5, 6, 2); // right
box.createPolygon(3, 2, 6, 7); // top
box.createPolygon(0, 1, 5, 4); // bottom
scene.getRootNode().createChildNode("Box", box);
Mesh API ietver triangulate(), optimize(removeVertices), un Būla operācijas (union, difference, intersect), bet šīs metodes ir stubi in pašreizējā izlaidumā — tās atgriež ievades mesh klonu, neveicot norādīto operāciju.
Transformācijas un pozicionēšana
Katrs Node nesatur a Transform kas kontrolē tās lokālo pārvietošanu, rotāciju, un mērogu. Tie tiek apvienoti hierarhijā, tāpēc pārvietojot vecāka mezglu pārvieto visus tā bērnus.
import com.aspose.threed.Transform;
import com.aspose.threed.Node;
Node node = scene.getRootNode().createChildNode("Shifted");
Transform t = node.getTransform();
t.setTranslation(5.0, 0.0, -3.0);
t.setScale(2.0, 2.0, 2.0);
t.setEulerAngles(0, 45.0, 0);
Absolūto pozicionēšanas vaicājumiem izsauciet node.getGlobalTransform() lai izgūtu sastāvošo GlobalTransform, vai node.evaluateGlobalTransform(true) lai iegūtu Matrix4 kas ietver ģeometriskos nobīdes.
PBR materiāli
Šī PbrMaterial klase nodrošina fiziski balstītas renderēšanas īpašības: albedo krāsa, metāla faktors, raušums, emisijas krāsa un caurspīdīgums. Piešķir materiālu mezglam, izveidojot bērnu.
import com.aspose.threed.PbrMaterial;
import com.aspose.threed.Vector4;
import com.aspose.threed.Vector3;
PbrMaterial mat = new PbrMaterial("RedMetal");
mat.setAlbedo(new Vector4(0.9, 0.1, 0.1, 1.0));
mat.setMetallicFactor(0.8);
mat.setRoughnessFactor(0.3);
mat.setEmissiveColor(new Vector3(0, 0, 0));
scene.getRootNode().createChildNode("Part", box, mat);
Formāta noteikšana
The FileFormat klase nodrošina statiskas meklēšanas un noteikšanas utilītes. Jūs varat noteikt formātu pēc faila paplašinājuma vai pārbaudīt plūsmu, lai identificētu nezināmus failus.
import com.aspose.threed.FileFormat;
FileFormat fmt = FileFormat.getFormatByExtension("model.glb");
boolean canRead = fmt.getCanImport();
boolean canWrite = fmt.getCanExport();
Koordinātu sistēmas konvertēšana
AxisSystem ļauj definēt augšas asi, priekšas asi un rokturi koordinātu sistēmu, pēc tam aprēķināt a Matrix4 lai pārveidotu ģeometriju starp konvencijām (piemēram, no Z-augšas labro roktura sistēmas uz Y-augšas kreiso roktura).
import com.aspose.threed.AxisSystem;
import com.aspose.threed.Axis;
import com.aspose.threed.CoordinateSystem;
import com.aspose.threed.Matrix4;
AxisSystem source = new AxisSystem(
CoordinateSystem.RIGHT_HANDED, Axis.Z_AXIS, Axis.Y_AXIS);
AxisSystem target = new AxisSystem(
CoordinateSystem.LEFT_HANDED, Axis.Y_AXIS, Axis.Z_AXIS);
Matrix4 conversion = source.transformTo(target);
Ātrais sākums
Pievienojiet Maven atkarību:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Izveidojiet vienkāršu ainu un eksportējiet to:
import com.aspose.threed.Scene;
import com.aspose.threed.Mesh;
import com.aspose.threed.Node;
import com.aspose.threed.StlSaveOptions;
import com.aspose.threed.FileContentType;
Scene scene = new Scene();
Mesh mesh = new Mesh("Triangle");
mesh.addControlPoint(0, 0, 0);
mesh.addControlPoint(1, 0, 0);
mesh.addControlPoint(0, 1, 0);
mesh.createPolygon(0, 1, 2);
scene.getRootNode().createChildNode("Shape", mesh);
StlSaveOptions opts = new StlSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("output.stl", opts);
Atbalstītie formāti
| Formāts | Paplašinājums | Lasīt | Rakstīt |
|---|---|---|---|
| FBX (ASCII un Binary, 6.x-7.x) | .fbx | Jā | Nē |
| glTF 1.0 / 2.0 | .gltf | Jā | Jā |
| glTF Binary | .glb | Jā | Jā |
| Wavefront OBJ | .obj | Jā | Jā |
| STL (ASCII un binārs) | .stl | Jā | Jā |
Katram formātam ir piešķirts LoadOptions un SaveOptions apakšklases (par piemēram, FbxLoadOptions, GltfSaveOptions, StlSaveOptions) kas atklāj formāta specifiski iestatījumi, piemēram, koordinātu sistēmas apgriešana un satura veids izvēle.
Atvērtā pirmkods & licencēšana
Aspose.3D FOSS for Java ir izlaists zem MIT licences. Avota kods ir pieejams GitHub vietnē Aspose.3D-FOSS-for-Java. Jūs varat izmantot, modificēt un izplatīt bibliotēku komerciālos un nekomerciālos projektos bez ierobežojumiem.
Sākums
- Izstrādātāja rokasgrāmata – API pārskati un lietojuma modeļi
- Zināšanu bāze – Pamācības un BUJ
- API atsauce – Pilna klase un metodes dokumentācija