เราตื่นเต้นที่จะประกาศการพร้อมใช้งานของ 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

จุดเด่นสำคัญ

  • Pure C# – ไม่มี P/Invoke, ไม่มีไลบรารีเนทีฟ, ไม่มีข้อจำกัดของแพลตฟอร์ม.
  • .NET 10.0+ เข้ากันได้.
  • MIT licensed – ใช้งานได้ในโครงการส่วนบุคคล, เชิงพาณิชย์ หรือโครงการที่เป็นกรรมสิทธิ์โดยไม่มีข้อจำกัด.
  • สถาปัตยกรรมกราฟฉาก – โครงสร้างต้นไม้ที่คุ้นเคยของโหนด, เมช, กล้อง, และวัสดุ.
  • การสนับสนุนหลายรูปแบบ – อ่านและเขียน OBJ, STL, glTF 2.0, GLB, FBX, Collada, และ 3MF ไฟล์.

เริ่มต้นอย่างรวดเร็ว

การติดตั้ง NuGet

เพิ่มแพคเกจ NuGet ไปยังโปรเจกต์ของคุณ:

dotnet add package Aspose.3D --version 26.1.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 ของบรรพบุรุษทั้งหมดจนถึงราก.

สิ่งที่รวมอยู่

ไลบรารีมาพร้อมกับชุดความสามารถที่มุ่งเน้นซึ่งออกแบบรอบโมเดลกราฟ Scene 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 ส่วนที่มีความแม่นยำแบบ single-precision สำหรับตำแหน่ง, ทิศทาง, และสเกล ใช้โดย 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

ตัวเลือกการโหลดและบันทึก

แต่ละรูปแบบมีคลาสตัวเลือกเฉพาะที่ให้คุณควบคุมพฤติกรรมการนำเข้าและส่งออก:

รูปแบบตัวเลือกการโหลดตัวเลือกการบันทึก
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

ตัวอย่างเช่น การโหลดไฟล์ OBJ พร้อมการพลิกพิกัดและการทำให้เวกเตอร์ปกติเป็นมาตรฐาน:

var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;

scene.Open("model.obj", opts);

รูปแบบที่รองรับ

ตารางต่อไปนี้สรุปรูปแบบที่ Aspose.3D FOSS for .NET สามารถอ่านและเขียนได้.

รูปแบบส่วนขยายนำเข้าส่งออกหมายเหตุ
OBJ.objใช่ใช่พร้อมวัสดุ MTL
STL.stlใช่ใช่ไบนารี + ASCII
glTF 2.0.gltfใช่ใช่รูปแบบ JSON
GLB.glbใช่ใช่ไบนารี glTF
FBX.fbxใช่ใช่โหมด ASCII และไบนารี
Collada.daeใช่ใช่
3MF.3mfใช่ใช่รูปแบบการผลิต 3D ที่ใช้พื้นฐาน ZIP

คู่มือการเลือกรูปแบบ

