Z radością ogłaszamy dostępność Aspose.3D FOSS for .NET – darmowa, otwarto‑źródłowa biblioteka do pracy z formatami plików 3D w aplikacjach .NET. Zbudowana jako czyste rozwiązanie C# bez zależności natywnych, biblioteka celuje w .NET 10.0 i nowsze, co czyni ją dostępną dla szerokiego zakresu projektów i środowisk.

Ten wpis omawia, co oferuje biblioteka, jak rozpocząć pracę oraz dokąd można się dalej udać.

Czym jest Aspose.3D FOSS for .NET?

Aspose.3D FOSS for .NET jest lekką biblioteką do przetwarzania plików 3D opublikowaną pod licencją MIT. Udostępnia API grafu scen, które pozwala ładować, przeglądać, przekształcać i zapisywać modele 3D w kilku powszechnie używanych formatach. Biblioteka jest w całości napisana w C# i nie wymaga zewnętrznych natywnych binarek ani specyficznych konfiguracji platformowych.

Kod źródłowy jest dostępny na GitHubie: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

Kluczowe cechy

  • Czyste C# – brak P/Invoke, brak bibliotek natywnych, brak ograniczeń platformowych.
  • .NET 10.0+ kompatybilny.
  • Na licencji MIT – używaj go w projektach osobistych, komercyjnych lub własnościowych bez ograniczeń.
  • Architektura grafu sceny – znane drzewo węzłów, siatek, kamer i materiałów.
  • Obsługa wielu formatów – odczyt i zapis plików OBJ, STL, glTF 2.0, GLB, FBX, Collada i 3MF.

Szybki start

Instalacja przez NuGet

Dodaj pakiet NuGet do swojego projektu:

dotnet add package Aspose.3D --version 26.1.0

Twoja pierwsza konwersja

Najprostszym przypadkiem użycia jest wczytanie pliku 3D w jednym formacie i zapisanie go w innym. Oto dwuliniowa konwersja z OBJ do STL:

using Aspose.ThreeD;

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

Klasa Scene jest centralnym punktem wejścia. Wywołaj scene.Open() z ścieżką do pliku, aby wczytać model, a następnie wywołaj Save() z docelową ścieżką. Biblioteka wywnioskuje format na podstawie rozszerzenia pliku.

Tworzenie sceny od podstaw

Możesz także tworzyć sceny programowo:

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

Tworzy to nową scenę, dodaje prymityw pudełka jako węzeł potomny pod korzeniem, umieszcza go w współrzędnych (1, 2, 3) i eksportuje wynik jako plik glTF.

Wczytywanie z opcjami specyficznymi dla formatu

Gdy potrzebujesz dokładniejszej kontroli nad procesem wczytywania, każdy format udostępnia dedykowaną klasę opcji. Na przykład wczytywanie pliku STL z wyraźnymi opcjami:

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

Ta scene.Open() metoda akceptuje dowolny z typów opcji ładowania: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions, lub TmfLoadOptions.

Przeglądanie grafu sceny

Po wczytaniu sceny możesz przejść po drzewie węzłów, aby sprawdzić lub zmodyfikować jego zawartość:

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

Ten wzorzec jest przydatny do debugowania, generowania raportów o zawartości modelu lub selektywnej modyfikacji części sceny przed ponownym eksportem.

Stosowanie transformacji

Pozycjonowanie węzłów w przestrzeni 3D odbywa się za pomocą Transform właściwość na każdym 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");

Transformacje podążają za standardowym modelem dziedziczenia rodzic-dziecko: pozycja dziecka w przestrzeni światowej jest kombinacją jego lokalnej transformacji oraz wszystkich transformacji przodków aż do korzenia.

Co jest w zestawie

Biblioteka dostarczana jest z zestawem skoncentrowanych możliwości zaprojektowanych wokół modelu grafu sceny 3D.

Graf sceny

