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

บทความนี้จะผ่านสิ่งที่ห้องสมุดเสนอวิธีการเริ่มต้นและจากที่นี่ไปไหน.

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

Aspose.3D FOSS for Java เป็นห้องปฏิบัติการประมวลผลไฟล์ 3D ที่น้ําหนักเบาที่เผยแพร่ภายใต้แถลงการณ์เกี่ยวกับการใช้งานของ Java ใบอนุญาต. มันให้ API แผ่นที่ช่วยให้คุณสามารถโหลดการตรวจสอบการแปลงและการบันทึกรูปแบบ 3D ในหลายแบบที่ใช้กันอย่างแพร่หลาย ห้องสมุดจะเขียนใน Java และไม่จําเป็นต้องมีการกําหนดค่าด้านนอกหรือแพลตฟอร์มเฉพาะ.

รหัสแหล่งข้อมูลนี้มีอยู่ใน GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

ความสําคัญ

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

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

การติดตั้ง Maven

เพิ่มความเสี่ยงต่อไปนี้ให้กับคุณ pom.xml:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.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");
    }
}

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

สร้างสถานการณ์จาก Scratch

คุณยังสามารถสร้างภาพยนตร์อย่างโปรแกรมได้:

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

นี้สร้างภาพแวดล้อมใหม่เพิ่มคอยล์เด็กที่เรียกว่า “กล่อง” ด้านล่างของรากตําแหน่งมันในสแกน (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");
    }
}

ภาษาไทย Scene.fromFile() วิธีการเสถียรภาพยอมรับประเภทใด ๆ ของตัวเลือกโหลด: 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());
            }
        }
    }
}

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

การใช้การเปลี่ยนแปลง

การตั้งค่าคิวส์ในพื้นที่ 3D จะทําผ่าน 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");
    }
}

การเปลี่ยนแปลงตามรูปแบบการเป็นพันธุกรรมของพ่อแม่และเด็กมาตรฐาน: ตําแหน่งโลกพื้นที่ของเด็กคือการรวมของการแปลงท้องถิ่นของเขาและผู้ปกครองทั้งหมดจะเปลี่ยนไปจนถึงราก.

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

ห้องสมุดมีชุดความสามารถที่มุ่งเน้นออกแบบรอบ ๆ แบบภาพวาด 3D.

ภาพถ่ายภาพยนตร์

แผ่นภาพเป็นพื้นหลังของ API. ไฟล์ 3D ทุกอย่างถูกแสดงเป็นโครงสร้างต้นไม้:

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

วัสดุ

บิตยสารให้รูปแบบวัสดุ PBR (ฟิสิกส์ตาม Rendering) :

  • PbrMaterial – วัสดุการแสดงผลตามทางกายภาพที่มี albedo, metallness, ruginess, สีที่ปล่อยและโปร่งใส นี่คือชั้นวัสดุก่อเฉพาะเท่านั้นที่สามารถใช้ได้ใน Java Edition.

เครื่องมือ Math

หลักสูตร com.aspose.threed แพคเกจรวมถึงหลักสูตรแม่พิมพ์ที่สําคัญ:

  • วีดีโอ3 - 3 ส่วน vector สําหรับตําแหน่งแนวทางและสี.
  • มะติน4 - 4x4 การแปลงมิตริกซ์.
  • สี่เหลี่ยม - การแสดงผลหมุน.
  • 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 for Java สามารถอ่านและเขียนได้.

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

OBJ, STL, glTF และ GLB สนับสนุนทั้งการโหลดและประหยัด FBX จะสนับสนุนสําหรับการนําเข้าเท่านั้น.

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

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

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

ข้อ จํากัด ที่รู้จักกันดี

มันเป็นสิ่งสําคัญที่จะสังเกตว่า Scene.render() เป็น ไม่สนับสนุน ใน FOSS การพิมพ์. โดยเรียกว่าวิธีการนี้จะโยน UnsupportedOperationException.หมายเลขที่กําหนดไว้สําหรับการประมวลผล 3D - การโหลดการจัดการการแปลงและการบันทึกรูปแบบ - แทนที่จะส่งภาพในเวลาจริงไปยังจอแสดงผล.

หลักสูตรและใบอนุญาต

Aspose.3D FOSS for Java จะถูกปล่อยให้ลงในด้านล่างของ ใบอนุญาต MIT.นี่หมายความว่าคุณจะได้รับฟรี:

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

ไม่มีค่าธรรมเนียมการเป็นเจ้าของไม่มีข้อ จํากัด การใช้และไม่จําเป็นต้องกําหนดการรับผิดชอบมากกว่าที่ระบุโดยใบอนุญาต MIT.

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

ความต้องการของระบบ

ความต้องการรายละเอียด
รุ่น Java21 or later
ความเป็นมิตรไม่มี (Java ฟรี)
โพลตฟอร์มใด ๆ พื้นที่ทํางาน JVM
สร้างเครื่องมือMaven (แนะนํา)

เริ่มต้น

นี่คือทรัพยากรที่จะช่วยให้คุณขึ้นและทํางาน:

  • การจัดทําเอกสาร – คู่มือที่ครอบคลุมและเส้นทาง API มีอยู่บน Aspose.3D เว็บไซต์การจัดทําเอกสาร.
  • ฐานความรู้ – วิธีการปฏิบัติในการเขียนบทความและเคล็ดลับการแก้ปัญหาใน แพ็ค 3D KB.
  • แอปพลิเคชัน - รายละเอียดของชั้นและวิธีการที่อ้างอิงใน แอพลิเคชัน API Aspose.3D.
  • รหัสแหล่งข้อมูล - สํารวจและมีส่วนร่วมในการ GitHub.
  • มาเวอร์เซนต์ - บรรจุภัณฑ์จะถูกเผยแพร่เป็น org.aspose:aspose-3d-foss:26.5.0 ใน 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 scene-graph, วัสดุและเครื่องมือ math.
  • คู่มือที่ปฏิบัติในการทํางานกับรูปแบบ 3D ที่ได้รับการสนับสนุน - OBJ, STL, glTF และ FBX - รวมถึงตัวเลือกโหลด / การบันทึกและโครงสร้างการแปลงแบบพับ.

ปล่อยให้มีความสุขและรู้สึกอิสระที่จะสํารวจห้องสมุดและแบ่งปันความคิดเห็นของคุณบน GitHub.