การเลือกรูปแบบที่เหมาะสมขึ้นอยู่กับกรณีการใช้งานของคุณ:

  • OBJ เหมาะอย่างยิ่งเมื่อคุณต้องการความเข้ากันได้สูงสุดระหว่างเครื่องมือ 3D ต่าง ๆ เกือบทุกแอปพลิเคชันการสร้างโมเดลสามารถอ่านและเขียน OBJ ได้ มันทำงานได้ดีสำหรับการแลกเปลี่ยนข้อมูลเมช แต่จะบรรจุข้อมูลวัสดุพื้นฐานเท่านั้นผ่านไฟล์ MTL คู่มือ.
  • STL เป็นรูปแบบที่เลือกใช้สำหรับกระบวนการพิมพ์ 3D มันเก็บเรขาคณิตแบบสามเหลี่ยมดิบโดยไม่มีวัสดุหรือโครงสร้างฉาก ซึ่งตรงกับที่ซอฟต์แวร์สไลเซอร์คาดหวัง.
  • glTF เป็นมาตรฐานสมัยใหม่สำหรับเว็บและ 3D แบบเรียลไทม์ มันรองรับวัสดุ PBR, โครงสร้างฉากเต็มรูปแบบ, และออกแบบมาเพื่อการส่งข้อมูลที่มีประสิทธิภาพ ใช้ glTF เมื่อสร้างตัวดูบนเว็บหรือมุ่งเป้าไปยังพายป์ไลน์การเรนเดอร์แบบเรียลไทม์ใด ๆ.
  • FBX ถูกรวมอย่างลึกซึ้งในกระบวนการพัฒนาเกมและการสร้างเนื้อหาดิจิทัล มันรองรับข้อมูลฉากที่หลากหลายรวมถึงโครงสร้างและวัสดุ Aspose.3D FOSS สำหรับ .NET รองรับ FBX นำเข้าและส่งออก ในทั้งโหมด ASCII และไบนารี.
  • 3MF เป็นรูปแบบการพิมพ์ 3D สมัยใหม่ที่รองรับเมตาดาต้าที่หลากหลาย, วัสดุ, และฉากหลายวัตถุในแพ็กเกจเดียวที่อิง ZIP.

ข้อจำกัดที่ทราบ

Scene.Render() คือ ไม่รองรับ ในรุ่น FOSS. การเรียกใช้เมธอดนี้จะทำให้เกิด NotImplementedException. ไลบรารีนี้ออกแบบมาสำหรับการประมวลผล 3D แบบไฟล์ – การโหลด, การจัดการ, การแปลง, และการบันทึกโมเดล – แทนการเรนเดอร์แบบเรียลไทม์ไปยังจอแสดงผล.

โอเพนซอร์สและการให้สิทธิ์ใช้งาน

Aspose.3D FOSS สำหรับ .NET ได้รับการเผยแพร่ภายใต้ MIT License. นั่นหมายความว่าคุณอิสระที่จะ:

  • ใช้ไลบรารีในแอปพลิเคชันเชิงพาณิชย์และเชิงเจ้าของสิทธิ์.
  • แก้ไขซอร์สโค้ดให้ตรงกับความต้องการของคุณ.
  • แจกจ่ายไลบรารีเป็นส่วนหนึ่งของซอฟต์แวร์ของคุณ.

ไม่มีค่าลิขสิทธิ์ ไม่มีขีดจำกัดการใช้งาน และไม่มีข้อกำหนดการอ้างอิงนอกเหนือจากที่ระบุในสัญญาอนุญาต MIT.

โค้ดต้นฉบับทั้งหมดถูกโฮสต์บน GitHub และยินดีรับการมีส่วนร่วม: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

ข้อกำหนดระบบ

ข้อกำหนดรายละเอียด
.เวอร์ชัน .NET10.0 or later
การพึ่งพาไม่มี (C# แท้)
แพลตฟอร์มแพลตฟอร์มใดก็ได้ที่รัน .NET
ตัวจัดการแพ็กเกจNuGet

เริ่มต้นใช้งาน

ต่อไปนี้คือทรัพยากรที่จะช่วยให้คุณเริ่มต้นได้อย่างรวดเร็ว:

  • เอกสารประกอบ – คู่มือเชิงลึกและการเดินผ่าน API มีให้บน ไซต์เอกสาร Aspose.3D.
  • ฐานความรู้ – บทความวิธีทำเชิงปฏิบัติและเคล็ดลับการแก้ปัญหาใน Aspose.3D KB.
  • อ้างอิง API – รายละเอียดของคลาสและเมธอดอ้างอิงที่ Aspose.3D API Reference.
  • ซอร์สโค้ด – เรียกดูและมีส่วนร่วมบน GitHub.
  • NuGet – แพ็กเกจนี้ถูกเผยแพร่เป็น Aspose.3D บน 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.