คุณลักษณะและฟังก์ชันการทำงาน
คุณลักษณะและฟังก์ชันการทำงาน
หน้านี้ครอบคลุมทุกพื้นที่ฟีเจอร์หลักของ Aspose.3D 26.1.0 พร้อมตัวอย่าง C# ที่ทำงานได้.
การโหลดและบันทึกฉาก
Scene.Open() โหลดไฟล์; Scene.Save() ส่งออกไฟล์นั้น รูปแบบจะถูกตรวจจับจากส่วนขยายของไฟล์:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");ใช้ฟังก์ชันสร้างแบบสแตติก Scene.FromFile() เป็นทางเลือกอื่น:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");ตัวเลือกเฉพาะรูปแบบ
ส่งผ่าน LoadOptions หรือ SaveOptions คลาสย่อยสำหรับการควบคุมที่ละเอียด:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");คลาสตัวเลือกที่มี:
| คลาส | ทิศทาง | คุณสมบัติสำคัญ |
|---|---|---|
ObjLoadOptions | นำเข้า | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | ส่งออก | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | นำเข้า | (การตั้งค่าเริ่มต้น) |
GltfLoadOptions | นำเข้า | (การตั้งค่าเริ่มต้น) |
GltfSaveOptions | ส่งออก | (การตั้งค่าเริ่มต้น) |
StlLoadOptions | นำเข้า | (การตั้งค่าเริ่มต้น) |
StlSaveOptions | ส่งออก | (การตั้งค่าเริ่มต้น) |
ColladaLoadOptions | นำเข้า | FlipCoordinateSystem |
ColladaSaveOptions | ส่งออก | Indented, TransformStyle |
PlyLoadOptions | นำเข้า | (การตั้งค่าเริ่มต้น) |
การสร้างกราฟฉาก
สร้างโหนดและแนบเอนทิตีเพื่อสร้างโครงสร้างลำดับชั้น:
var scene = new Scene();
var root = scene.RootNode;
var boxNode = root.CreateChildNode("box", new Box(5, 5, 5));
var sphereNode = root.CreateChildNode("sphere", new Sphere(3));เข้าถึงลูกผ่าน node.ChildNodes และเอนทิตีที่แนบมาผ่าน node.Entity.
เมชและรูปทรงพื้นฐาน
สร้าง Mesh โดยใช้โปรแกรมกับจุดควบคุมและรูปหลายเหลี่ยม:
// Mesh.ControlPoints uses Aspose.ThreeD.Utilities.Vector4
// (double-precision, lowercase fields: x, y, z, w)
using Aspose.ThreeD.Utilities;
var mesh = new Mesh("custom");
mesh.ControlPoints.Add(new Vector4(0.0, 0.0, 0.0)); // w defaults to 1.0
mesh.ControlPoints.Add(new Vector4(10.0, 0.0, 0.0));
mesh.ControlPoints.Add(new Vector4(10.0, 10.0, 0.0));
mesh.ControlPoints.Add(new Vector4(0.0, 10.0, 0.0));
mesh.CreatePolygon(0, 1, 2, 3);รูปทรงพื้นฐานในตัว (Box, Sphere, Cylinder) สามารถแปลงเป็น Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();องค์ประกอบเวอร์เท็กซ์
แนบนอร์มัล, UV, และสีเวอร์เท็กซ์เข้ากับเรขาคณิต:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);ประเภทขององค์ประกอบเวอร์เท็กซ์ที่มีอยู่: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
การแปลง
ทุก Node พกพา Transform กับ Translation, Rotation, และ Scale:
var node = scene.RootNode.CreateChildNode("moved", new Box());
node.Transform.Translation = new FVector3(10, 0, 5);
node.Transform.Scale = new FVector3(2, 2, 2);อ่านตำแหน่ง world-space ผ่าน node.GlobalTransform.Matrix หรือ node.EvaluateGlobalTransform().
วัสดุ
กำหนดวัสดุให้กับโหนดเพื่อข้อมูลการเชดดิ้ง:
var mat = new PhongMaterial("shiny");
mat.Diffuse = new Vector4(0.8, 0.2, 0.2, 1.0);
mat.Specular = new Vector4(1, 1, 1, 1);
mat.Shininess = 32;
scene.RootNode.CreateChildNode("red_box", new Box(), mat);ประเภทวัสดุ: LambertMaterial, PhongMaterial, PbrMaterial.
เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- ใช้
Scene.FromFile()สำหรับการโหลดแบบบรรทัดเดียวเมื่อคุณไม่ต้องการกำหนดเองLoadOptions - แปลง primitives เป็น
Meshด้วยToMesh()ก่อนเพิ่ม vertex elements - ใช้
GltfSaveOptionsด้วย a.glbส่วนขยายสำหรับผลลัพธ์ไบนารีแบบกะทัดรัด - ตรวจสอบ
node.Entityสำหรับnullก่อนทำการแคสท์ — ไม่ใช่ทุก node มี geometry - ใช้
PolygonModifier.Triangulate()เพื่อแปลง quad meshes ก่อนส่งออกเป็นรูปแบบ triangle-only เช่น STL
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | แก้ไข |
|---|---|---|
ImportException เมื่อโหลด | ไฟล์ที่ไม่รองรับหรือเสียหาย | ตรวจสอบว่าไฟล์เปิดได้ในโปรแกรมดู 3D; ตรวจสอบว่ารูปแบบอยู่ในรายการที่รองรับ |
| ไม่มีวัสดุหลังจากโหลด OBJ | .mtl ไม่พบไฟล์ | วาง .mtl ไฟล์ข้างๆ .obj หรือกำหนด ObjLoadOptions.EnableMaterials = true |
| ขนาดสเกลไม่ตรงกันหลังการนำเข้า FBX | ระบบหน่วยที่แตกต่างกัน | ใช้ ObjLoadOptions.Scale หรือใช้ Transform หลังจากโหลด |
FAQ
ฉันจะตรวจจับฟอร์แมตของไฟล์ที่ไม่ทราบได้อย่างไร?
ใช้ FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);ฉันสามารถโหลดจากสตรีมแทนเส้นทางไฟล์ได้หรือไม่?
ใช่. Scene.Open() รับ Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);รูปแบบใดบ้างที่รองรับการนำเข้าและส่งออกทั้งสองอย่าง?
OBJ, STL, glTF/GLB, FBX, COLLADA, และ 3MF รองรับทั้งการนำเข้าและส่งออก. PLY รองรับการนำเข้าเท่านั้น (ตัวส่งออก PLY ยังไม่ได้เชื่อมต่อ).
สรุปอ้างอิง API
| คลาส / เมธอด | คำอธิบาย |
|---|---|
Scene | คอนเทนเนอร์ฉาก 3D ระดับบนสุด |
Scene.Open() | โหลดไฟล์ 3D ตามพาธหรือสตรีม |
Scene.Save() | ส่งออกฉากเป็นไฟล์หรือสตรีม |
Scene.FromFile() | ฟังก์ชันสร้างแบบสถิตเพื่อโหลดและคืนค่า a Scene |
Node | โหนดลำดับชั้นของฉากที่เก็บเอนทิตีและการแปลง |
Node.CreateChildNode() | สร้างและแนบโหนดลูก |
Mesh | เมชโพลิกอนที่มีจุดควบคุมและรายการหน้า |
Mesh.CreatePolygon() | กำหนดหน้าพอลิกอนโดยดัชนีเวอร์เท็กซ์ |
Box / Sphere / Cylinder | รูปทรงพารามิเตอร์ในตัว |
Transform | การแปลงตำแหน่ง, การหมุน, และการสเกลในท้องถิ่น |
FileFormat | ทะเบียนและตัวตรวจจับสำหรับรูปแบบที่รองรับ |
LambertMaterial / PhongMaterial / PbrMaterial | ประเภทวัสดุสำหรับการแรเงา |