Ako načítať 3D modely v Java
aspose-3d-foss pre Java poskytuje jednoduché API na otváranie 3D súborov. Po načítaní súboru do Scene objektu môžete prechádzať hierarchiu uzlov a čítať geometrické dáta.
Postupný návod
Krok 1: Nainštalujte balík
Pridajte Maven závislosť:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>Krok 2: Importujte triedu Scene
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
import com.aspose.threed.Mesh;Krok 3: Načítajte súbor
Scene scene = new Scene();
scene.open("model.obj");Alebo použite statickú továreň:
Scene scene = Scene.fromFile("model.obj");Podporované formáty: OBJ, STL, glTF 2.0 / GLB, FBX (iba binárny — ASCII FBX nie je podporovaný a vyvolá ImportException).
Krok 4: Prechádzajte uzly scény
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: Prístup k dátam Mesh
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");
}
}Bežné problémy a riešenia
Výnimka pri načítaní
Skontrolujte, že súbor nie je poškodený a formát je podporovaný (OBJ, STL, glTF, FBX).
NullPointerException pri prístupe k entite
Nie každý uzol nesie geometriu. Vždy skontrolujte node.getEntity() instanceof Mesh pred pretypovaním.
Nesúlad súradnicového systému
Použite ObjLoadOptions.setFlipCoordinateSystem(true) alebo aplikujte rotáciu po načítaní.
Často kladené otázky (FAQ)
Aké formáty môžem načítať?
OBJ, STL (binárny a ASCII), glTF 2.0 / GLB a FBX. Pre FBX, iba binárny FBX je podporovaný. ASCII FBX súbory vyvolajú ImportException("ASCII FBX format not yet supported - only binary FBX is supported").
Môžem načítať z InputStreamu?
Áno. scene.open() prijíma InputStream.
Je knižnica vlákno-bezpečná?
Každý Scene inštancia je nezávislá. Načítanie samostatných súborov do samostatných inštancií z rôznych vlákien je bezpečné.