เราตื่นเต้นที่จะประกาศการพร้อมใช้งานของ Aspose.3D FOSS for .NET – ไลบรารีฟรีและโอเพนซอร์สสำหรับทำงานกับรูปแบบไฟล์ 3D ในแอปพลิเคชัน .NET สร้างเป็นโซลูชัน C# แท้โดยไม่มีการพึ่งพาเนทีฟ ไลบรารีนี้รองรับ .NET 10.0 ขึ้นไป ทำให้เข้าถึงได้สำหรับโครงการและสภาพแวดล้อมหลากหลาย.
โพสต์นี้จะอธิบายว่าลิบรารีมีอะไรบ้าง วิธีเริ่มต้นใช้งาน และขั้นตอนต่อไปหลังจากนี้.
อะไรคือ Aspose.3D FOSS for .NET?
Aspose.3D FOSS for .NET เป็นไลบรารีการประมวลผลไฟล์ 3D ที่มีน้ำหนักเบาเผยแพร่ภายใต้ MIT license. มันให้ API แบบกราฟฉากที่ช่วยให้คุณโหลด ตรวจสอบ แปลงรูปแบบ และบันทึกโมเดล 3D ในหลายรูปแบบที่ใช้กันอย่างกว้างขวาง ไลบรารีนี้เขียนทั้งหมดด้วย C# และไม่ต้องการไบนารีเนทีฟภายนอกหรือการกำหนดค่าที่เฉพาะแพลตฟอร์ม.
ซอร์สโค้ดพร้อมให้ดาวน์โหลดบน GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET
จุดเด่นสำคัญ
- C# แท้ – ไม่มี P/Invoke, ไม่มีไลบรารีเนทีฟ, ไม่มีข้อจำกัดแพลตฟอร์ม.
- .NET 10.0+ เข้ากันได้.
- MIT licensed – ใช้งานได้ในโครงการส่วนบุคคล, เชิงพาณิชย์ หรือโครงการที่เป็นกรรมสิทธิ์โดยไม่มีข้อจำกัด.
- สถาปัตยกรรมกราฟฉาก – โครงสร้างต้นไม้ที่คุ้นเคยของโหนด, เมช, กล้อง, และวัสดุ.
- การสนับสนุนหลายรูปแบบ – อ่านและเขียนไฟล์ OBJ, STL, glTF 2.0, GLB, FBX, Collada, และ 3MF files.
เริ่มต้นอย่างรวดเร็ว
การติดตั้ง NuGet
เพิ่มแพคเกจ NuGet ไปยังโปรเจกต์ของคุณ:
dotnet add package Aspose.3D.Converter --version 1.0.0
การแปลงครั้งแรกของคุณ
กรณีการใช้งานที่ง่ายที่สุดคือการโหลดไฟล์ 3D ในรูปแบบหนึ่งแล้วบันทึกเป็นรูปแบบอื่น นี่คือตัวอย่างการแปลงสองบรรทัดจาก OBJ ไปเป็น STL:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");
The Scene class เป็นจุดเริ่มต้นหลัก. เรียก scene.Open() ด้วยเส้นทางไฟล์เพื่อโหลดโมเดล, จากนั้นเรียก Save() กับเส้นทางเป้าหมาย ไลบรารีจะสรุปรูปแบบจากส่วนขยายของไฟล์.
สร้าง Scene ตั้งแต่ต้น
คุณยังสามารถสร้าง scene ด้วยโปรแกรมได้:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
var box = new Box(2, 2, 2);
var node = scene.RootNode.CreateChildNode("Box", box);
node.Transform.Translation = new FVector3(1, 2, 3);
scene.Save("scene.gltf");
นี่จะสร้าง scene ใหม่, เพิ่ม primitive แบบกล่องเป็นโหนดลูกใต้ราก, กำหนดตำแหน่งที่พิกัด (1, 2, 3), และส่งออกผลลัพธ์เป็นไฟล์ glTF.
การโหลดด้วยตัวเลือกเฉพาะรูปแบบ
เมื่อคุณต้องการการควบคุมที่ละเอียดขึ้นของกระบวนการโหลด แต่ละรูปแบบจะมีคลาสตัวเลือกเฉพาะของมัน ตัวอย่างเช่น การโหลดไฟล์ STL ด้วยตัวเลือกที่ระบุชัดเจน:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
var opts = new StlLoadOptions();
scene.Open("part.stl", opts);
// Inspect the loaded scene
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);
// Re-export as OBJ
scene.Save("part.obj");
The scene.Open() เมธอดรับประเภทของตัวเลือกการโหลดใดก็ได้: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions, หรือ TmfLoadOptions.
การเดินทางผ่านกราฟ Scene
เมื่อโหลด scene แล้ว คุณสามารถเดินทางผ่านต้นไม้โหนดเพื่อสำรวจหรือแก้ไขเนื้อหาของมันได้:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
scene.Open("model.gltf");
foreach (var child in scene.RootNode.ChildNodes)
{
Console.WriteLine("Node: " + child.Name);
Console.WriteLine(" Translation: " + child.Transform.Translation);
if (child.Entity is Mesh mesh)
{
Console.WriteLine(" Vertices: " + mesh.ControlPoints.Count);
}
}
รูปแบบนี้มีประโยชน์สำหรับการดีบัก, การสร้างรายงานเกี่ยวกับเนื้อหาโมเดล, หรือการแก้ไขส่วนของ scene อย่างเลือกสรรก่อนทำการส่งออกใหม่.
การใช้ Transform
การจัดตำแหน่งโหนดในพื้นที่ 3 มิติทำได้ผ่าน Transform คุณสมบัติบนแต่ละ Node:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);
var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);
child.Transform.Scale = new FVector3(2, 2, 2);
// Child's world position is (15, 0, 0) due to
// parent-child transform inheritance
scene.Save("transformed.gltf");
Transform ทำตามโมเดลการสืบทอดแบบพาเรนท์-ชิลด์มาตรฐาน: ตำแหน่งในโลกของโหนดลูกเป็นผลรวมของ Transform ท้องถิ่นของมันและ Transform ของบรรพบุรุษทั้งหมดจนถึงราก.
สิ่งที่รวมอยู่
ไลบรารีมาพร้อมกับชุดความสามารถที่มุ่งเน้นซึ่งออกแบบโดยอิงโมเดลกราฟฉาก 3D.
กราฟฉาก
กราฟฉากเป็นโครงกระดูกของ API ทุกไฟล์ 3D จะถูกแสดงเป็นโครงสร้างต้นไม้:
| คลาส | บทบาท |
|---|---|
Scene | คอนเทนเนอร์ระดับบนสุด; รากของกราฟฉาก |
Node | ตำแหน่งที่มีชื่อในต้นไม้; เก็บการแปลงและโหนดลูก |
Entity | ฐานเชิงนามธรรมสำหรับวัตถุภาพที่แนบกับโหนด |
Mesh | เรขาคณิตแบบหลายเหลี่ยม – จุดยอด, หน้า, เวกเตอร์ปกติ |
Camera | คำนิยามกล้องเสมือน |
Transform | การแปล, การหมุน, และการสเกลในระดับท้องถิ่นสำหรับโหนด |
GlobalTransform | การแปลงในอวกาศโลกที่คำนวณได้ |
อิมพีเมนต์ในตัว
รุ่น .NET มีคลาสรูปร่างพารามิเตอร์ที่สามารถแนบกับโหนดโดยตรงหรือแปลงเป็น Mesh:
- กล่อง – กล่องที่จัดแนวตามแกนพร้อมความกว้าง, ความสูง, และความลึกที่ปรับได้.
- ทรงกลม – ทรงกลมเชิงพารามิเตอร์พร้อมรัศมีที่ปรับได้.
- ทรงกระบอก – ทรงกระบอกพารามิเตอร์ที่มีรัศมีและความสูงที่ปรับได้.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
วัสดุ
ไลบรารีมีประเภทวัสดุหลายประเภท:
- LambertMaterial – วัสดุแบบกระจายแสงคลาสสิกที่มีส่วนประกอบของสีแวดล้อม, กระจาย, ปล่อยแสง, และสะท้อน.
- PhongMaterial – ขยายจาก Lambert ด้วยไฮไลท์สเปคูลาร์และความเงา.
- PbrMaterial – วัสดุการเรนเดอร์แบบอิงฟิสิกส์ที่มีสีพื้นฐาน, โลหะ, ความหยาบ, การบัง, และช่องใส่เทกซ์เจอร์.
ยูทิลิตี้คณิตศาสตร์
The Aspose.ThreeD namespace มี primitive คณิตศาสตร์ที่จำเป็น:
- FVector3 – เวกเตอร์ 3 ส่วนความแม่นยำเดี่ยวสำหรับตำแหน่ง, ทิศทาง, และสเกล. ใช้โดย
Transform.TranslationและTransform.Scale. - Vector4 – เวกเตอร์ 4 ส่วนความแม่นยำเดี่ยวสำหรับจุดควบคุมและนอร์มัล.
- Matrix4 – เมทริกซ์การแปลง 4x4.
- Quaternion – การแสดงการหมุน. ใช้โดย
Transform.Rotation. - BoundingBox – กล่องขอบเขตที่จัดแนวตามแกนสำหรับการสอบถามเชิงพื้นที่.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations
ตัวเลือกการโหลดและบันทึก
แต่ละรูปแบบมีคลาสตัวเลือกเฉพาะที่ให้คุณควบคุมพฤติกรรมการนำเข้าและส่งออก:
| รูปแบบ | ตัวเลือกการโหลด | ตัวเลือกการบันทึก |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| glTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | FbxSaveOptions |
| 3MF | TmfLoadOptions | TmfSaveOptions |
ตัวอย่างเช่น การโหลดไฟล์ OBJ พร้อมการพลิกพิกัดและการทำให้เวกเตอร์ปกติมาตรฐาน:
var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;
scene.Open("model.obj", opts);
รูปแบบที่รองรับ
ตารางต่อไปนี้สรุปรูปแบบที่ Aspose.3D FOSS สำหรับ .NET สามารถอ่านและเขียนได้.
| รูปแบบ | ส่วนขยาย | นำเข้า | ส่งออก | หมายเหตุ |
|---|---|---|---|---|
| OBJ | .obj | ใช่ | ใช่ | พร้อมวัสดุ MTL |
| STL | .stl | ใช่ | ใช่ | ไบนารี + ASCII |
| glTF 2.0 | .gltf | ใช่ | ใช่ | รูปแบบ JSON |
| GLB | .glb | ใช่ | ใช่ | ไบนารี glTF |
| FBX | .fbx | ใช่ | ใช่ | โหมด ASCII และไบนารี |
| Collada | .dae | ใช่ | ใช่ | |
| 3MF | .3mf | ใช่ | ใช่ | รูปแบบการผลิต 3 มิติที่อิง ZIP |
คู่มือการเลือกรูปแบบ
การเลือกรูปแบบที่เหมาะสมขึ้นอยู่กับกรณีการใช้งานของคุณ:
- OBJ เหมาะอย่างยิ่งเมื่อคุณต้องการความเข้ากันได้สูงสุดระหว่างเครื่องมือ 3 มิติ แทบทุกแอปพลิเคชันการสร้างโมเดลสามารถอ่านและเขียน OBJ ได้ มันทำงานได้ดีสำหรับการแลกเปลี่ยนข้อมูลเมช แต่จะส่งต่อข้อมูลวัสดุพื้นฐานเท่านั้นผ่านไฟล์ MTL คู่มือ.
- STL เป็นรูปแบบที่เลือกใช้สำหรับกระบวนการพิมพ์ 3 มิติ มันเก็บเรขาคณิตแบบสามเหลี่ยมดิบโดยไม่มีวัสดุหรือโครงสร้างฉาก ซึ่งตรงกับที่ซอฟต์แวร์สไลเซอร์คาดหวัง.
- glTF เป็นมาตรฐานสมัยใหม่สำหรับเว็บและ 3 มิติแบบเรียลไทม์ รองรับวัสดุ PBR, โครงสร้างฉากเต็มรูปแบบ, และออกแบบมาเพื่อการส่งข้อมูลที่มีประสิทธิภาพ ใช้ glTF เมื่อสร้างตัวดูบนเว็บหรือมุ่งเป้าไปที่พายป์ไลน์การเรนเดอร์แบบเรียลไทม์ใด ๆ.
- FBX ถูกรวมอย่างลึกซึ้งในกระบวนการพัฒนาเกมและการสร้างเนื้อหาดิจิทัล รองรับข้อมูลฉากที่หลากหลายรวมถึงโครงสร้างและวัสดุ Aspose.3D FOSS สำหรับ .NET รองรับ FBX นำเข้าและส่งออก ในทั้งโหมด ASCII และไบนารี.
- 3MF เป็นรูปแบบการพิมพ์ 3 มิติสมัยใหม่ที่รองรับเมตาดาต้าที่หลากหลาย, วัสดุ, และฉากหลายวัตถุในแพ็กเกจเดียวที่อิง ZIP.
ข้อจำกัดที่ทราบ
Scene.Render() คือ ไม่รองรับ ในรุ่น FOSS. การเรียกใช้เมธอดนี้จะทำให้เกิด NotImplementedException. ไลบรารีนี้ออกแบบมาสำหรับการประมวลผล 3D แบบไฟล์ – การโหลด, การจัดการ, การแปลง, และการบันทึกโมเดล – แทนการเรนเดอร์แบบเรียลไทม์ไปยังจอแสดงผล.
โอเพนซอร์สและการให้สิทธิ์
Aspose.3D FOSS สำหรับ .NET ได้รับการเผยแพร่ภายใต้ the MIT License. ซึ่งหมายความว่าคุณอิสระที่จะ:
- ใช้ไลบรารีในแอปพลิเคชันเชิงพาณิชย์และเชิงเจ้าของ.
- แก้ไขซอร์สโค้ดให้ตรงกับความต้องการของคุณ.
- แจกจ่ายไลบรารีเป็นส่วนหนึ่งของซอฟต์แวร์ของคุณ.
ไม่มีค่าลิขสิทธิ์, ไม่มีขีดจำกัดการใช้งาน, และไม่มีข้อกำหนดการอ้างอิงนอกเหนือจากที่ใบอนุญาต MIT ระบุ.
ซอร์สโค้ดเต็มถูกโฮสต์บน GitHub และยินดีรับการมีส่วนร่วม: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET
ข้อกำหนดระบบ
| ข้อกำหนด | รายละเอียด |
|---|---|
| .เวอร์ชัน .NET | 10.0 or later |
| การพึ่งพา | ไม่มี (C# แท้) |
| แพลตฟอร์ม | แพลตฟอร์มใดก็ได้ที่รัน .NET |
| ตัวจัดการแพ็กเกจ | NuGet |
เริ่มต้นใช้งาน
ต่อไปนี้คือแหล่งข้อมูลที่จะช่วยให้คุณเริ่มต้นได้อย่างรวดเร็ว:
- เอกสาร – คู่มือเชิงลึกและการเดินผ่าน API มีให้บน the ไซต์เอกสาร Aspose.3D.
- ฐานความรู้ – บทความวิธีทำเชิงปฏิบัติและเคล็ดลับการแก้ปัญหาใน Aspose.3D KB.
- อ้างอิง API – รายละเอียดอ้างอิงคลาสและเมธอดที่ Aspose.3D API Reference.
- ซอร์สโค้ด – เรียกดูและมีส่วนร่วมบน GitHub.
- NuGet – แพ็กเกจนี้ถูกเผยแพร่เป็น
Aspose.3D.Converterบน NuGet.
กรณีการใช้งานทั่วไป
ต่อไปนี้เป็นสถานการณ์การใช้งานจริงบางส่วนที่ Aspose.3D FOSS สำหรับ .NET เหมาะสม:
สายงานการแปลงรูปแบบ
หลายทีมได้รับทรัพยากร 3D ในรูปแบบหนึ่งแต่ต้องการในรูปแบบอื่น ทีมออกแบบอาจทำงานกับ FBX ในขณะที่ทีมเว็บต้องการ glTF ไลบรารีนี้ช่วยให้คุณสร้างสายงานการแปลงอัตโนมัติได้:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
// Convert all incoming FBX assets to GLB for the web team
var scene = new Scene();
scene.Open("asset.fbx");
scene.Save("asset.glb");
3D Model Inspection and Validation
ก่อนนำทรัพยากร 3D ไปผสานในแอปพลิเคชันของคุณ คุณอาจต้องการตรวจสอบเนื้อหา – ตรวจสอบจำนวนโหนด, ยืนยันรูปทรงเรขาคณิต, หรือยืนยันว่ามีองค์ประกอบที่คาดหวังอยู่หรือไม่:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
scene.Open("model.obj");
int nodeCount = scene.RootNode.ChildNodes.Count;
Console.WriteLine("Top-level nodes: " + nodeCount);
foreach (var child in scene.RootNode.ChildNodes)
{
if (child.Entity is Mesh mesh)
{
Console.WriteLine(child.Name + ": "
+ mesh.ControlPoints.Count + " vertices");
}
}
การประกอบฉาก
คุณสามารถโหลดโมเดลหลายตัวและรวมเข้าด้วยกันเป็นฉากเดียวได้:
using Aspose.ThreeD;
var scene = new Scene();
var part1 = new Scene();
part1.Open("chassis.obj");
var part2 = new Scene();
part2.Open("wheels.obj");
// Add nodes from each part into the combined scene
foreach (var child in part1.RootNode.ChildNodes)
{
scene.RootNode.ChildNodes.Add(child);
}
foreach (var child in part2.RootNode.ChildNodes)
{
scene.RootNode.ChildNodes.Add(child);
}
scene.Save("assembled.gltf");
ต่อไปคืออะไร
ในโพสต์ต่อไป เราจะครอบคลุม:
- การเจาะลึกคุณลักษณะสำคัญของ API กราฟฉาก, วัสดุ, และยูทิลิตี้คณิตศาสตร์.
- คู่มือปฏิบัติการทำงานกับแต่ละรูปแบบ 3D ที่รองรับ – OBJ, STL, glTF, FBX, และ 3MF – รวมถึงตัวเลือกการโหลด/บันทึกและรูปแบบการแปลงเป็นชุด.
ติดตามต่อไป และอย่าลังเลที่จะสำรวจไลบรารีและแบ่งปันข้อเสนอแนะของคุณบน GitHub.