Chúng tôi rất vui mừng thông báo về việc có sẵn Aspose.3D FOSS for .NET – một thư viện miễn phí, mã nguồn mở để làm việc với các định dạng tệp 3D trong các ứng dụng .NET. Được xây dựng như một giải pháp C# thuần túy không có phụ thuộc gốc, thư viện này nhắm tới .NET 10.0 và các phiên bản sau, giúp nó có thể tiếp cận được với một loạt rộng các dự án và môi trường.

Bài viết này sẽ giới thiệu những gì thư viện cung cấp, cách bắt đầu, và hướng đi tiếp theo.

Aspose.3D FOSS for .NET là gì?

Aspose.3D FOSS for .NET là một thư viện xử lý tệp 3D nhẹ, được công bố dưới MIT license. Nó cung cấp một API đồ thị cảnh cho phép bạn tải, kiểm tra, biến đổi và lưu các mô hình 3D qua nhiều định dạng được sử dụng rộng rãi. Thư viện được viết hoàn toàn bằng C# và không yêu cầu bất kỳ binary gốc bên ngoài nào hoặc cấu hình đặc thù cho nền tảng.

Mã nguồn có sẵn trên GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

Những điểm nổi bật

  • C# thuần túy – không P/Invoke, không thư viện gốc, không hạn chế nền tảng.
  • .NET 10.0+ tương thích.
  • được cấp phép MIT – sử dụng nó trong các dự án cá nhân, thương mại hoặc sở hữu mà không có hạn chế.
  • Kiến trúc đồ thị cảnh – một cây quen thuộc gồm các nút, lưới, camera và vật liệu.
  • Hỗ trợ đa định dạng – đọc và ghi các tệp OBJ, STL, glTF 2.0, GLB, FBX, Collada và 3MF.

Bắt đầu nhanh

Cài đặt NuGet

Thêm gói NuGet vào dự án của bạn:

dotnet add package Aspose.3D --version 26.1.0

Chuyển đổi đầu tiên của bạn

Trường hợp sử dụng đơn giản nhất là tải một tệp 3D ở một định dạng và lưu nó sang định dạng khác. Dưới đây là một chuyển đổi hai dòng từ OBJ sang STL:

using Aspose.ThreeD;

var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");

Cái Scene lớp là điểm vào trung tâm. Gọi scene.Open() với đường dẫn tệp để tải mô hình, sau đó gọi Save() với đường dẫn đích. Thư viện suy ra định dạng từ phần mở rộng của tệp.

Xây dựng Scene từ đầu

Bạn cũng có thể tạo scene một cách lập trình:

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");

Điều này tạo một scene mới, thêm một primitive hình hộp làm nút con dưới gốc, đặt nó tại tọa độ (1, 2, 3), và xuất kết quả dưới dạng tệp glTF.

Tải với các tùy chọn riêng cho định dạng

Khi bạn cần kiểm soát chi tiết hơn quá trình tải, mỗi định dạng cung cấp một lớp tùy chọn riêng. Ví dụ, tải tệp STL với các tùy chọn cụ thể:

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() phương thức chấp nhận bất kỳ loại tùy chọn tải nào: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions, hoặc TmfLoadOptions.

Duyệt đồ thị Scene

Khi một scene đã được tải, bạn có thể duyệt cây nút để kiểm tra hoặc sửa đổi nội dung của nó:

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);
    }
}

Mẫu này hữu ích cho việc gỡ lỗi, tạo báo cáo về nội dung mô hình, hoặc chỉnh sửa có chọn lọc các phần của scene trước khi xuất lại.

Áp dụng biến đổi

Việc định vị các nút trong không gian 3D được thực hiện thông qua Transform thuộc tính trên mỗi 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");

Các biến đổi tuân theo mô hình kế thừa cha-con tiêu chuẩn: vị trí không gian thế giới của một nút con là sự kết hợp của biến đổi cục bộ của nó và tất cả các biến đổi của các tổ tiên lên tới gốc.

Những gì được bao gồm

Thư viện đi kèm với một bộ khả năng tập trung được thiết kế quanh mô hình đồ thị scene 3D.

Đồ thị Cảnh

