Wir freuen uns, die Verfügbarkeit von 3D-FOSS für .NET – eine kostenlose Open-Source-Bibliothek für die Arbeit mit 3D-Dateiformaten in .NET Anwendungen. Als reine C# Lösung ohne native Abhängigkeiten erstellt, zielt die Bibliothik auf .Net 10.0 und später ab und macht sie zugänglich für ein breites Spektrum von Projekten und Umgebungen .
Dieser Beitrag führt Sie durch, was die Bibliothek bietet, wie man anfängt und wohin man weitergeht.
Was ist Aspose.3D FOSS für .NET?
3D FOSS für .NET ist eine leichte Bibliothek zur Verarbeitung von Dateien in 3d, die unter dem Titel “Platzhalter” veröffentlicht wurde. MIT-Lizenz.Die Bibliothek ist vollständig in C# geschrieben und erfordert keine externen nativen Binäre oder plattformspezifische Konfigurationen.
Der Quellcode ist auf GitHub verfügbar: Die Datenbank wird von der Kommission in den letzten Jahren veröffentlicht.
Wichtige Punkte
- Reines C# – keine P/Invoke, keine nativen Bibliotheken, kein Plattformbeschränkungen.
- .NET 10.0+ Kompatibel.
- MIT-lizenziert. – verwenden Sie es in persönlichen, kommerziellen oder proprietären Projekten ohne Einschränkungen.
- Szenengrafikarchitektur – ein vertrauter Baum aus Knoten, Maschen, Kameras und Materialien.
- Unterstützung für mehrere Formate – lesen und schreiben OBJ, STL, glTF 2.0, GLB, FBX, Collada und 3MF Dateien.
Schneller Start
NuGet-Installation
Fügen Sie das NuGet-Paket zu Ihrem Projekt hinzu:
dotnet add package Aspose.3D.FOSSIhre erste Bekehrung
Der einfachste Anwendungsfall ist das Laden einer 3D-Datei in einem Format und die Speicherung in ein anderes. Hier eine zweizügliche Umwandlung von OBJ zu STL:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");
Die Scene Die Klasse ist der zentrale Einstiegspunkt. scene.Open() mit einem Dateipfad, um ein Modell zu laden und dann aufrufen Save() Die Bibliothek schließt das Format aus der Dateierweiterung.
Eine Szene von Grund auf bauen
Sie können auch Szenen programmatisch konstruieren:
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");
Dadurch wird eine neue Szene erstellt, ein Box-Primitiv als Kinderknoten unter der Wurzel hinzugefügt, an den Koordinaten (1, 2, 3) positioniert und das Ergebnis in einer glTF-Datei exportiert.
Lade mit Format-spezifischen Optionen
Wenn Sie eine bessere Kontrolle über den Ladevorgang benötigen, bietet jedes Format eine eigene Optionsklasse. Zum Beispiel wird die Aufladung einer STL-Datei mit expliziten Optionen:
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");
Die scene.Open() Die Methode akzeptiert einen der folgenden Belastungsoptionsarten: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions,oder , TmfLoadOptions.
Durch die Szene graphisch zu gehen
Sobald eine Szene geladen ist, können Sie den Knotenbaum durchlaufen um seinen Inhalt zu überprüfen oder zu ändern:
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);
}
}
Dieses Muster ist nützlich für das Debuggen, die Erstellung von Berichten über den Modellinhalt oder die selektive Modifizierung von Teilen einer Szene vor der Re-Export.
Umgestaltungen umsetzen
Die Positionierung von Knoten im 3D-Raum erfolgt durch die Transform Eigentum auf jeder 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");
Transformationen folgen dem Standard-Mutter-Kind-Erbmodell: Die Weltraumposition eines Kindes ist die Kombination seiner lokalen Transformation und aller Vorfahrentransformations bis zur Wurzel.
Was ist darin enthalten?
Die Bibliothek verfügt über eine spezielle Reihe von Funktionen, die auf dem 3D-Szenen-Grafikmodell basieren.
Schauplatz
Die Szenengraph ist das Rückgrat der API. Jede 3D-Datei wird als Baumstruktur dargestellt:
| Klasse | Rolle und Funktion |
|---|---|
Scene | Top-Level Container; die Wurzel der Szene Graphik |
Node | Eine benannte Position im Baum; hält Transforms und Kinderknoten. |
Entity | Abstrakte Basis für visuelle Objekte, die an Knoten angebracht sind |
Mesh | Polygonale Geometrie - Werte, Gesichter, Normalen |
Camera | Definition der virtuellen Kamera |
Transform | Lokalübersetzung, Rotation und Skalierung für einen Knoten |
GlobalTransform | Rechnergestützte Weltraumtransformation |
Eingeborene Primitive
Die .NET-Edition enthält parametrische Formklassen, die direkt an Knoten angebracht oder in Mesh:
- Box (ausgenommen) – Achsen ausgerichtete Box mit konfigurierbarer Breite, Höhe und Tiefe.
- Sphäre – eine parametrische Kugel mit konfigurierbarem Radius.
- Zylinder – parametrischer Zylinder mit konfigurierbarem Radius und Höhe.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Materialien
Die Bibliothek bietet mehrere Materialarten:
- LambertMaterial – klassische nur diffuse Materialien mit umwelt-, diffusen, emittierenden und reflektierenden Farbkomponenten.
- PhongMaterial – erweitert Lambert mit Spiegel-Highlights und Glanz.
- PbrMaterial – physikalisch basiertes Rendering-Material mit Basisfarbe, Metall, Rauheit, Okklusion und Texturen.
Mathematik-Dienste
Die Aspose.ThreeD Der Namensraum umfasst wesentliche mathematische Primitive:
- FVektor3 – einpräzise 3-Komponenten-Floatvektor (
X,Y,Z) Verwendet von:Transform.Translationund .Transform.Scale. - Vektor 4 (
Aspose.ThreeD.Utilities) – Doppelpräzisions-Vektor mit vier Komponenten (x,y,z,w) für Kontrollpunkte und Normale.Aspose.ThreeD.Vector4(Float, Großbuchstabenfelder) auch vorhanden ist;Mesh.ControlPointsverwendet die doppelgenauige Variante Utilities. - Matrix4 (Funktion 4 und 4) – 4x4 Transformationsmatrix. Das ist die erste Form, in der wir das tun können.
- Quaternion – Rotationsdarstellung. Verwendet von
Transform.Rotation. - BoundingBox – Achsen-ausgerichtete Grenzfläche für räumliche Abfragen.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations
Optionen zum Laden und Speichern
Jedes Format hat spezielle Optionsklassen, mit denen Sie das Import- und Exportverhalten steuern können:
| Format der Datenbank | Ladeoptionen | Speichern von Optionen |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| Geltungsbereich der Richtlinie 2009/138/EG | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | FbxSaveOptions |
| 3MF | TmfLoadOptions | TmfSaveOptions |
Zum Beispiel, um eine OBJ-Datei mit Koordinatenumdrehung und normaler Normalisierung zu laden:
var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;
scene.Open("model.obj", opts);
Unterstützte Formate
Die folgende Tabelle fasst die Formate zusammen, die Aspose.3D FOSS für .NET lesen und schreiben kann.
| Format der Datenbank | Erweiterung | Einfuhr | Ausfuhr | Anmerkungen |
|---|---|---|---|---|
| OBJ | .obj | - Ja , das ist gut . | - Ja , das ist gut . | mit MTL-Materialien |
| STL | .stl | - Ja , das ist gut . | - Ja , das ist gut . | Binär + ASCII-Namen |
| GFT-Systeme | .gltf, .glb | - Ja , das ist gut . | - Ja , das ist gut . | JSON-Format; .glb ist die eigenständige binäre Variante, |
| FBX | .fbx | - Ja , das ist gut . | - Ja , das ist gut . | Nur binäre Exporte; ASCII-Export wird in dieser Version deklariert, aber nicht aktiv. |
| COLLADA | .dae | - Ja , das ist gut . | - Ja , das ist gut . | |
| 3MF | .3mf | - Ja , das ist gut . | - Ja , das ist gut . | ZIP-basiertes 3D-Herstellungsformat |
Formatwahlleiter
Die Wahl des richtigen Formats hängt von Ihrem Anwendungsfall ab:
- OBJ Die 3D-Modelle sind ideal, wenn Sie maximale Kompatibilität zwischen 3d-Tools benötigen. Fast jede Modellierungsanwendung kann OBJ lesen und schreiben. Es funktioniert gut für den Mesh-Datenwechsel, trägt aber nur grundlegende Materialinformationen über begleitende MTL-Files.
- STL Das Format ist die Wahl für 3D-Druckworkflows. Es speichert rohe triangulierte Geometrie ohne Materialien oder Szenenhierarchie, was genau das ist, worauf sich die Slicer Software erhofft.
- GFT-Systeme ist der moderne Standard für Web- und Echtzeit-3D. Es unterstützt PBR-Materialien, vollständige Szenenhierarchien und ist für eine effiziente Übertragung konzipiert. Verwenden Sie glTF beim Erstellen webbasierter Betrachter oder zum Zielen auf jede Echtezeit-Rendering-Pipeline.
- FBX Die Software ist tief in die Entwicklung von Spielen und den Workflows zur Erstellung digitaler Inhalte integriert. Sie unterstützt umfangreiche Szenendaten, einschließlich Hierarchien und Materialien. Aspose.3D FOSS für .NET unterstütze FBX Einfuhr und Ausfuhr.Anmerkung: Export erzeugt nur binäre FBX ASCII-FBX-Exportcode ist in der Quelle vorhanden, wird aber nicht an den Exportraditionsablauf dieser Version angebunden.
- 3MF ist ein modernes 3D-Druckformat, das reiche Metadaten, Materialien und Multiobjektszenen in einem einzigen ZIP-basierten Paket unterstützt.
Bekannte Grenzen
Scene.Render() ist . nicht unterstützt Die Methode wird als “FOSS” bezeichnet. NotImplementedException.Die Bibliothek ist für die Datei-basierte 3D-Verarbeitung konzipiert - das Laden, Manipulieren, Transformieren und Speichern von Modellen - anstatt Echtzeit-Rendering auf einem Display.
Open Source und Lizenzierung
3D FOSS für .NET wird unter dem Titel “Platzhalter” veröffentlicht. MIT-Lizenz.Das bedeutet , dass Sie frei sind:
- Verwenden Sie die Bibliothek in kommerziellen und proprietären Anwendungen.
- Ändern Sie den Quellcode, um Ihren Bedürfnissen zu entsprechen.
- Verteilen Sie die Bibliothek als Teil Ihrer eigenen Software.
Es gibt keine Lizenzgebühren, keine Nutzungsbeschränkungen und keine Attributionsanforderungen über das hinaus, was die MIT-Lizenz spezifiziert.
Der vollständige Quellcode ist auf GitHub gehostet, und Beiträge sind willkommen: Die Datenbank wird von der Kommission in den letzten Jahren veröffentlicht.
Systemanforderungen
| Erfordernis | Einzelheiten |
|---|---|
| .NET-Version | 10.0 or later |
| Abhängigkeiten | Keine (reines C#) |
| Plattformen | Jede Plattform, auf der .NET läuft |
| Paketverwalter | NuGet |
Wie man anfängt
Hier sind die Ressourcen, um Ihnen zu helfen:
- Dokumentation und Informationen – umfassende Leitfäden und API-Wandhrungen sind auf der Webseite des Aspose.3D-Dokumentationsseite.
- Wissensbasis – praktische Anleitungen zu Artikeln und Fehlerbehebungstipps in der Aspose.3D KB.
- Referenz für die API – detaillierte Referenz für Klasse und Methode im Aspose.3D-API Referenz für die Anwendung von Daten auf der Webseite.
- Quellcode – durchsuchen und dazu beitragen, dass GitHub.
- NuGet – das Paket wird als:
Aspose.3Dauf NuGet.
Häufige Anwendungsfälle
Hier sind einige praktische Szenarien, in denen Aspose.3D FOSS für .NET gut passt:
Format-Umwandlungspfade
Viele Teams erhalten 3D-Assets in einem Format, benötigen sie aber in einer anderen. Ein Designteam arbeitet möglicherweise im FBX und das Webte am glTF. Die Bibliothek ermöglicht es Ihnen, automatisierte Konvertierungspipelines zu erstellen:
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
Bevor Sie einen 3D-Asset in Ihre Anwendung integrieren, möchten Sie vielleicht seinen Inhalt validieren - die Anzahl der Knoten überprüfen, Geometrie verifizieren oder bestätigen, dass erwartete Elemente vorhanden sind:
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");
}
}
Szenenversammlung
Sie können mehrere Modelle laden und sie in einer einzigen Szene kombinieren:
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");
Was kommt als nächstes?
In den kommenden Beiträgen werden wir Folgendes behandeln:
- Ein tiefes Eintauchen in die Schlüsselfunktionen der Szenengraphie-API, Materialien und mathematische Hilfsprogramme.
- Ein praktischer Leitfaden für die Arbeit mit jedem unterstützten 3D-Format - OBJ, STL, glTF, FBX und 3MF - einschließlich Lade/Speicheroptionen und Batch-Konvertierungsmustern.
Bleiben Sie dran und können die Bibliothek erkunden und Ihr Feedback auf GitHub teilen.