เราตื่นเต้นที่จะประกาศการพร้อมใช้งานของ Aspose.3D FOSS สำหรับ Java – ไลบรารีฟรีและโอเพ่นซอร์สสำหรับทำงานกับรูปแบบไฟล์ 3D ในแอปพลิเคชัน Java สร้างเป็นโซลูชัน Java แท้โดยไม่มีการพึ่งพาเนทีฟ ไลบรารีทำงานบน Java 21 และรุ่นต่อไป ทำให้เข้าถึงได้สำหรับโครงการและสภาพแวดล้อมหลากหลาย.

โพสต์นี้จะอธิบายว่ามีอะไรบ้างในไลบรารี, วิธีเริ่มต้นใช้งาน, และขั้นตอนต่อไป.

อะไรคือ Aspose.3D FOSS สำหรับ Java?

Aspose.3D FOSS สำหรับ Java เป็นไลบรารีประมวลผลไฟล์ 3D ที่มีน้ำหนักเบาเผยแพร่ภายใต้ the MIT license. มันให้ API แบบ scene-graph ที่ช่วยให้คุณโหลด ตรวจสอบ แปลงรูปแบบ และบันทึกโมเดล 3D ผ่านหลายรูปแบบที่ใช้กันอย่างกว้างขวาง ไลบรารีเขียนทั้งหมดด้วย Java และไม่ต้องการไบนารีเนทีฟภายนอกหรือการกำหนดค่าที่เฉพาะแพลตฟอร์ม.

ซอร์สโค้ดพร้อมให้ใช้งานบน GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

จุดเด่นสำคัญ

  • บริสุทธิ์ Java – ไม่มี JNI, ไม่มีไลบรารีเนทีฟ, ไม่มีข้อจำกัดของแพลตฟอร์ม.
  • Java 21+ เข้ากันได้.
  • ได้รับใบอนุญาต MIT – ใช้ได้ในโครงการส่วนบุคคล, เชิงพาณิชย์ หรือโครงการที่เป็นกรรมสิทธิ์โดยไม่มีข้อจำกัด.
  • สถาปัตยกรรมกราฟฉาก – ต้นไม้ที่คุ้นเคยของ nodes, meshes, cameras, และ materials.
  • การสนับสนุนหลายรูปแบบ – อ่านและเขียนไฟล์ OBJ, STL, glTF 2.0, และ GLB; อ่านไฟล์ FBX.

เริ่มต้นอย่างรวดเร็ว

การติดตั้ง Maven

เพิ่ม dependency ต่อไปนี้ในของคุณ pom.xml:

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

การแปลงครั้งแรกของคุณ

กรณีการใช้งานที่ง่ายที่สุดคือการโหลดไฟล์ 3D ในรูปแบบหนึ่งและบันทึกเป็นรูปแบบอื่น นี่คือตัวอย่างการแปลงสองบรรทัดจาก OBJ ไปเป็น STL:

import com.aspose.threed.*;

public class QuickConvert {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("cube.obj");
        scene.save("output.stl");
    }
}

The Scene class เป็นจุดเริ่มต้นหลัก. เรียก Scene.fromFile() ด้วยเส้นทางไฟล์เพื่อโหลดโมเดล, จากนั้นเรียก save() ด้วยเส้นทางเป้าหมาย. ไลบรารีจะสรุปรูปแบบจากส่วนขยายของไฟล์.

สร้าง Scene ตั้งแต่ต้น

คุณยังสามารถสร้าง Scene ด้วยโปรแกรมได้เช่นกัน:

import com.aspose.threed.*;

public class BuildScene {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();
        Node node = scene.getRootNode().createChildNode("Box");

        Transform t = node.getTransform();
        t.setTranslation(1, 2, 3);

        scene.save("scene.gltf");
    }
}

นี้จะสร้าง scene ใหม่, เพิ่มโหนดลูกชื่อ “Box” ใต้ราก, กำหนดตำแหน่งที่พิกัด (1, 2, 3) และส่งออกผลลัพธ์เป็นไฟล์ glTF.

การโหลดด้วยตัวเลือกเฉพาะรูปแบบ

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

import com.aspose.threed.*;

