Aspose.3D FOSS สำหรับ Java รองรับไฟล์ฟอร์แมต 3D จำนวนห้าแบบ: OBJ, STL, glTF, GLB, และ FBX (นำเข้าเท่านั้น).

ตัวอย่างทั้งหมดใช้ com.aspose.threed.* แพคเกจ:

import com.aspose.threed.*;

การพึ่งพา Maven:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

ภูมิทัศน์รูปแบบ

ก่อนที่เราจะลงลึก, นี่คือภาพรวมอย่างรวดเร็วของสี่รูปแบบที่รองรับและกรณีการใช้งานทั่วไปของแต่ละรูปแบบ.

รูปแบบส่วนขยายนำเข้าส่งออกการสนับสนุนวัสดุลำดับชั้นฉาก
OBJ.objใช่ใช่พื้นฐาน (ไฟล์ MTL)แบน
STL.stlใช่ใช่ไม่มีแบน
glTF 2.0.gltfใช่ใช่PBRเต็ม
GLB.glbใช่ใช่PBRเต็ม
FBX.fbxใช่ไม่อุดมเต็ม

OBJ, STL, glTF, และ GLB รองรับการนำเข้าและส่งออกทั้งสองแบบ. FBX รองรับสำหรับ นำเข้าเท่านั้น. GLB (binary glTF) ถูกสร้างผ่าน GltfSaveOptions ด้วย setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

OBJ เป็นหนึ่งในรูปแบบเมช 3 มิติที่ได้รับการสนับสนุนอย่างกว้างขวางที่สุด. มันเก็บข้อมูลเรขาคณิตเป็นข้อความธรรมดา, พร้อมกับตัวเลือกเพิ่มเติม .mtl ไฟล์คู่สำหรับวัสดุ.

การโหลดไฟล์ OBJ

วิธีที่ง่ายที่สุดคือการส่งพาธของไฟล์โดยตรง:

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

หากต้องการการควบคุมเพิ่มเติม ให้ใช้ ObjLoadOptions:

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

เมื่อไฟล์ OBJ อ้างอิงไฟล์ MTL (ผ่าน mtllib directive), ไลบรารีจะพยายามโหลดคำนิยามวัสดุจากไฟล์นั้นโดยอัตโนมัติ ไฟล์ MTL ควรอยู่ในไดเรกทอรีเดียวกับไฟล์ OBJ หรือที่เส้นทางที่ระบุใน directive.

บันทึกเป็น OBJ

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

กรณีการใช้งาน OBJ

  • การแลกเปลี่ยนข้อมูลเมชระหว่างเครื่องมือ 3D ต่าง ๆ.
  • การนำเข้ารุ่นจากห้องสมุดทรัพยากรที่แจกจ่ายในรูปแบบ OBJ.
  • การตรวจสอบเรขาคณิตอย่างรวดเร็วโดยไม่ต้องมีโครงสร้างฉากที่ซับซ้อน.

STL: Stereolithography

STL เป็นรูปแบบมาตรฐานสำหรับการพิมพ์ 3D มันแสดงถึงเรขาคณิตสามเหลี่ยมดิบโดยไม่มีวัสดุ สี หรือโครงสร้างฉาก ไฟล์ STL มีสองรูปแบบ: ASCII (อ่านได้โดยมนุษย์) และ binary (แบบกะทัดรัด).

การโหลดไฟล์ STL

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

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

บันทึกเป็น STL

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

เพื่อควบคุมผลลัพธ์, ใช้ StlSaveOptions:

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

ข้อควรพิจารณา STL

  • ไฟล์ STL มีเพียงเรขาคณิตแบบสามเหลี่ยมเท่านั้น วัสดุ, เทกเจอร์, และโครงสร้างฉากจะหายไประหว่างการส่งออก.
  • Binary STL มีขนาดเล็กกว่ามากเมื่อเทียบกับ ASCII STL สำหรับโมเดลขนาดใหญ่.
  • STL เป็นรูปแบบที่เลือกใช้เมื่อเป้าหมายคือเครื่องพิมพ์ 3 มิติหรือซอฟต์แวร์สไลเซอร์.

glTF: GL Transmission Format

glTF เป็นรูปแบบสมัยใหม่ที่ออกแบบมาสำหรับการส่งและโหลดเนื้อหา 3 มิติอย่างมีประสิทธิภาพ, โดยเฉพาะบนเว็บและในแอปพลิเคชันเรียลไทม์. รองรับวัสดุ PBR, โครงสร้างฉาก, และแอนิเมชัน.

กำลังโหลดไฟล์ glTF

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

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

บันทึกเป็น glTF

การบันทึกพื้นฐานใช้ส่วนขยายไฟล์เพื่อกำหนดรูปแบบ:

scene.save("output.gltf");

สำหรับการควบคุมอย่างละเอียด, ใช้ GltfSaveOptions:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

รายละเอียด GltfSaveOptions

วิธีการวัตถุประสงค์
setFlipCoordinateSystem(boolean)พลิกแกนของระบบพิกัดระหว่างการส่งออก มีประโยชน์เมื่อแปลงจาก Y‑up ไปเป็น Z‑up หรือในทางกลับกัน.
setPrettyPrint(boolean)จัดรูปแบบ JSON ของผลลัพธ์ด้วยการเยื้องเพื่อความอ่านง่าย ตั้งค่าเป็น false เพื่อขนาดไฟล์ที่เล็กลงในสภาพแวดล้อมการผลิต.

กรณีการใช้งาน glTF

  • โปรแกรมดู 3D บนเว็บ (three.js, Babylon.js).
  • แอปพลิเคชันแบบเรียลไทม์และเอนจินเกม.
  • การรักษาคำจำกัดความของวัสดุ PBR ข้ามเครื่องมือ.

