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

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

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

รูปแบบตัวเลือกการโหลดตัวเลือกการบันทึก
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 สำหรับ .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

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

ข้อกำหนดรายละเอียด
.เวอร์ชัน .NET10.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.