เราตื่นเต้นที่จะประกาศการพร้อมใช้งานของ 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)
ตัวเลือกการโหลดและบันทึก
แต่ละรูปแบบมีคลาสตัวเลือกเฉพาะที่ให้คุณควบคุมพฤติกรรมการนำเข้าและส่งออก:
| รูปแบบ | โหลดตัวเลือก | บันทึกตัวเลือก |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| glTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | – (นำเข้าเท่านั้น) |
ตัวอย่างเช่น การส่งออก 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.