Graf sceny jest kręgosłupem API. Każdy plik 3D jest reprezentowany jako struktura drzewa:

KlasaRola
SceneKontener najwyższego poziomu; korzeń grafu sceny
NodeNazwana pozycja w drzewie; przechowuje przekształcenia i węzły potomne
EntityAbstrakcyjna baza dla obiektów wizualnych dołączonych do węzłów
MeshGeometria wielokątowa – wierzchołki, powierzchnie, normalne
CameraDefinicja wirtualnej kamery
TransformLokalny przesunięcie, obrót i skalowanie węzła
GlobalTransformObliczona transformacja w przestrzeni świata

Wbudowane prymitywy

Edycja .NET zawiera klasy kształtów parametrycznych, które mogą być bezpośrednio dołączane do węzłów lub konwertowane na Mesh:

  • Box – prostopadłościan wyrównany do osi z konfigurowalną szerokością, wysokością i głębokością.
  • Sphere – sfera parametryczna z konfigurowalnym promieniem.
  • Cylinder – cylinder parametryczny z konfigurowalnymi promieniami i wysokością.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);

Materiały

Biblioteka udostępnia wiele typów materiałów:

  • LambertMaterial – klasyczny materiał jedynie rozpraszający z komponentami koloru ambient, diffuse, emissive i reflective.
  • PhongMaterial – rozszerza model Lambert o podświetlenia spekularne i połysk.
  • PbrMaterial – materiał renderingu fizycznie opartego z bazowym kolorem, metalicznością, szorstkością, zacienieniem i slotami tekstur.

Narzędzia Matematyczne

Ten Aspose.ThreeD przestrzeń nazw zawiera podstawowe prymitywy matematyczne:

  • FVector3 – wektor 3‑składnikowy o pojedynczej precyzji dla pozycji, kierunków i skali. Używany przez Transform.Translation i Transform.Scale.
  • Vector4 – wektor 4‑składnikowy o pojedynczej precyzji dla punktów kontrolnych i normalnych.
  • Matrix4 – macierz transformacji 4x4.
  • Quaternion – reprezentacja obrotu. Używane przez Transform.Rotation.
  • BoundingBox – prostopadłościan ograniczający wyrównany do osi dla zapytań przestrzennych.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations

Opcje ładowania i zapisywania

Każdy format ma dedykowane klasy opcji, które pozwalają kontrolować zachowanie importu i eksportu:

FormatOpcje ładowaniaOpcje zapisu
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

Na przykład, aby wczytać plik OBJ z odwracaniem współrzędnych i normalizacją wektorów normalnych:

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

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

Obsługiwane formaty

Poniższa tabela podsumowuje formaty, które Aspose.3D FOSS for .NET może odczytywać i zapisywać.

FormatRozszerzenieImportEksportUwagi
OBJ.objTakTakZ materiałami MTL
STL.stlTakTakBinarny + ASCII
glTF 2.0.gltfTakTakformat JSON
GLB.glbTakTakBinary glTF
FBX.fbxTakTakTryby ASCII i binarne
Collada.daeTakTak
3MF.3mfTakTakformat produkcji 3D oparty na ZIP

Przewodnik wyboru formatu

Wybór odpowiedniego formatu zależy od Twojego przypadku użycia:

  • OBJ jest idealny, gdy potrzebujesz maksymalnej kompatybilności między narzędziami 3D. Prawie każda aplikacja do modelowania potrafi odczytywać i zapisywać OBJ. Dobrze sprawdza się przy wymianie danych siatek, ale przenosi jedynie podstawowe informacje o materiałach za pośrednictwem towarzyszących plików MTL.
  • STL jest formatem wyboru w przepływach pracy druku 3D. Przechowuje surową triangulowaną geometrię bez materiałów ani hierarchii sceny, co dokładnie oczekuje oprogramowanie slicer.
  • glTF jest nowoczesnym standardem dla 3D w sieci i w czasie rzeczywistym. Obsługuje materiały PBR, pełne hierarchie scen i jest zaprojektowany do efektywnego przesyłania. Używaj glTF przy tworzeniu przeglądarek internetowych lub celując w dowolny pipeline renderingu w czasie rzeczywistym.
  • FBX jest głęboko zintegrowany z przepływami pracy w tworzeniu gier i cyfrowej produkcji treści. Obsługuje bogate dane scen, w tym hierarchie i materiały. Aspose.3D FOSS dla .NET obsługuje FBX import i eksport w trybach ASCII i binarnym.
  • 3MF jest nowoczesnym formatem druku 3D, który obsługuje bogate metadane, materiały i sceny wielobiektowe w jednym pakiecie opartym na ZIP.