public class LoadWithOptions {
    public static void main(String[] args) throws Exception {
        StlLoadOptions opts = new StlLoadOptions();
        Scene scene = Scene.fromFile("part.stl", opts);

        // Inspect the loaded scene
        System.out.println("Root children: "
            + scene.getRootNode().getChildNodes().size());

        // Re-export as OBJ
        scene.save("part.obj");
    }
}

The Scene.fromFile() static method รับประเภทของตัวเลือกการโหลดใดก็ได้: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, หรือ FbxLoadOptions.

การสำรวจกราฟฉาก

เมื่อฉากถูกโหลดแล้ว คุณสามารถเดินทางผ่านต้นไม้โหนดเพื่อตรวจสอบหรือแก้ไขเนื้อหาของมันได้:

import com.aspose.threed.*;

public class TraverseScene {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("model.gltf");

        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("Node: " + child.getName());

            Transform t = child.getTransform();
            System.out.println("  Translation: " + t.getTranslation());

            Entity entity = child.getEntity();
            if (entity instanceof Mesh) {
                Mesh mesh = (Mesh) entity;
                System.out.println("  Vertices: "
                    + mesh.getControlPoints().size());
            }
        }
    }
}

รูปแบบนี้มีประโยชน์สำหรับการดีบัก การสร้างรายงานเกี่ยวกับเนื้อหาโมเดล หรือการแก้ไขส่วนต่าง ๆ ของฉากอย่างเลือกสรรก่อนทำการส่งออกใหม่.

การใช้การแปลง

การจัดตำแหน่งโหนดในพื้นที่ 3 มิติทำได้ผ่าน Transform อ็อบเจกต์บนแต่ละ Node:

import com.aspose.threed.*;

public class TransformExample {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();

        Node parent = scene.getRootNode().createChildNode("Parent");
        parent.getTransform().setTranslation(10, 0, 0);

        Node child = parent.createChildNode("Child");
        child.getTransform().setTranslation(5, 0, 0);
        child.getTransform().setScale(2, 2, 2);

        // Child's world position is (15, 0, 0) due to
        // parent-child transform inheritance

        scene.save("transformed.gltf");
    }
}

การแปลง (Transforms) ปฏิบัติตามโมเดลการสืบทอดแบบพาเรนท์‑ชิลด์มาตรฐาน: ตำแหน่งในพื้นที่โลกของวัตถุลูกเป็นผลรวมของการแปลงในระดับท้องถิ่นและการแปลงของบรรพบุรุษทั้งหมดจนถึงราก.

สิ่งที่รวมอยู่

ไลบรารีมาพร้อมกับชุดความสามารถที่มุ่งเน้นซึ่งออกแบบโดยอิงโมเดลกราฟฉาก 3D.

กราฟฉาก

กราฟฉากเป็นโครงกระดูกของ API ทุกไฟล์ 3D จะถูกแสดงเป็นโครงสร้างต้นไม้:

คลาสบทบาท
Sceneคอนเทนเนอร์ระดับบนสุด; รากของกราฟฉาก
Nodeตำแหน่งที่มีชื่อในต้นไม้; เก็บการแปลงและโหนดลูก
Entityฐานเชิงนามธรรมสำหรับวัตถุภาพที่แนบกับโหนด
Meshเรขาคณิตหลายเหลี่ยม – จุดยอด, หน้า, เวกเตอร์ปกติ
Cameraคำนิยามกล้องเสมือน
Transformการแปล, การหมุน, และการสเกลในระดับท้องถิ่นสำหรับโหนด
GlobalTransformการแปลงเชิงพื้นที่โลกที่คำนวณแล้ว

วัสดุ

ไลบรารีให้โมเดลวัสดุ PBR (Physically Based Rendering):

  • PbrMaterial – วัสดุการเรนเดอร์แบบอิงฟิสิกส์ที่มี albedo, metalness, roughness, สีเรืองแสง, และความโปร่งใส. นี่คือคลาสวัสดุที่เป็นรูปธรรมเดียวที่มีในรุ่น Java.

ยูทิลิตี้คณิตศาสตร์

The com.aspose.threed แพคเกจรวม primitive คณิตศาสตร์ที่จำเป็น:

  • Vector3 – เวกเตอร์ 3 ส่วนสำหรับตำแหน่ง, ทิศทาง, และสี.
  • Matrix4 – เมทริกซ์การแปลง 4x4.
  • Quaternion – การแสดงการหมุน.
  • BoundingBox – กล่องขอบเขตที่จัดแนวตามแกนสำหรับการสืบค้นเชิงพื้นที่.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

