คุณลักษณะและฟังก์ชันการทำงาน

คุณลักษณะและฟังก์ชันการทำงาน

คุณลักษณะและฟังก์ชันการทำงาน

หน้านี้ครอบคลุมทุกพื้นที่ฟีเจอร์หลักของ 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ประเภทวัสดุสำหรับการแรเงา
 ภาษาไทย