Jak ładować modele 3D w Java
aspose-3d-foss dla Java zapewnia prosty interfejs API do otwierania plików 3D. Po załadowaniu pliku do Scene obiektu możesz przechodzić po hierarchii węzłów i odczytywać dane geometryczne.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
Dodaj zależność Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>Krok 2: Zaimportuj klasę Scene
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
import com.aspose.threed.Mesh;Krok 3: Załaduj plik
Scene scene = new Scene();
scene.open("model.obj");Lub użyj statycznej fabryki:
Scene scene = Scene.fromFile("model.obj");Obsługiwane formaty: OBJ, STL, glTF 2.0 / GLB, FBX (tylko binarny — ASCII FBX nie jest obsługiwany i powoduje ImportException).
Krok 4: Przejdź po węzłach sceny
void walk(Node node, int depth) {
String indent = " ".repeat(depth * 2);
System.out.println(indent + "Node: " + node.getName());
for (Node child : node.getChildNodes()) {
walk(child, depth + 1);
}
}
walk(scene.getRootNode(), 0);Krok 5: Uzyskaj dostęp do danych siatki
for (Node node : scene.getRootNode().getChildNodes()) {
if (node.getEntity() instanceof Mesh) {
Mesh mesh = (Mesh) node.getEntity();
System.out.println("Mesh '" + node.getName() + "': " +
mesh.getControlPoints().size() + " vertices, " +
mesh.getPolygonCount() + " polygons");
}
}Typowe problemy i rozwiązania
Wyjątek podczas ładowania
Sprawdź, czy plik nie jest uszkodzony i czy format jest obsługiwany (OBJ, STL, glTF, FBX).
NullPointerException przy dostępie do encji
Nie każdy węzeł zawiera geometrię. Zawsze sprawdzaj node.getEntity() instanceof Mesh przed rzutowaniem.
Niezgodność systemu współrzędnych
Użyj ObjLoadOptions.setFlipCoordinateSystem(true) lub zastosuj rotację po załadowaniu.
Najczęściej zadawane pytania (FAQ)
Jakie formaty mogę wczytać?
OBJ, STL (binarny i ASCII), glTF 2.0 / GLB oraz FBX. Dla FBX, tylko binarny FBX jest obsługiwany. Pliki ASCII FBX spowodują ImportException("ASCII FBX format not yet supported - only binary FBX is supported").
Czy mogę wczytać z InputStream?
Tak. scene.open() akceptuje an InputStream.
Czy biblioteka jest bezpieczna wątkowo?
Każdy Scene instancja jest niezależna. Ładowanie oddzielnych plików do oddzielnych instancji z oddzielnych wątków jest bezpieczne.