FBX: Filmbox (นำเข้าเท่านั้น)

FBX เป็นรูปแบบที่เป็นกรรมสิทธิ์ของ Autodesk ซึ่งได้รับการใช้อย่างกว้างขวางในงานพัฒนาเกมและการสร้างเนื้อหาดิจิทัล มันรองรับโครงสร้างฉากที่ซับซ้อน, วัสดุ, และแอนิเมชัน Aspose.3D FOSS สำหรับ Java รองรับ FBX สำหรับ นำเข้าเท่านั้น – การส่งออกเป็น FBX ไม่พร้อมใช้งาน.

การโหลดไฟล์ FBX

Scene scene = Scene.fromFile("character.fbx");

// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);

การแปลง FBX เป็นรูปแบบอื่น

เนื่องจากการส่งออก FBX ไม่ได้รับการสนับสนุน ให้แปลงฉาก FBX ที่นำเข้าเป็น glTF, GLB, OBJ หรือ STL:

Scene scene = Scene.fromFile("character.fbx");

// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);

กรณีการใช้ FBX

  • การนำเข้าแอสเซ็ตจากเครื่องมือของ Autodesk (Maya, 3ds Max) และแปลงเป็นรูปแบบอื่น.
  • กำลังโหลดตัวละครที่มีโครงกระดูกและฉากที่เคลื่อนไหวเพื่อทำการส่งออกใหม่เป็น glTF/GLB.

การแปลงแบบชุด

กระบวนการทำงานทั่วไปคือการแปลงไดเรกทอรีทั้งหมดของไฟล์จากรูปแบบหนึ่งไปยังอีกรูปแบบหนึ่ง ต่อไปนี้คือตัวอย่างสำหรับการแปลงแบบชุด:

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");
        }
    }
}

นี้โหลดทุก .obj ไฟล์ในไดเรกทอรี, แปลงแต่ละไฟล์เป็น glTF พร้อมการพิมพ์ผลลัพธ์ที่สวยงาม, และบันทึกผลลัพธ์ คุณสามารถปรับใช้รูปแบบนี้สำหรับการผสมผสานรูปแบบแหล่งที่มาและเป้าหมายใดก็ได้.

อ้างอิงการแปลงข้ามรูปแบบ

ตารางต่อไปนี้แสดงสิ่งที่คาดหวังเมื่อทำการแปลงระหว่างรูปแบบต่าง ๆ.

จากถึงเรขาคณิตวัสดุลำดับชั้นหมายเหตุ
OBJSTLคงไว้หายN/ASTL ไม่มีการสนับสนุนวัสดุ
OBJglTF/GLBคงไว้แปลงเป็น PBRแบนวัสดุ MTL ถูกแมปเมื่อเป็นไปได้
STLOBJคงไว้ไม่มีN/Aไม่มีวัสดุในแหล่งที่มา
STLglTF/GLBคงไว้ค่าเริ่มต้นแบนใช้วัสดุค่าเริ่มต้น
glTFOBJคงไว้แบบง่ายแบนPBR ไปเป็นวัสดุพื้นฐาน
glTFSTLคงไว้หายไปแบนเฉพาะเรขาคณิต
FBXOBJคงไว้ทำให้เรียบง่ายแบนการทำให้วัสดุเรียบง่าย
FBXSTLคงไว้หายแบนเฉพาะเรขาคณิต
FBXglTF/GLBคงไว้แปลงเป็น PBRคงไว้ความเที่ยงตรงที่ดี

แนวทางการแปลงทั่วไป

  • เรขาคณิต จะคงไว้เสมอในทุกคู่รูปแบบ.
  • วัสดุ ทำงานได้ดีที่สุดระหว่าง glTF และ FBX ซึ่งทั้งสองรองรับโมเดลวัสดุที่ซับซ้อน การแปลงเป็น STL จะทำให้วัสดุหายไปเสมอ การแปลงเป็น OBJ จะทำให้วัสดุง่ายลงเป็นโมเดล MTL พื้นฐาน.
  • ลำดับชั้นของฉาก จะถูกคงไว้ระหว่าง glTF และ FBX. OBJ และ STL จะสร้างโครงสร้างแบบแบน.

รวมทุกอย่างเข้าด้วยกัน

นี่คือตัวอย่างเต็มที่โหลดไฟล์ OBJ ตรวจสอบโหนดของมัน และส่งออกเป็นทั้ง glTF และ 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.");
    }
}

สรุป

Aspose.3D FOSS for Java ให้ API ที่สอดคล้องกันในหลายรูปแบบ จุดสำคัญคือ:

  • OBJ – การแลกเปลี่ยนเมชแบบง่ายพร้อมวัสดุพื้นฐาน.
  • STL – ฟอร์แมตที่มีเฉพาะเรขาคณิตสำหรับกระบวนการพิมพ์ 3 มิติ.
  • glTF / GLB – ฟอร์แมตสมัยใหม่ที่รองรับ PBR สำหรับการใช้งานบนเว็บและเรียลไทม์. ใช้ GltfSaveOptions กับ setContentType(FileContentType.BINARY) สำหรับการส่งออก GLB.
  • FBX – นำเข้าเท่านั้น; รูปแบบที่สมบูรณ์สำหรับการโหลดแอสเซ็ตจากเอนจินเกมและเครื่องมือ DCC.

ใช้คลาสตัวเลือกการโหลดและบันทึกที่เฉพาะเจาะจงตามรูปแบบ (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) เมื่อคุณต้องการการควบคุมอย่างละเอียดในการนำเข้า หรือส่งออกกระบวนการ.

สำหรับรายละเอียดเพิ่มเติม, เยี่ยมชม เอกสาร Aspose.3D หรือเรียกดูซอร์สโค้ดบน GitHub.