คุณลักษณะและฟังก์ชันการทำงาน
คุณลักษณะและฟังก์ชันการทำงาน
หน้านี้ครอบคลุมทุกพื้นที่ฟีเจอร์หลักของ aspose-3d-foss 26.1.0 พร้อมตัวอย่าง Java ที่ทำงานได้.
การโหลดและบันทึกฉาก
scene.open() โหลดไฟล์; scene.save() ส่งออกไฟล์นั้น:
import com.aspose.threed.Scene;
Scene scene = new Scene();
scene.open("input.obj");
scene.save("output.glb");ทางเลือกฟา́กทอรีสถิต:
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.stl");ตัวเลือกเฉพาะรูปแบบ
ส่งผ่าน LoadOptions หรือ SaveOptions คลาสย่อยสำหรับการควบคุมที่ละเอียด:
import com.aspose.threed.*;
Scene scene = new Scene();
ObjLoadOptions opts = new ObjLoadOptions();
opts.setFlipCoordinateSystem(true);
scene.open("model.obj", opts);
GltfSaveOptions saveOpts = new GltfSaveOptions();
saveOpts.setFlipCoordinateSystem(true);
scene.save("model.glb", saveOpts);หมายเหตุ: FBX รองรับเฉพาะการนำเข้า; การส่งออก FBX ยังไม่ได้รับการพัฒนาในเวอร์ชัน FOSS. เท่านั้น ไบนารี FBX ไฟล์ที่รองรับการนำเข้า — ASCII FBX จะทำให้เกิดข้อผิดพลาด ImportException.
การสร้างกราฟฉาก
สร้างโหนดและแนบเอนทิตี:
Scene scene = new Scene();
Node root = scene.getRootNode();
Mesh mesh = new Mesh("myMesh");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 10, 0));
mesh.createPolygon(0, 1, 2);
Node meshNode = root.createChildNode("triangle", mesh);การดำเนินการเมช
สร้าง Mesh โดยโปรแกรมด้วยจุดควบคุมและโพลิกอน:
Mesh mesh = new Mesh("custom");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 10, 0));
mesh.getControlPoints().add(new Vector4(0, 10, 0));
mesh.createPolygon(0, 1, 2, 3);การแปลง
ทุก Node บรรทุก Transform:
Node node = scene.getRootNode().createChildNode("moved", new Mesh());
node.getTransform().setTranslation(10, 0, 5);
node.getTransform().setScale(2, 2, 2);อ่านพื้นที่โลกผ่าน node.getGlobalTransform().getMatrix().
วัสดุ
กำหนดวัสดุให้กับโหนด:
PbrMaterial mat = new PbrMaterial("shiny");
mat.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0));
mat.setMetallicFactor(0.5);
mat.setRoughnessFactor(0.3);
scene.getRootNode().createChildNode("red_mesh", mesh, mat);ประเภทวัสดุ: Material (ฐาน), PbrMaterial (PBR metallic-roughness).
เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- ใช้
Scene.fromFile()สำหรับการโหลดแบบบรรทัดเดียวเมื่อไม่ต้องการตัวเลือกแบบกำหนดเอง - สร้างเมชโดยโปรแกรมด้วย
createPolygon()สำหรับเรขาคณิตแบบกำหนดเอง - ใช้
.glbส่วนขยายสำหรับผลลัพธ์ glTF แบบไบนารีที่กะทัดรัด - ตรวจสอบ
node.getEntity() != nullก่อนทำการแคสท์ - การส่งออก STL ทำ ไม่ ทำการแปลงรูปหลายเหลี่ยมเป็นสามเหลี่ยมโดยอัตโนมัติ การส่งออก STL แบบไบนารีจะเขียนเฉพาะ 3 เวอร์เท็กซ์แรกของแต่ละหน้ารูปหลายเหลี่ยม — หน้ารูปสี่เหลี่ยมหรือ n‑gon จะถูกตัดทอนโดยไม่มีการแจ้งเตือน การส่งออก STL แบบ ASCII จะเขียนดัชนีเวอร์เท็กซ์ทั้งหมด ซึ่งทำให้บล็อก facet มีรูปแบบผิดพลาดสำหรับหน้าที่ไม่ใช่สามเหลี่ยม ควรส่งเมชที่ผ่านการแปลงเป็นสามเหลี่ยมล่วงหน้า (ทุกหน้าเป็นสามเหลี่ยม) ไปยังการส่งออก STL เสมอเพื่อหลีกเลี่ยงการสูญเสียข้อมูลหรือผลลัพธ์ที่ไม่ถูกต้อง.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | แก้ไข |
|---|---|---|
| ข้อยกเว้นขณะโหลด | ไฟล์ที่ไม่รองรับหรือเสียหาย | ตรวจสอบว่าไฟล์เปิดในตัวดู 3D |
| วัสดุหายหลังจากโหลด OBJ | .mtl ไม่พบไฟล์ | วาง .mtl ข้าง .obj; ตรวจสอบให้แน่ใจว่าเปิดใช้งานวัสดุแล้ว |
| ขนาดสเกลไม่ตรงกันหลังการนำเข้า | ระบบหน่วยที่แตกต่างกัน | ใช้ Transform สเกลหลังการโหลด |
FAQ
ฉันจะตรวจจับรูปแบบไฟล์ได้อย่างไร?
FileFormat format = FileFormat.detect("unknown.bin");
System.out.println(format.getExtension());ฉันสามารถโหลดจากสตรีมได้หรือไม่?
ใช่. scene.open() รับ InputStream.
รูปแบบใดบ้างที่รองรับการนำเข้าและส่งออกทั้งสองอย่าง?
OBJ, STL, และ glTF/GLB รองรับทั้งสองทิศทาง. FBX เป็นแบบนำเข้าเท่านั้น; การส่งออกยังไม่ได้รับการดำเนินการในเวอร์ชัน FOSS.
สรุปอ้างอิง API
| คลาส / เมธอด | คำอธิบาย |
|---|---|
Scene | คอนเทนเนอร์ฉาก 3D ระดับบนสุด |
scene.open() | โหลดไฟล์ 3D ด้วยเส้นทางหรือสตรีม |
scene.save() | ส่งออกฉากไปยังไฟล์หรือสตรีม |
Scene.fromFile() | ฟังก์ชันสร้างสแตติกเพื่อโหลดและคืนค่า Scene |
Node | โหนดลำดับชั้นของฉาก |
node.createChildNode() | สร้างและแนบโหนดลูก |
Mesh | Polygon mesh พร้อมจุดควบคุมและรายการหน้า |
mesh.createPolygon() | กำหนดหน้าโพลิกอน |
Mesh.toMesh() | แปลงหรือคัดลอกเรขาคณิตเมช |
Transform | การแปลงตำแหน่ง, การหมุน, และการสเกลแบบท้องถิ่น |
FileFormat | ทะเบียนและตัวตรวจจับสำหรับรูปแบบ |