Tính năng và Chức năng
Tính năng và Chức năng
Trang này bao phủ mọi lĩnh vực tính năng chính của aspose-3d-foss 26.1.0 với các ví dụ Java hoạt động.
Tải và Lưu Cảnh
scene.open() tải một tệp; scene.save() xuất nó:
import com.aspose.threed.Scene;
Scene scene = new Scene();
scene.open("input.obj");
scene.save("output.glb");Phương pháp tĩnh thay thế:
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.stl");Các tùy chọn riêng theo định dạng
Truyền LoadOptions hoặc SaveOptions lớp con để kiểm soát chi tiết:
import com.aspose.threed.*;
Scene scene = new Scene();
ObjLoadOptions opts = new ObjLoadOptions();
opts.setFlipCoordinateSystem(true);
scene.open("model.obj", opts);
GltfSaveOptions saveOpts = new GltfSaveOptions();
saveOpts.setFlipCoordinateSystem(true);
scene.save("model.glb", saveOpts);Lưu ý: FBX chỉ được hỗ trợ để nhập; xuất FBX không được triển khai trong phiên bản FOSS. Chỉ FBX nhị phân các tệp được hỗ trợ để nhập — ASCII FBX gây lỗi ImportException.
Xây dựng Đồ thị Cảnh
Tạo các node và gắn các thực thể:
Scene scene = new Scene();
Node root = scene.getRootNode();
Mesh mesh = new Mesh("myMesh");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 10, 0));
mesh.createPolygon(0, 1, 2);
Node meshNode = root.createChildNode("triangle", mesh);Thao tác Mesh
Tạo một Mesh bằng cách lập trình với các điểm điều khiển và đa giác:
Mesh mesh = new Mesh("custom");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 10, 0));
mesh.getControlPoints().add(new Vector4(0, 10, 0));
mesh.createPolygon(0, 1, 2, 3);Biến đổi
Mỗi Node mang một Transform:
Node node = scene.getRootNode().createChildNode("moved", new Mesh());
node.getTransform().setTranslation(10, 0, 5);
node.getTransform().setScale(2, 2, 2);Đọc không gian thế giới qua node.getGlobalTransform().getMatrix().
Vật liệu
Gán vật liệu cho các nút:
PbrMaterial mat = new PbrMaterial("shiny");
mat.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0));
mat.setMetallicFactor(0.5);
mat.setRoughnessFactor(0.3);
scene.getRootNode().createChildNode("red_mesh", mesh, mat);Các loại vật liệu: Material (cơ bản), PbrMaterial (PBR metallic-roughness).
Mẹo và Thực hành Tốt nhất
- Sử dụng
Scene.fromFile()để tải một dòng khi không cần tùy chọn tùy chỉnh - Xây dựng meshes một cách lập trình bằng
createPolygon()cho hình học tùy chỉnh - Sử dụng
.glbphần mở rộng cho đầu ra glTF nhị phân gọn - Kiểm tra
node.getEntity() != nulltrước khi ép kiểu - Xuất STL không tự động chia đa giác thành tam giác. Xuất STL nhị phân chỉ ghi 3 đỉnh đầu tiên của mỗi mặt đa giác — các mặt tứ giác hoặc n-gon bị cắt ngầm. Xuất STL ASCII ghi tất cả các chỉ số đỉnh, dẫn đến các khối facet bị sai dạng cho các mặt không phải tam giác. Luôn truyền các mesh đã được chia thành tam giác trước (tất cả các mặt là tam giác) cho quá trình xuất STL để tránh mất dữ liệu hoặc đầu ra không hợp lệ.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Sửa chữa |
|---|---|---|
| Ngoại lệ khi tải | Tệp không được hỗ trợ hoặc bị hỏng | Xác nhận tệp mở trong trình xem 3D |
| Thiếu vật liệu sau khi tải OBJ | .mtl tệp không tìm thấy | Đặt .mtl bên cạnh .obj; đảm bảo vật liệu được bật |
| Không khớp tỷ lệ sau khi nhập | Các hệ đơn vị khác nhau | Áp dụng một Transform tỷ lệ sau khi tải |
FAQ
Làm thế nào để tôi phát hiện định dạng của một tệp?
FileFormat format = FileFormat.detect("unknown.bin");
System.out.println(format.getExtension());Tôi có thể tải từ một luồng không?
Có. scene.open() chấp nhận một InputStream.
Các định dạng nào hỗ trợ cả nhập và xuất?
OBJ, STL, và glTF/GLB hỗ trợ cả hai hướng. FBX chỉ hỗ trợ nhập; xuất chưa được triển khai trong phiên bản FOSS.
Tóm tắt Tham chiếu API
| Lớp / Phương thức | Mô tả |
|---|---|
Scene | Bộ chứa cảnh 3D cấp cao nhất |
scene.open() | Tải tệp 3D bằng đường dẫn hoặc luồng |
scene.save() | Xuất cảnh ra tệp hoặc luồng |
Scene.fromFile() | Nhà máy tĩnh để tải và trả về một Scene |
Node | Nút phân cấp cảnh |
node.createChildNode() | Tạo và gắn một nút con |
Mesh | Lưới đa giác với các điểm điều khiển và danh sách mặt |
mesh.createPolygon() | Xác định một mặt đa giác |
Mesh.toMesh() | Chuyển đổi hoặc sao chép hình học lưới |
Transform | Dịch chuyển, quay và tỉ lệ cục bộ |
FileFormat | Đăng ký và bộ phát hiện cho các định dạng |