Đồ thị cảnh là xương sống của API. Mỗi tệp 3D được biểu diễn dưới dạng cấu trúc cây:

LớpVai trò
SceneBộ chứa cấp cao nhất; gốc của đồ thị cảnh
NodeMột vị trí có tên trong cây; chứa các phép biến đổi và các nút con
EntityCơ sở trừu tượng cho các đối tượng trực quan được gắn vào các nút
MeshHình học đa giác – các đỉnh, mặt, pháp tuyến
CameraĐịnh nghĩa máy ảnh ảo
TransformDịch chuyển, quay và tỉ lệ cục bộ cho một nút
GlobalTransformPhép biến đổi không gian thế giới đã tính toán

Các Hình Học Cơ Bản Tích Hợp

Phiên bản .NET bao gồm các lớp hình dạng tham số có thể được gắn trực tiếp vào các nút hoặc chuyển đổi thành Mesh:

  • Hộp – hộp căn trục với chiều rộng, chiều cao và độ sâu có thể cấu hình.
  • Cầu – hình cầu tham số với bán kính có thể cấu hình.
  • Hình trụ – hình trụ tham số với bán kính và chiều cao có thể cấu hình.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);

Vật liệu

Thư viện cung cấp nhiều loại vật liệu:

  • LambertMaterial – vật liệu cổ điển chỉ khuếch tán với các thành phần màu ambient, diffuse, emissive và reflective.
  • PhongMaterial – mở rộng Lambert với các điểm nhấn specular và độ bóng.
  • PbrMaterial – vật liệu rendering dựa trên vật lý với các khe base color, metallic, roughness, occlusion và texture.

Tiện ích Toán học

The Aspose.ThreeD namespace bao gồm các primitive toán học thiết yếu:

  • FVector3 – vector 3 thành phần độ chính xác đơn cho vị trí, hướng và tỉ lệ. Được sử dụng bởi Transform.TranslationTransform.Scale.
  • Vector4 – vector 4 thành phần độ chính xác đơn cho các điểm điều khiển và normals.
  • Matrix4 – ma trận biến đổi 4x4.
  • Quaternion – biểu diễn quay. Được sử dụng bởi Transform.Rotation.
  • BoundingBox – hộp bao giới hạn theo trục cho các truy vấn không gian.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations

Tùy chọn Tải và Lưu

Mỗi định dạng có các lớp tùy chọn riêng cho phép bạn kiểm soát hành vi nhập và xuất:

Định dạngTùy chọn tảiTùy chọn lưu
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

Ví dụ, để tải tệp OBJ với việc lật tọa độ và chuẩn hoá pháp tuyến:

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

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

Các Định Dạng Được Hỗ Trợ

Bảng sau tóm tắt các định dạng mà Aspose.3D FOSS cho .NET có thể đọc và ghi.

Định dạngPhần mở rộngNhậpXuấtGhi chú
OBJ.objCó vật liệu MTL
STL.stlNhị phân + ASCII
glTF 2.0.gltfđịnh dạng JSON
GLB.glbBinary glTF
FBX.fbxChế độ ASCII và nhị phân
Collada.dae
3MF.3mfđịnh dạng sản xuất 3D dựa trên ZIP

Hướng Dẫn Lựa Chọn Định Dạng

Việc chọn định dạng phù hợp phụ thuộc vào trường hợp sử dụng của bạn:

  • OBJ là lựa chọn lý tưởng khi bạn cần khả năng tương thích tối đa giữa các công cụ 3D. Hầu hết mọi ứng dụng mô hình hóa đều có thể đọc và ghi OBJ. Nó hoạt động tốt cho việc trao đổi dữ liệu lưới nhưng chỉ chứa thông tin vật liệu cơ bản thông qua các tệp MTL đi kèm.
  • STL là định dạng được lựa chọn cho quy trình in 3D. Nó lưu trữ hình học tam giác thô mà không có vật liệu hay cấu trúc cảnh, chính xác như phần mềm slicer mong đợi.
  • glTF là tiêu chuẩn hiện đại cho 3D trên web và thời gian thực. Nó hỗ trợ vật liệu PBR, cấu trúc cảnh đầy đủ, và được thiết kế để truyền tải hiệu quả. Hãy sử dụng glTF khi xây dựng trình xem trên web hoặc nhắm tới bất kỳ pipeline render thời gian thực nào.
  • FBX được tích hợp sâu vào quy trình phát triển trò chơi và tạo nội dung kỹ thuật số. Nó hỗ trợ dữ liệu cảnh phong phú bao gồm cấu trúc và vật liệu. Aspose.3D FOSS cho .NET hỗ trợ FBX nhập và xuất ở cả chế độ ASCII và nhị phân.
  • 3MF là định dạng in 3D hiện đại hỗ trợ siêu dữ liệu phong phú, vật liệu và các cảnh đa đối tượng trong một gói duy nhất dựa trên ZIP.

