Cách tải mô hình 3D trong Java
aspose-3d-foss cho Java cung cấp một API đơn giản để mở các tệp 3D. Sau khi tải một tệp vào một Scene đối tượng, bạn có thể duyệt qua cây node và đọc dữ liệu hình học.
Hướng Dẫn Từng Bước
Bước 1: Cài Đặt Gói
Thêm phụ thuộc Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>Bước 2: Nhập Lớp Scene
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
import com.aspose.threed.Mesh;Bước 3: Tải Một Tệp
Scene scene = new Scene();
scene.open("model.obj");Hoặc sử dụng factory tĩnh:
Scene scene = Scene.fromFile("model.obj");Các định dạng được hỗ trợ: OBJ, STL, glTF 2.0 / GLB, FBX (chỉ dạng nhị phân — ASCII FBX không được hỗ trợ và sẽ gây ra ImportException).
Bước 4: Duyệt Các Node Trong Scene
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);Bước 5: Truy Cập Dữ Liệu 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");
}
}Các Vấn Đề Thường Gặp và Cách Khắc Phục
Ngoại Lệ Khi Tải
Kiểm tra tệp không bị hỏng và định dạng được hỗ trợ (OBJ, STL, glTF, FBX).
NullPointerException khi truy cập thực thể
Không phải mọi node đều chứa hình học. Luôn kiểm tra node.getEntity() instanceof Mesh trước khi ép kiểu.
Không khớp hệ tọa độ
Sử dụng ObjLoadOptions.setFlipCoordinateSystem(true) hoặc áp dụng một phép quay sau khi tải.
Câu hỏi thường gặp (FAQ)
Các định dạng nào tôi có thể tải?
OBJ, STL (nhị phân và ASCII), glTF 2.0 / GLB, và FBX. Đối với FBX, chỉ FBX nhị phân được hỗ trợ. Các tệp ASCII FBX sẽ gây ra ImportException("ASCII FBX format not yet supported - only binary FBX is supported").
Tôi có thể tải từ InputStream không?
Có. scene.open() chấp nhận một InputStream.
Thư viện có an toàn với đa luồng không?
Mỗi Scene đối tượng là độc lập. Việc tải các tệp riêng biệt vào các đối tượng riêng biệt từ các luồng riêng biệt là an toàn.