Aspose.3D FOSS cho Java hỗ trợ năm định dạng tệp 3D: OBJ, STL, glTF, GLB, và FBX (chỉ nhập).
Tất cả các ví dụ sử dụng com.aspose.threed.* gói:
import com.aspose.threed.*;
Phụ thuộc Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Cảnh quan Định dạng
Trước khi bắt đầu, đây là một cái nhìn nhanh về bốn định dạng được hỗ trợ và các trường hợp sử dụng điển hình của chúng.
| Định dạng | Phần mở rộng | Nhập | Xuất | Hỗ trợ vật liệu | Cây phân cấp cảnh |
|---|---|---|---|---|---|
| OBJ | .obj | Có | Có | Cơ bản (tệp MTL) | Phẳng |
| STL | .stl | Có | Có | Không có | Bằng phẳng |
| glTF 2.0 | .gltf | Có | Có | PBR | Đầy đủ |
| GLB | .glb | Có | Có | PBR | Đầy đủ |
| FBX | .fbx | Có | Không | Phong phú | Đầy đủ |
OBJ, STL, glTF và GLB hỗ trợ cả nhập và xuất. FBX được hỗ trợ cho chỉ nhập. GLB (binary glTF) được tạo ra qua GltfSaveOptions với setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ là một trong những định dạng lưới 3D được hỗ trợ rộng rãi nhất. Nó lưu trữ hình học dưới dạng văn bản thuần, với một tùy chọn .mtl tệp phụ trợ cho vật liệu.
Tải tệp OBJ
Cách đơn giản nhất là truyền đường dẫn tệp trực tiếp:
Scene scene = Scene.fromFile("model.obj");
Để có nhiều kiểm soát hơn, hãy sử dụng ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Khi tệp OBJ tham chiếu tới tệp MTL (qua một directive) mtllib directive), thư viện sẽ cố gắng tải định nghĩa vật liệu từ nó một cách tự động. Tệp MTL nên nằm trong cùng thư mục với tệp OBJ hoặc tại đường dẫn được chỉ định trong directive.
Lưu dưới dạng OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
Các trường hợp sử dụng OBJ
- Trao đổi dữ liệu lưới giữa các công cụ 3D khác nhau.
- Nhập mô hình từ các thư viện tài nguyên phân phối dưới định dạng OBJ.
- Kiểm tra nhanh hình học mà không cần cấu trúc cảnh phức tạp.
STL: Stereolithography
STL là định dạng tiêu chuẩn cho việc in 3D. Nó biểu diễn hình học tam giác thô mà không có vật liệu, màu sắc hoặc cấu trúc cảnh. Các tệp STL có hai dạng: ASCII (đọc được bởi con người) và binary (gọn nhẹ).
Tải các tệp STL
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Lưu dưới dạng STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Để kiểm soát đầu ra, sử dụng StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
Lưu ý về STL
- Các tệp STL chỉ chứa hình học đã được chia thành tam giác. Vật liệu, kết cấu và cấu trúc cảnh sẽ bị mất khi xuất.
- STL nhị phân nhỏ hơn đáng kể so với STL ASCII đối với các mô hình lớn.
- STL là định dạng được ưu tiên khi mục tiêu là máy in 3D hoặc phần mềm cắt lớp.
glTF: Định dạng Truyền tải GL
glTF là một định dạng hiện đại được thiết kế để truyền tải và tải nội dung 3D một cách hiệu quả, đặc biệt trên web và trong các ứng dụng thời gian thực. Nó hỗ trợ vật liệu PBR, cấu trúc cảnh và hoạt ảnh.
Đang tải các tệp glTF
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Lưu dưới dạng glTF
Việc lưu cơ bản sử dụng phần mở rộng tệp để xác định định dạng:
scene.save("output.gltf");
Để kiểm soát chi tiết, sử dụng GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Chi tiết GltfSaveOptions
| Phương pháp | Mục đích |
|---|---|
setFlipCoordinateSystem(boolean) | Lật trục hệ tọa độ khi xuất. Hữu ích khi chuyển đổi từ Y-up sang Z-up hoặc ngược lại. |
setPrettyPrint(boolean) | Định dạng JSON đầu ra với thụt lề để dễ đọc. Đặt thành false để giảm kích thước tệp trong môi trường sản xuất. |
Các trường hợp sử dụng glTF
- Trình xem 3D dựa trên web (three.js, Babylon.js).
- Các ứng dụng thời gian thực và engine trò chơi.
- Bảo tồn các định nghĩa vật liệu PBR giữa các công cụ.
FBX: Filmbox (Chỉ nhập)
FBX là một định dạng độc quyền của Autodesk, được sử dụng rộng rãi trong phát triển trò chơi và tạo nội dung số. Nó hỗ trợ các cấu trúc cảnh phong phú, vật liệu và hoạt ảnh. Aspose.3D FOSS cho Java hỗ trợ FBX cho chỉ nhập – xuất sang FBX không khả dụng.
Tải tệp FBX
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Chuyển đổi FBX sang các định dạng khác
Vì việc xuất FBX không được hỗ trợ, hãy chuyển các cảnh FBX đã nhập sang glTF, GLB, OBJ hoặc STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
Các trường hợp sử dụng FBX
- Nhập tài sản từ các công cụ của Autodesk (Maya, 3ds Max) và chuyển đổi sang các định dạng khác.
- Đang tải các nhân vật có khung xương và các cảnh hoạt hình để xuất lại sang glTF/GLB.
Chuyển đổi hàng loạt
Quy trình thường gặp là chuyển đổi toàn bộ thư mục các tệp từ định dạng này sang định dạng khác. Dưới đây là một mẫu cho việc chuyển đổi hàng loạt:
import com.aspose.threed.*;
import java.io.File;
public class BatchConvert {
public static void main(String[] args) throws Exception {
File inputDir = new File("models/obj");
File outputDir = new File("models/gltf");
outputDir.mkdirs();
GltfSaveOptions saveOpts = new GltfSaveOptions();
saveOpts.setPrettyPrint(true);
File[] objFiles = inputDir.listFiles(
(dir, name) -> name.toLowerCase().endsWith(".obj")
);
if (objFiles == null) return;
for (File objFile : objFiles) {
String baseName = objFile.getName()
.replaceFirst("\\.obj$", "");
Scene scene = Scene.fromFile(objFile.getAbsolutePath());
String outPath = new File(outputDir, baseName + ".gltf")
.getAbsolutePath();
scene.save(outPath, saveOpts);
System.out.println("Converted: " + objFile.getName()
+ " -> " + baseName + ".gltf");
}
}
}
Điều này tải mọi .obj tệp trong một thư mục, chuyển đổi mỗi tệp sang glTF với đầu ra được in đẹp, và lưu kết quả. Bạn có thể điều chỉnh mẫu này cho bất kỳ kết hợp định dạng nguồn và đích nào.
Tham chiếu chuyển đổi đa định dạng
Bảng dưới đây cho thấy những gì sẽ xảy ra khi chuyển đổi giữa các định dạng.
| Từ | Đến | Hình học | Vật liệu | Cây phân cấp | Ghi chú |
|---|---|---|---|---|---|
| OBJ | STL | Được bảo tồn | Mất | N/A | STL không hỗ trợ vật liệu |
| OBJ | glTF/GLB | Được bảo tồn | Đã chuyển đổi sang PBR | Phẳng | Vật liệu MTL được ánh xạ khi có thể |
| STL | OBJ | Được bảo tồn | Không có | N/A | Không có vật liệu trong nguồn |
| STL | glTF/GLB | Được bảo tồn | Mặc định | Phẳng | Đã áp dụng vật liệu mặc định |
| glTF | OBJ | Được bảo tồn | Đơn giản hoá | Được làm phẳng | PBR sang vật liệu cơ bản |
| glTF | STL | Giữ nguyên | Mất | Làm phẳng | Chỉ hình học |
| FBX | OBJ | Giữ nguyên | Đơn giản hoá | Làm phẳng | Đơn giản hoá vật liệu |
| FBX | STL | Bảo tồn | Mất | Được làm phẳng | Chỉ hình học |
| FBX | glTF/GLB | Bảo tồn | Đã chuyển đổi sang PBR | Bảo tồn | Độ trung thực tốt |
Hướng dẫn chuyển đổi chung
- Hình học luôn được bảo tồn trên mọi cặp định dạng.
- Vật liệu tốt nhất giữa glTF và FBX, cả hai đều hỗ trợ các mô hình vật liệu phong phú. Chuyển đổi sang STL luôn loại bỏ vật liệu. Chuyển đổi sang OBJ đơn giản hoá vật liệu thành mô hình MTL cơ bản.
- Cây phân cấp cảnh được giữ nguyên giữa glTF và FBX. OBJ và STL tạo ra cấu trúc phẳng.
Kết hợp mọi thứ lại
Dưới đây là một ví dụ hoàn chỉnh tải một tệp OBJ, kiểm tra các nút của nó, và xuất ra cả glTF và GLB:
import com.aspose.threed.*;
public class FormatWorkflow {
public static void main(String[] args) throws Exception {
// Load
Scene scene = Scene.fromFile("input.obj");
// Inspect
System.out.println("Nodes in scene:");
for (Node child : scene.getRootNode().getChildNodes()) {
System.out.println(" " + child.getName());
Transform t = child.getTransform();
System.out.println(" Translation: "
+ t.getTranslation());
}
// Export to glTF with options
GltfSaveOptions gltfOpts = new GltfSaveOptions();
gltfOpts.setPrettyPrint(true);
scene.save("output.gltf", gltfOpts);
// Export to GLB (binary glTF)
GltfSaveOptions glbOpts = new GltfSaveOptions();
glbOpts.setContentType(FileContentType.BINARY);
scene.save("output.glb", glbOpts);
System.out.println("Export complete.");
}
}
Tóm tắt
Aspose.3D FOSS for Java cung cấp cho bạn một API nhất quán trên nhiều định dạng. Các điểm chính:
- OBJ – trao đổi lưới đơn giản với vật liệu cơ bản.
- STL – định dạng chỉ chứa hình học cho quy trình in 3D.
- glTF / GLB – định dạng hiện đại hỗ trợ PBR cho web và sử dụng thời gian thực. Sử dụng
GltfSaveOptionsvớisetContentType(FileContentType.BINARY)cho đầu ra GLB. - FBX – chỉ nhập; định dạng phong phú để tải tài sản từ các engine trò chơi và công cụ DCC.
Sử dụng các lớp tùy chọn tải và lưu riêng cho định dạng (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) khi bạn cần kiểm soát chi tiết quá trình nhập hoặc xuất.
Để biết thêm chi tiết, hãy truy cập tài liệu Aspose.3D hoặc duyệt mã nguồn trên GitHub.