เรามีความยินดีที่จะประกาศความเป็นอยู่ของ 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)
ดาวน์โหลดและบันทึกตัวเลือก
แต่ละรูปแบบมีคลาสตัวเลือกที่กําหนดเองซึ่งช่วยให้คุณสามารถควบคุมการนําเข้าและส่งออกพฤติกรรม:
| รูปแบบ | โหลดตัวเลือก | การบันทึกตัวเลือก |
|---|---|---|
| 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 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
ความต้องการของระบบ
| ความต้องการ | รายละเอียด |
|---|---|
| รุ่น Java | 21 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.