Wprowadzenie

Praca z treścią 3D w Java zwykle wymaga wyboru między ciężką wagą Motory gry i biblioteki matematyki bar-bones. aspose-3d-foss Pakiet oferuje A Średnia grona: zorientowany API grafu sceny, który obsługuje pliki I/O, hierarchii węzłów, budowa maszyny i koordynacja transformacji bez wyciągnięcia w renderingu Źródło lub łańcuch zależności.

Aspose.3D FOSS dla Java jest biblioteką open-source dystrybuowaną na licencji MIT. Zapewnia 80 klas zajmujących się zarządzaniem scenami, geometrii, materiałów i konwersją formatów. Biblioteka czyta FBX, glTF/GLB, Wavefront OBJ i STL oraz pisze gltF / GLB i OBG (eksport FBX nie jest realizowany), co sprawia, że jest to praktyczne dla przetwarzania 3D ze strony serwera, integracji budowlanego narzędzia i przepływu danych prowadzących w Java 21 lub później.

Ten post przechodzi przez zdolności zarządzania sceną w bibliotece: jak zbudować sceny z rzęs, populować je geometry i transformacji oraz eksportować wynik na dyski.


Co jest włączone

Sceny graficzne podstawowe

i The Scene Klasy to pojemnik korzeniowy dla każdego dokumentu 3D. Node, metadane aktywów, klipy animacyjne i podskryty. można utworzyć puste sceny, a następnie populować go lub pobrać istniejący plik z 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");

Każdy Node Można trzymać jeden Entity (tak jak w A Mesh lub Cameraa) A Transform, lista materiałów, a dodatkowe węzły dziecka. struktura drzewa Spojrzała wzorem scenografu używany przez większość narzędzi pisania 3D.

Mesh budowa

i The Mesh Klasy pozwalają na określenie geometrii z punktów kontrolnych i poligonu. Wskaźniki: Dodajmy do nich pionowe addControlPoint,Po tym, jak połączyć je w twarzy z 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);

W skład ognia jest triangulate(), optimize(removeVertices),i Boolean Operacje (union, difference, intersectJednak te metody są w bieżący wydajność – zwracają klon maszyny wejściowej bez wykonania Operacja o nazwie.

Transformacja i pozycjonowanie

Każdy z nich Node Przeprowadza A Transform kontroluje jego lokalną tłumaczenie, rotację, i skali. te składają się przez hierarchii, aby poruszać rodzicielski węzły Przenosi wszystkie swoje dzieci.

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);

W przypadku absolutnej pozycjonowania zapytania, wezwanie node.getGlobalTransform() aby odzyskać Zestawione GlobalTransform,lub node.evaluateGlobalTransform(true) Aby uzyskać A Matrix4 W tym przypadku należy wziąć udział w geometrycznych odcinkach.

PBR materiały

i The PbrMaterial Klasy zapewniają fizycznie oparte właściwości renderowania: kolor albedo, czynnik metalowy, szorstkość, emisyjny kolor i przejrzystość. Przypisz materiał do węzła podczas tworzenia dziecka.

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);

Format wykrywania

i The FileFormat klas zapewnia statyczne narzędzia do wyszukiwania i wykrywania. można Rozwiązywanie formatu za pomocą rozszerzenia pliku lub przeglądanie strumienia w celu identyfikacji nieznanych plików.

import com.aspose.threed.FileFormat;

FileFormat fmt = FileFormat.getFormatByExtension("model.glb");
boolean canRead  = fmt.getCanImport();
boolean canWrite = fmt.getCanExport();

Koordynacja systemów konwersji

AxisSystem pozwalają określić górną osię, przód i ręczność system koordynacyjny, a następnie obliczanie Matrix4 Zmiana geometrii między Konwencje (na przykład, od systemu z prawym ręką do Y-up) 1 z lewej ręki).

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);

Szybki start

Dodaj uzależnienie od Maven:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

Zbuduj prostą scenę i eksportować ją:

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);

Wspierane formaty

FormatowanieRozszerzenieCzytajpisze
FBX (ASCII i binary, 6.x-7.x).fbxTakNie
GST 1.0 / 2.0.gltfTakTak
GSTB binary.glbTakTak
Wavefront OBJ.objTakTak
STL (ASCII i binarne).stlTakTak

Każdy format poświęcony jest LoadOptions i SaveOptions Podwyżki ( dla Przykładem jest, FbxLoadOptions, GltfSaveOptions, StlSaveOptionsa) to wykazuje ustawienia specyficzne dla formatu, takie jak flipping systemu koordynatowego i typ treści i selekcji.


Open Source i licencje

Aspose.3D FOSS dla Java jest wydany pod licencją MIT. kod źródłowy jest Dostępne na GitHub Aspose.3D-FOSS dla Java. Możesz korzystać, modyfikować i redistribuować bibliotekę w formie komercyjnej i Projekty niekomercyjne bez ograniczeń.


Zaczyna się