วิธีโหลดโมเดล 3 มิติใน .NET
Aspose.3D for .NET ให้ API ที่ตรงไปตรงมาสำหรับการเปิดไฟล์ 3D โดยไม่มีการพึ่งพาเนทีฟ หลังจากโหลดไฟล์เข้าสู่วัตถุ Scene คุณสามารถเดินทางผ่านลำดับชั้นของโหนดและอ่านข้อมูลเรขาคณิตสำหรับแต่ละเมชได้
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: ติดตั้งแพคเกจ
เพิ่มแพคเกจ NuGet ไปยังโครงการของคุณ:
dotnet add package Aspose.3D --version 26.1.0ตรวจสอบ:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");ขั้นตอนที่ 2: นำเข้าคลาส Scene
คลาส Scene เป็นคอนเทนเนอร์ระดับบนสุดสำหรับข้อมูล 3D ทั้งหมด นำเข้าเนมสเปซ:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;ขั้นตอนที่ 3: โหลดไฟล์
ใช้ Scene.Open() เพื่อโหลดรูปแบบที่รองรับทั้งหมด ไลบรารีจะตรวจจับรูปแบบจากส่วนขยายของไฟล์:
var scene = new Scene();
scene.Open("model.obj");หรือใช้ฟังก์ชันสร้างแบบสถิต:
var scene = Scene.FromFile("model.obj");ทั้งสองสนับสนุน OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY และ 3MF.
ขั้นตอนที่ 4: สำรวจโหนดฉาก
ฉากที่โหลดแล้วเป็นต้นไม้ของวัตถุ Node ที่มีรากอยู่ที่ scene.RootNode:
void Walk(Node node, int depth = 0)
{
var indent = new string(' ', depth * 2);
Console.WriteLine($"{indent}Node: {node.Name}");
foreach (var child in node.ChildNodes)
Walk(child, depth + 1);
}
Walk(scene.RootNode);แต่ละ Node อาจมี Entity (mesh, camera, light) ตรวจสอบ node.Entity ก่อนเข้าถึง.
ขั้นตอนที่ 5: เข้าถึงข้อมูลจุดยอดและรูปหลายเหลี่ยม
แคสต์เอนทิตี้ของโหนดเป็น Mesh และอ่านจุดควบคุมและโพลิกอนของมัน:
using Aspose.ThreeD.Entities;
foreach (var node in scene.RootNode.ChildNodes)
{
if (node.Entity is Mesh mesh)
{
Console.WriteLine($"Mesh '{node.Name}': " +
$"{mesh.ControlPoints.Count} vertices, " +
$"{mesh.PolygonCount} polygons");
if (mesh.ControlPoints.Count > 0)
{
var v = mesh.ControlPoints[0];
Console.WriteLine($" First vertex: ({v.X:F4}, {v.Y:F4}, {v.Z:F4})");
}
}
}ขั้นตอนที่ 6: ใช้ตัวเลือกการโหลดที่เฉพาะเจาะจงตามรูปแบบ
สำหรับการควบคุมแบบละเอียด ให้ส่งคลาสย่อย LoadOptions:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);คลาสตัวเลือกอื่น: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
ปัญหาทั่วไปและการแก้ไข
ImportException เมื่อเรียก Scene.Open()
ไฟล์อาจเสียหายหรืออยู่ในรูปแบบที่ไม่รองรับ ตรวจสอบว่าไฟล์เปิดได้ในโปรแกรมดู 3D และรูปแบบนั้นอยู่ในรายการที่รองรับ.
วัสดุหายหลังจากโหลด OBJ
วางไฟล์ .mtl ข้างไฟล์ .obj และตรวจสอบให้แน่ใจว่า ObjLoadOptions.EnableMaterials = true.
ความไม่ตรงกันของระบบพิกัด (โมเดลดูเหมือนถูกหมุน)
ตั้งค่า ObjLoadOptions.FlipCoordinateSystem = true หรือใช้การหมุนกับ Transform ของโหนดราก
NullReferenceException กำลังเข้าถึง node.Entity
ไม่ใช่ทุกโหนดที่มีเรขาคณิต ตรวจสอบ if (node.Entity is Mesh mesh) เสมอก่อนเข้าถึง mesh properties.
คำถามที่พบบ่อย (FAQ)
ฉันสามารถโหลดรูปแบบ 3D ใดได้บ้าง?
OBJ, STL (ไบนารีและ ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY, และ 3MF.
ฉันสามารถโหลดจากสตรีมได้หรือไม่?
ใช่. Scene.Open() ยอมรับ Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);ฉันจะรับ normal ของพื้นผิวได้อย่างไร?
หลังจากโหลดแล้ว ให้เรียก mesh.GetElement(VertexElementType.Normal) เพื่อเข้าถึงชั้น VertexElementNormal.
ไลบรารีปลอดภัยต่อการทำงานหลายเธรดหรือไม่?
แต่ละอินสแตนซ์ Scene เป็นอิสระ การโหลดไฟล์แยกต่างหากเข้าสู่อินสแตนซ์ Scene แยกต่างหากจากเธรดแยกต่างหากนั้นปลอดภัย.