Znane ograniczenia

Scene.Render() jest nie jest obsługiwany w edycji FOSS. Wywołanie tej metody spowoduje wyrzucenie a NotImplementedException. Biblioteka jest zaprojektowana do przetwarzania 3D opartego na plikach – ładowania, manipulacji, transformacji i zapisywania modeli – zamiast renderowania w czasie rzeczywistym na wyświetlaczu.

Open Source i licencjonowanie

Aspose.3D FOSS for .NET został wydany na MIT License. Oznacza to, że możesz:

  • Używaj biblioteki w aplikacjach komercyjnych i własnościowych.
  • Modyfikuj kod źródłowy, aby dopasować go do swoich potrzeb.
  • Dystrybuuj bibliotekę jako część własnego oprogramowania.

Nie ma opłat licencyjnych, limitów użytkowania ani wymagań dotyczących przypisania poza tym, co określa licencja MIT.

Pełny kod źródłowy jest hostowany na GitHubie, a wkłady są mile widziane: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET

Wymagania systemowe

WymaganieSzczegóły
.Wersja .NET10.0 or later
ZależnościBrak (czysty C#)
PlatformyDowolna platforma, na której działa .NET
Menedżer pakietówNuGet

Rozpoczęcie

Oto zasoby, które pomogą Ci rozpocząć pracę:

  • Dokumentacja – obszerne przewodniki i przeglądy API są dostępne na Aspose.3D strona dokumentacji.
  • Baza wiedzy – praktyczne artykuły instruktażowe i porady rozwiązywania problemów w Aspose.3D KB.
  • Referencja API – szczegółowa referencja klas i metod dostępna na Referencja API Aspose.3D.
  • Kod źródłowy – przeglądaj i przyczyniaj się na GitHub.
  • NuGet – pakiet jest publikowany jako Aspose.3D na NuGet.

Typowe przypadki użycia

Oto kilka praktycznych scenariuszy, w których Aspose.3D FOSS dla .NET sprawdza się doskonale:

Potoki konwersji formatów

Wiele zespołów otrzymuje zasoby 3D w jednym formacie, ale potrzebuje ich w innym. Zespół projektowy może pracować w FBX, podczas gdy zespół webowy potrzebuje glTF. Biblioteka pozwala tworzyć zautomatyzowane potoki konwersji:

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

Zanim zintegrowasz zasób 3D z aplikacją, możesz chcieć zweryfikować jego zawartość — sprawdzając liczbę węzłów, weryfikując geometrię lub potwierdzając, że oczekiwane elementy są obecne:

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

Składanie sceny

Możesz wczytać wiele modeli i połączyć je w jedną scenę:

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

Co dalej

W nadchodzących wpisach omówimy:

  • Dogłębne omówienie kluczowych funkcji API grafu sceny, materiałów i narzędzi matematycznych.
  • Praktyczny przewodnik po pracy z każdym obsługiwanym formatem 3D — OBJ, STL, glTF, FBX i 3MF — obejmujący opcje wczytywania/zapisywania oraz wzorce konwersji wsadowej.

Bądźcie na bieżąco i zachęcamy do eksploracji biblioteki oraz dzielenia się opinią na GitHubie.