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 พร้อมการพิมพ์ผลลัพธ์ที่สวยงาม, และบันทึกผลลัพธ์ คุณสามารถปรับใช้รูปแบบนี้สำหรับการผสมผสานรูปแบบแหล่งที่มาและเป้าหมายใดก็ได้.
อ้างอิงการแปลงข้ามรูปแบบ
ตารางต่อไปนี้แสดงสิ่งที่คาดหวังเมื่อทำการแปลงระหว่างรูปแบบต่าง ๆ.
| จาก | ถึง | เรขาคณิต | วัสดุ | ลำดับชั้น | หมายเหตุ |
|---|---|---|---|---|---|
| OBJ | STL | คงไว้ | หาย | N/A | STL ไม่มีการสนับสนุนวัสดุ |
| OBJ | glTF/GLB | คงไว้ | แปลงเป็น PBR | แบน | วัสดุ MTL ถูกแมปเมื่อเป็นไปได้ |
| STL | OBJ | คงไว้ | ไม่มี | N/A | ไม่มีวัสดุในแหล่งที่มา |
| STL | glTF/GLB | คงไว้ | ค่าเริ่มต้น | แบน | ใช้วัสดุค่าเริ่มต้น |
| glTF | OBJ | คงไว้ | แบบง่าย | แบน | PBR ไปเป็นวัสดุพื้นฐาน |
| glTF | STL | คงไว้ | หายไป | แบน | เฉพาะเรขาคณิต |
| FBX | OBJ | คงไว้ | ทำให้เรียบง่าย | แบน | การทำให้วัสดุเรียบง่าย |
| FBX | STL | คงไว้ | หาย | แบน | เฉพาะเรขาคณิต |
| FBX | glTF/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.