Aspose.3D FOSS for Java hỗ trợ năm định dạng tệp 3D: OBJ, STL, GTTF, GLB, và FBX Bài viết này là một hướng dẫn thực tế, định dạng theo định hình cho thấy làm thế nào để tải và lưu mỗi, các tùy chọn có sẵn, và cách chuyển đổi giữa chúng.

Tất cả các ví dụ sử dụng com.aspose.threed.* gói :

import com.aspose.threed.*;

Maven phụ thuộc:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

định dạng cảnh quan

Trước khi đi vào, đây là một cái nhìn tổng quan nhanh về bốn định dạng được hỗ trợ và các trường hợp sử dụng thông thường của chúng.

định dạngmở rộngnhập khẩuxuất khẩuHỗ trợ vật liệuHiệp định Hierarchy
OBJ.objTệp cơ bản (MTL)Đơn giản
STL.stlKhông cóĐơn giản
GTTF 2.0.gltfPBRđầy đủ
GLB.glbPBRđầy đủ
FBX.fbxKhônggiàuđầy đủ

OBJ, STL, glTF và GLB hỗ trợ cả nhập khẩu lẫn xuất khẩu. FBX được hỗn hợp cho các hoạt động Chỉ nhập khẩu.GLB (GlTF nhị phân) được sản xuất thông qua GltfSaveOptions Với setContentType(FileContentType.BINARY).

• OBJ: Wavefront Object (một đối tượng phía trước)

OBJ là một trong những định dạng 3D được hỗ trợ rộng rãi nhất. nó lưu trữ hình học như văn bản thẳng, với một tùy chọn .mtl file đồng hành cho các vật liệu.

tải OBJ file

Cách tiếp cận đơn giản nhất là đi qua đường file trực tiếp:

Scene scene = Scene.fromFile("model.obj");

Để kiểm soát hơn, sử dụng ObjLoadOptions:

ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);

Khi tệp OBJ tham chiếu một tách MTL (thông qua một mtllib (directive), thư viện sẽ cố gắng tải các định nghĩa vật liệu từ nó tự động. tệp MTL nên ở trong cùng một thư mục như tách OBJ hoặc trên con đường được chỉ định trong hướng dẫn.

Tiết kiệm như OBJ

Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");

OBJ sử dụng trường hợp

  • Thay đổi dữ liệu mích giữa các công cụ 3D khác nhau.
  • nhập khẩu các mô hình từ thư viện tài sản được phân phối trong định dạng OBJ.
  • Kiểm tra nhanh về địa phương mà không có các hiê-rơ cảnh phức tạp.

Lời bài hát: Stereolithography

STL là định dạng tiêu chuẩn cho in 3D. Nó đại diện cho triangular geometry nguyên mà không có vật liệu, màu sắc hoặc hình ảnh hiến pháp. các tập tin STl đến trong hai biến thể: ASCII (nhân đọc) và binary (compact).

tải file STL

// Simple load
Scene scene = Scene.fromFile("part.stl");

// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);

Tiết kiệm như STL

Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");

Để kiểm soát sản lượng, sử dụng StlSaveOptions:

StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);

STL quan điểm

  • STL chỉ lưu trữ triangle geometry. vật liệu, cấu trúc và hiện đường không được hỗ trợ và bị ném vào xuất khẩu.
  • STL xuất khẩu Không Tỷ lục tự động. STL binary chỉ viết 3 chiều đầu tiên của mỗi mặt đa dạng; khuôn mặt quad và n-gon được truncated im lặng. ASCII STl viết tất cả các chỉ số đường cong trên từng khuôn, tạo ra kết quả biến đổi cho khuôn Mặt không triangle. Luôn sử dụng bàn tay trước triungle (mọi khuôn khuôn) khi xuất khẩu đến ST L.
  • Binary STL là nhỏ hơn đáng kể so với ASCII STl cho các mô hình lớn.
  • STL là định dạng lựa chọn khi mục tiêu là một máy in 3D hoặc phần mềm slicer.

GLTF: định dạng truyền hình GL

glTF là một định dạng hiện đại được thiết kế để truyền và tải nội dung 3D hiệu quả, đặc biệt trên web và trong các ứng dụng thời gian thực. nó hỗ trợ tài liệu PBR, hiện học cảnh, và hoạt hình.

Tải tập tin gltf

Scene scene = Scene.fromFile("scene.gltf");

// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);

Tiết kiệm như GLTF

Lưu trữ 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);

GltfSaveOptions chi tiết

Phương phápmục đích
setFlipCoordinateSystem(boolean)Tải ax hệ thống phối hợp trong khi xuất khẩu. 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 với indentation cho readability. false - Kích thước file nhỏ hơn trong sản xuất.

GTTF sử dụng trường hợp

  • Các trình duyệt 3D dựa trên web (three.js, Babylon.js).
  • Ứng dụng thời gian thực và động cơ trò chơi.
  • Bảo tồn định nghĩa vật liệu PBR trên các công cụ.