ตัวเลือกการโหลดและบันทึก

แต่ละรูปแบบมีคลาสตัวเลือกเฉพาะที่ให้คุณควบคุมพฤติกรรมการนำเข้าและส่งออก:

รูปแบบโหลดตัวเลือกบันทึกตัวเลือก
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (นำเข้าเท่านั้น)

ตัวอย่างเช่น การส่งออก glTF พร้อม JSON ที่จัดรูปแบบสวยงามและระบบพิกัดที่กลับด้าน:

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

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

รูปแบบที่รองรับ

ตารางต่อไปนี้สรุปรูปแบบที่ Aspose.3D FOSS สำหรับ Java สามารถอ่านและเขียนได้.

รูปแบบส่วนขยายนำเข้าส่งออกบันทึก
OBJ.objใช่ใช่ด้วยวัสดุ MTL
STL.stlใช่ใช่ไบนารี + ASCII
glTF 2.0.gltfใช่ใช่รูปแบบ JSON
GLB.glbใช่ใช่Binary glTF ผ่าน GltfSaveOptions
FBX.fbxใช่ไม่นำเข้าเท่านั้น

OBJ, STL, glTF, และ GLB รองรับการโหลดและการบันทึกทั้งสองอย่าง. FBX รองรับเฉพาะการนำเข้าเท่านั้น.

คู่มือการเลือกรูปแบบ

การเลือกรูปแบบที่เหมาะสมขึ้นอยู่กับกรณีการใช้งานของคุณ:

  • OBJ เป็นตัวเลือกที่เหมาะสมเมื่อคุณต้องการความเข้ากันได้สูงสุดกับเครื่องมือ 3D ทุกประเภท เกือบทุกแอปพลิเคชันการสร้างโมเดลสามารถอ่านและเขียน OBJ ได้ มันทำงานได้ดีสำหรับการแลกเปลี่ยนข้อมูลเมช แต่จะส่งต่อข้อมูลวัสดุพื้นฐานเท่านั้นผ่านไฟล์ MTL คู่มือ.
  • STL เป็นรูปแบบที่เลือกใช้สำหรับกระบวนการพิมพ์ 3D มันเก็บเรขาคณิตที่ทำเป็นสามเหลี่ยมดิบโดยไม่มีวัสดุหรือโครงสร้างฉาก ซึ่งตรงกับที่ซอฟต์แวร์สไลเซอร์ต้องการ หากกระบวนการของคุณสิ้นสุดที่เครื่องพิมพ์ 3D STL คือทางเลือกที่ตรงไปตรงมาที่สุด.
  • glTF เป็นมาตรฐานสมัยใหม่สำหรับเว็บและ 3D แบบเรียลไทม์ รองรับวัสดุ PBR, โครงสร้างฉากเต็มรูปแบบ, และออกแบบมาเพื่อการส่งข้อมูลที่มีประสิทธิภาพ ใช้ glTF เมื่อสร้างตัวดูบนเว็บ, ทำงานกับ three.js หรือ Babylon.js, หรือมุ่งเป้าไปยังพายป์ไลน์การเรนเดอร์แบบเรียลไทม์ใด ๆ.
  • FBX ถูกรวมอย่างลึกซึ้งในกระบวนการพัฒนาเกมและการสร้างเนื้อหาดิจิทัล รองรับข้อมูลฉากที่หลากหลายรวมถึงโครงสร้างและวัสดุ Aspose.3D FOSS สำหรับ Java รองรับ FBX นำเข้าเท่านั้น – ใช้เพื่อโหลดทรัพยากร FBX และแปลงเป็นรูปแบบอื่น.

ข้อจำกัดที่ทราบ

ควรสังเกตว่า Scene.render() คือ ไม่รองรับ ในรุ่น FOSS. การเรียกใช้เมธอดนี้จะทำให้เกิด UnsupportedOperationException. ไลบรารีนี้ออกแบบมาสำหรับการประมวลผล 3D แบบไฟล์ – การโหลด, การจัดการ, การแปลง, และการบันทึกโมเดล – แทนการเรนเดอร์แบบเรียลไทม์ไปยังหน้าจอ.