Các Hạn Chế Đã Biết

Scene.Render()không được hỗ trợ trong phiên bản FOSS. Gọi phương thức này sẽ ném ra một NotImplementedException. Thư viện được thiết kế cho việc xử lý 3D dựa trên tệp – tải, thao tác, biến đổi và lưu mô hình – thay vì render thời gian thực lên màn hình.

Mã Nguồn Mở và Giấy Phép

Aspose.3D FOSS cho .NET được phát hành dưới Giấy phép MIT. Điều này có nghĩa là bạn có thể:

  • Sử dụng thư viện trong các ứng dụng thương mại và sở hữu độc quyền.
  • Sửa đổi mã nguồn để phù hợp với nhu cầu của bạn.
  • Phân phối thư viện như một phần của phần mềm của bạn.

Không có phí bản quyền, không giới hạn sử dụng và không yêu cầu ghi công nào ngoài những gì giấy phép MIT quy định.

Mã nguồn đầy đủ được lưu trữ trên GitHub, và chúng tôi hoan nghênh các đóng góp: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

Yêu cầu hệ thống

Yêu cầuChi tiết
.phiên bản .NET10.0 or later
Phụ thuộcKhông có (C# thuần)
Nền tảngBất kỳ nền tảng nào chạy .NET
Trình quản lý góiNuGet

Bắt đầu

Dưới đây là các tài nguyên giúp bạn bắt đầu nhanh chóng:

  • Tài liệu – các hướng dẫn toàn diện và các walkthrough API có sẵn trên trang tài liệu Aspose.3D.
  • Cơ sở kiến thức – các bài viết hướng dẫn thực tế và mẹo khắc phục sự cố trong the Aspose.3D KB.
  • Tham chiếu API – tham chiếu chi tiết lớp và phương thức tại Aspose.3D Tham chiếu API.
  • Mã nguồn – duyệt và đóng góp trên GitHub.
  • NuGet – gói được phát hành dưới dạng Aspose.3D trên NuGet.

Các trường hợp sử dụng phổ biến

Dưới đây là một số kịch bản thực tế mà Aspose.3D FOSS cho .NET phù hợp:

Các quy trình chuyển đổi định dạng

Nhiều nhóm nhận tài sản 3D ở một định dạng nhưng cần chúng ở định dạng khác. Nhóm thiết kế có thể làm việc với FBX trong khi nhóm web cần glTF. Thư viện cho phép bạn xây dựng các pipeline chuyển đổi tự động:

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

Trước khi tích hợp tài sản 3D vào ứng dụng của bạn, bạn có thể muốn xác thực nội dung của nó — kiểm tra số lượng node, xác minh hình học, hoặc xác nhận rằng các thành phần mong đợi có mặt:

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");
    }
}

Lắp ráp Cảnh

Bạn có thể tải nhiều mô hình và kết hợp chúng thành một cảnh duy nhất:

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");

Tiếp theo

Trong các bài viết sắp tới, chúng tôi sẽ đề cập tới:

  • Một phân tích sâu về các tính năng chính của API đồ thị cảnh, vật liệu và các tiện ích toán học.
  • Hướng dẫn thực tế để làm việc với mỗi định dạng 3D được hỗ trợ — OBJ, STL, glTF, FBX và 3MF — bao gồm các tùy chọn tải/lưu và các mẫu chuyển đổi hàng loạt.

Hãy theo dõi, và đừng ngần ngại khám phá thư viện cũng như chia sẻ phản hồi của bạn trên GitHub.