FBX: Filmbox (Hơn nhập khẩu)

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 kỹ thuật số. Aspose.3D FOSS for Java hỗ trợ FBx cho các mục tiêu khác nhau: Chỉ nhập khẩu - xuất khẩu đến FBX không sẵn dùng.

Chỉ có FBX. Các nhà nhập khẩu FBX chỉ đọc các tệp FBx nhị phân. qua một tách ASCII FB X ném ImportException("ASCII FBX format not yet supported - only binary FBX is supported").Hiện hiếng nồi và chiết xuất vật liệu từ FBX không được xác minh đầy đủ; các cảnh phức tạp của FB X có thể không bị tải hoàn toàn.

Tải FBX File

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ì xuất khẩu FBX không được hỗ trợ, chuyển đổi các cảnh FBx nhập vào 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);

FBX sử dụng trường hợp

  • Thu nhập tài sản mảnh vỡ static từ các công cụ Autodesk (Maya, 3ds Max) và chuyển đổi sang định dạng khác.
  • Tải về hình địa lý FBX nhị phân và tái xuất sang glTF/GLB, OBJ hoặc STL.

Batch chuyển đổi

Một dòng công việc phổ biến là chuyển đổi toàn bộ thư mục các tập tin từ định dạng này sang khác. đây là một mô hình cho chuyển thể:

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 đòi hỏi mọi .obj file trong một thư mục, chuyển đổi mỗi thành glTF với kết quả in khá, và tiết kiệm các kết luận. bạn có thể tùy chỉnh mô hình này cho bất kỳ sự kết hợp định dạng nguồn và mục tiêu nào.

Định dạng chuyển đổi Cross-Format

Bảng sau đây cho thấy những gì cần mong đợi khi chuyển đổi giữa các định dạng.

TừTớiGeometriavật liệuHiến phápGhi chú
OBJSTLBảo tồnmấtN/ASTL không có hỗ trợ vật chất
OBJGTTF / GLBBảo tồnChuyển đổi sang PBRĐơn giảnMã hóa chất MTL được mapped nơi có thể
STLOBJBảo tồnKhông cóN/AKhông có tài liệu trong nguồn
STLGTTF / GLBBảo tồnMật sốĐơn giảnDung lượng vật liệu áp dụng
GTTFOBJBảo tồnđơn giảnMàn hìnhPBR đến vật liệu cơ bản
GTTFSTLBảo tồnmấtMàn hìnhGeometry chỉ có
FBXOBJBảo tồnđơn giảnMàn hìnhDễ dàng vật liệu
FBXSTLBảo tồnmấtMàn hìnhGeometry chỉ có
FBXGTTF / GLBBảo tồnChuyển đổi sang PBRBảo tồnLòng trung thành tốt

Hướng dẫn chuyển đổi chung

  • Geometria Nó thường được bảo tồn trên các cặp định dạng, với một ngoại lệ quan trọng: khi xuất khẩu đến STL, mảnh phải bao gồm hoàn toàn mặt ba góc. Binary STT im lặng truncates quad và n-gon khuôn mặt vào 3 chiều đầu tiên của họ; ASCII STS sản xuất kết quả bị biến dạng cho không triangle khuôn.
  • vật liệu sống sót tốt nhất giữa các cảnh nhập khẩu của glTF và FBX bao gồm dữ liệu vật chất. chuyển đổi thành STL luôn giảm vật liệu. biến đổi đến OBJ đơn giản hóa vật phẩm cho mô hình MTL cơ bản.
  • Hiện hiếng cảnh được bảo tồn giữa các tệp định dạng glTF. OBJ và STL sản xuất cấu trúc phẳng. hiến pháp FBX và khai thác vật liệu không hoàn toàn xác minh trong phiên bản này.

Đặt nó tất cả cùng nhau

Dưới đây là một ví dụ đầy đủ tải một tệp OBJ, kiểm tra các nút của nó và xuất khẩu cho 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ổng hợp

Aspose.3D FOSS for Java cung cấp cho bạn một API liên tục trên nhiều định dạng.:

  • OBJ - Thay đổi đơn giản với vật liệu cơ bản.
  • STL - định dạng địa phương chỉ cho các ống in 3D.
  • GLTF / GLB - định dạng PBR hiện đại có thể sử dụng web và thời gian thực. GltfSaveOptions Với setContentType(FileContentType.BINARY) sản xuất GLB.
  • FBX - Chỉ nhập khẩu; định dạng phong phú cho tài sản tải từ động cơ trò chơi và công cụ DCC.

Sử dụng tải định dạng cụ thể và lưu các lớp tùy chọn (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptionsKhi bạn cần kiểm soát tinh tế về quá trình nhập khẩu hoặc xuất khẩu.

Để biết thêm chi tiết, hãy truy cập vào Aspose.3D tài liệu hoặc duyệt nguồn trên GitHub.