โอเพนซอร์สและการให้สิทธิ์

Aspose.3D FOSS สำหรับ Java ได้รับการเผยแพร่ภายใต้ MIT License. ซึ่งหมายความว่าคุณมีอิสระที่จะ:

  • ใช้ไลบรารีในแอปพลิเคชันเชิงพาณิชย์และที่เป็นกรรมสิทธิ์.
  • แก้ไขซอร์สโค้ดให้ตรงกับความต้องการของคุณ.
  • แจกจ่ายไลบรารีเป็นส่วนหนึ่งของซอฟต์แวร์ของคุณเอง.

ไม่มีค่าลิขสิทธิ์ ไม่มีขีดจำกัดการใช้งาน และไม่มีข้อกำหนดการอ้างอิงนอกเหนือจากที่สัญญาอนุญาต MIT ระบุไว้.

โค้ดต้นฉบับทั้งหมดถูกโฮสต์บน GitHub และยินดีรับการมีส่วนร่วม: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

ข้อกำหนดระบบ

ข้อกำหนดรายละเอียด
Java เวอร์ชัน21 or later
การพึ่งพาไม่มี (pure Java)
แพลตฟอร์มแพลตฟอร์มใดก็ได้ที่รัน JVM
เครื่องมือสร้างMaven (แนะนำ)

เริ่มต้นใช้งาน

ต่อไปนี้คือทรัพยากรที่จะช่วยให้คุณเริ่มต้นและทำงานได้:

  • เอกสาร – คู่มือเชิงลึกและการสาธิต API มีให้บริการบน Aspose.3D เว็บไซต์เอกสาร.
  • ฐานความรู้ – บทความวิธีทำเชิงปฏิบัติและเคล็ดลับการแก้ปัญหาใน Aspose.3D KB.
  • อ้างอิง API – รายละเอียดการอ้างอิงคลาสและเมธอดที่ Aspose.3D อ้างอิง API.
  • ซอร์สโค้ด – เรียกดูและมีส่วนร่วมบน GitHub.
  • Maven Central – แพคเกจถูกเผยแพร่เป็น com.aspose:aspose-3d-foss บน Maven Central.

กรณีการใช้งานทั่วไป

ต่อไปนี้เป็นสถานการณ์การใช้งานจริงที่ Aspose.3D FOSS สำหรับ Java เหมาะสม:

สายงานการแปลงรูปแบบ

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

// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");

GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);

scene.save("asset.glb", opts);

3D Model Inspection and Validation

ก่อนที่คุณจะรวมสินทรัพย์ 3D เข้ากับแอปพลิเคชันของคุณ คุณอาจต้องการตรวจสอบเนื้อหา – ตรวจสอบจำนวนโหนด, ยืนยันรูปทรงเรขาคณิต, หรือยืนยันว่ามีองค์ประกอบที่คาดหวังอยู่:

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

int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);

for (Node child : scene.getRootNode().getChildNodes()) {
    if (child.getEntity() instanceof Mesh) {
        Mesh mesh = (Mesh) child.getEntity();
        System.out.println(child.getName() + ": "
            + mesh.getControlPoints().size() + " vertices");
    }
}

การประกอบฉาก

คุณสามารถโหลดโมเดลหลายแบบและรวมเข้าด้วยกันเป็นฉากเดียว:

Scene scene = new Scene();

Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");

// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}

scene.save("assembled.gltf");

ต่อไปคืออะไร

ในโพสต์ต่อไปนี้ เราจะครอบคลุม:

  • การสำรวจเชิงลึกคุณลักษณะสำคัญของ API กราฟฉาก, วัสดุ, และยูทิลิตี้คณิตศาสตร์.
  • คู่มือเชิงปฏิบัติเกี่ยวกับการทำงานกับแต่ละรูปแบบ 3D ที่รองรับ – OBJ, STL, glTF, และ FBX – รวมถึงตัวเลือกการโหลด/บันทึกและรูปแบบการแปลงเป็นชุด.

ติดตามต่อไป และอย่าลังเลที่จะสำรวจไลบรารีและแบ่งปันข้อเสนอแนะของคุณบน GitHub.