Šajā ievaddaļas ziņojums, mēs apskatījām, kas Aspose.3D FOSS for Java ir un kā sākt. Šis ziņojums dziļāk aplūko galvenās funkcijas, kas veido bibliotēku, ar koda piemēriem katram laukam.
Visu piemēru pieņem sekojošu importu:
import com.aspose.threed.*;
Un Maven atkarību:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Scēnas grafika API
Ainas grafiks ir Aspose.3D FOSS for Java pamats. Katrs 3D modelis – neatkarīgi no tā, vai tas ir ielādēts no faila vai izveidots programmatiski – tiek attēlots kā mezglu koks, kura sakne ir Scene objekts.
Scēna
Klase Scene klase ir ieejas punkts visām operācijām. Jūs varat izveidot tukšu ainu vai ielādēt to no faila:
// 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());
Mezglu koka sakne tiek piekļūta caur getRootNode().
Mezgls
A Node pārstāv nosauktu pozīciju ainas kokā. Mezgli var būt ar bērniem, veidojot hierarhiju. Katrs mezgls nes lokālu Transform un aprēķinātu 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");
Jūs varat arī konstruēt mezglus neatkarīgi un pievienot tos vēlāk:
Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);
Entity un Mesh
Viens Entity ir abstrakta pamata klase visam, kas var tikt pievienots mezglam — ģeometrija, kameras un gaismas. Visbiežāk sastopamais vienību veids ir Mesh, kas satur daudzstūru ģeometriju (virsotnes, sejas un normāles).
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
Kameras ir entītijas, kas tiek pievienotas mezgliem:
Scene scene = new Scene();
Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node
Piezīme: Šī Camera klase Java izdevumā ir minimāls stubbs tikai ar konstruktoriem. Kameru vienības, kas pievienotas mezgliem, ir nav rakstītas eksportējot uz glTF vai jebkuru citu formātu — glTF eksportētājs apstrādā tikai Mesh vienības. Neuzticieties, ka kameras dati tiks saglabāti eksportētajos failos.
Piezīme: Šis Light klase nav pieejama Java izdevumā. Ainas apgaismojuma dati no importētajiem failiem tiek saglabāti kā vispārīgi Entity objekti.
Formāta neatkarīga ielāde un saglabāšana
Viena no bibliotēkas stiprajām pusēm ir tas, ka ainas grafs ir formāta neatkarīgs. Jūs ielādējat no jebkura atbalstīta formāta, manipulējat ar ainu caur vienu API un saglabājat jebkura atbalstīta formāta.
// 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);
Formāts tiek noteikts pēc faila paplašinājuma. Jūs varat arī nodot konkrētas saglabāšanas opcijas, lai kontrolētu izvadi:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Materiāli
Aspose.3D FOSS priekš Java nodrošina PBR (Fiziski balstīta renderēšana) materiāla modeli caur PbrMaterial. Tas ir vienīgā konkrētā materiālu klase Java izdevumā.
PbrMaterial
Fiziski balstīts renderēšanas materiāls, kas izmanto albedo, metālisma un raupjuma parametrus. Šis ir standarta materiālu modelis glTF un mūsdienīgām reāllaika dzinējām.
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
Materiālu saglabāšana starp formātiem ir atkarīga no mērķa formāta iespējas. PBR materiāli dabiski tiek kartēti uz glTF un GLB izvadi.
Transformācija un Telpiskums
Katrs Node scēnas grafā ir Transform kas definē tā pozīciju, rotāciju un mērogu attiecībā pret vecāku.
Lokālā transformācija
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
Globālā transformācija
Tas GlobalTransform ir aprēķinātā pasaules telpas transformācija, ņemot vērā visu vecāku ķēdi. Tas ir tikai lasāms un atjaunojas automātiski.
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();
Šī vecāku-bērnu transformācijas mantošana seko standartam ainas grafu shēmai, ko izmanto 3D dzinēji un DCC rīki.
Matemātikas utilītprogrammas
Bibliotēka ietver pamatmatemātikas tipus 3D operācijām.
Vector3
Trīskomponentu vektors, ko izmanto pozīcijām, virzieniem, normālām un krāsām.
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 transformācijas matrica, kas apvieno translāciju, rotāciju un mērogu vienā operācijā.
Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform
Quaternion
Rotācijas reprezentācija, kas novērš gimbal lock un interpolē gludi. Kvaternioni tiek izmantoti iekšēji transformācijas sistēmā.
BoundingBox
Asiāli izlīdzināta robežkaste telpiskām vaicājumiem, sadursmju pārbaudēm un ainas analīzei.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be constructed directly with min/max Vector3 values
Piezīme: Node.getBoundingBox() un Entity.getBoundingBox() vēl nav ieviesti. Abi atgriež tukšu BoundingBox (ar sentinel Double.MAX_VALUE / Double.MIN_VALUE vērtības) neatkarīgi no režģa ģeometrijas. Neizmantojiet šīs metodes, lai aprēķinātu faktiskos ģeometrijas robežus šajā versijā.
Zināmie ierobežojumi
Ir vērts atzīmēt, ka Scene.render() ir nav atbalstīts FOSS izdevumā. Izsaucot to, tiks izraisīta UnsupportedOperationException. Bibliotēka ir paredzēta failu bāzētai 3D apstrādei — ielādei, transformēšanai un saglabāšanai — nevis reāllaika renderēšanai.
Kopsavilkums
Galvenās Aspose.3D FOSS Java funkcijas sadalās piecās jomās:
| Joma | Klases | Mērķis |
|---|---|---|
| Ainas grafiks | Scene, Node, Entity, Mesh, Camera | Hierarhiska modeļa attēlojums |
| Formāti | Ielādes/saglabāšanas iespējas OBJ, STL, glTF/GLB; Ielāde FBX | Formātam neatkarīga I/O |
| Materiāli | PbrMaterial | Virsmu izskats (PBR) |
| Transformācijas | Transform, GlobalTransform | Telpiskā pozicionēšana |
| Matemātika | Vector3, Matrix4, Quaternion, BoundingBox | 3D math primitives |
Nākamajā rakstā mēs soli pa solim izskatīsim praktiskus formāta pa formātam pamācības, kas aptver OBJ, STL, glTF un FBX, ar detalizētām ielādes un saglabāšanas opcijām.