Vi er glade for at kunne meddele, at der findes en ny version af 3D FOSS til .NET - et gratis, open-source bibliotek til at arbejde med 3D filformater i .NET applikationer. Bygget som en ren C # løsning uden indfødte afhængigheder, er biblioteket målrettet .Net 10.0 og senere, hvilket gør det tilgængeligt for en bred vifte af projekter og miljøer.
I denne artikel gennemgår man, hvad biblioteket tilbyder, hvordan man starter og hvorfra.
Hvad er 3D-FOSS for .NET?
Aspose.3D FOSS for .NET er et let 3D-filbehandlingsbibliotek, der udgives under MIT-licens.Det giver et scene-graf API, der gør det muligt at indlæse, inspicere, omdanne og gemme 3D modeller på tværs af flere udbredt anvendte formater. Biblioteket er helt skrevet i C # og kræver ingen eksterne native binære filer eller platformspesifikke konfigurationer.
Kilden er tilgængelig på GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET
Hovedpunkter
- Rengørings-C# - ingen P/Invoke, ingen native biblioteker, Ingen platform begrænsninger.
- .NET 10.0+ kompatibel.
- MIT licenseret. – bruge det i personlige, kommercielle eller proprietære projekter uden begrænsninger.
- Scenografarkitektur – et velkendt træ af knuder, maskersystemer kameraer og materialer.
- Multi-format understøttelse - læse og skrive OBJ, STL, glTF 2.0, GLB, FBX, Collada og 3MF filer.
Hurtig start
NuGet-installation
Tilføj NuGet-pakken til projektet:
dotnet add package Aspose.3D --version 26.1.0
Din første omvendelse
Den enkleste brugstilfælde er at indlæse en 3D-fil i et format og gemme den i en anden. Her er en to-linje konvertering fra OBJ til STL:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");
Den Europæiske Union Scene Klasse er det centrale indgangssted. scene.Open() med en filvej til at indlæse en model, og derefter ringe Save() Biblioteket indleder formatet fra filudvidelsen.
At bygge en scene fra bunden af
Du kan også konstruere scener programmatisk:
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");
Dette skaber en ny scene, tilføjer et boks primitiv som en barn node under roden, placerer det på koordinater (1, 2, 3), og eksporterer resultatet som glTF fil.
Lade med format-specifikke indstillinger
Når du har brug for bedre kontrol over indlæseprocessen, giver hvert format en dedikeret opsjonsklasse. For eksempel kan du indlade en STL-fil med eksplicitte optioner:
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");
Den Europæiske Union scene.Open() Metoden accepterer en hvilken som helst af de følgende typer belastningsmuligheder: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions,eller TmfLoadOptions.
Gennem en scenegraf
Når en scene er indlæst, kan du gå i nodetræet for at inspicere eller ændre dens indhold:
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);
}
}
Dette mønster er nyttigt til fejlfinding, generering af rapporter om modelindhold eller selektiv modificering av dele af en scene før re-eksport.
Gør om på en anden måde
Positionering af knuder i 3D-rummet sker gennem den Transform ejendomme på hver 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");
Transformationer følger den standard moders-barn arv model: et barns verdensrum position er kombinationen af sin lokale transformation og alle forfader transformerer op til roden.
Hvad der indgår i den
Biblioteket kommer med et fokuseret sæt af funktioner designet omkring 3D-scene-grafmodellen.
Scenegraf
Scenegrafen er rygsøjlen i API’en. Hver 3D-fil repræsenteres som en træstruktur:
| Klasse | Udøvelse af en rolle |
|---|---|
Scene | Top-level container; roden af scenen graf |
Node | En navngivet position i træet; indeholder transformationer og barnknobler |
Entity | Abstrakt base for visuelle objekter, der er knyttet til knudepunkter |
Mesh | Polygonal geometri – hjørner, sider og normaler. |
Camera | Virtuel kamera definition |
Transform | Lokal oversættelse, rotation og skala for en node |
GlobalTransform | Computeret verdensrumstransformation |
Indbyggede primitive ting
.NET-udgaven indeholder parametriske formklasser, der kan vedhæftes til knudepunkter direkte eller konverteres til Mesh:
- Foldning - akselignet boks med konfigurerbar bredde, højde og dybde.
- Sfæren – parametrisk sfære med konfigurerbar radius.
- Cylinder – parametrisk cylinder med konfigurerbare radier og højde.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Materialer
Biblioteket tilbyder flere typer materiale:
- LambertMaterial – klassisk materiale, der kun er diffus med omgivende farveelementer, diffuse farver, emission og reflekterende farvestoffer.
- PhongMaterial - udvider Lambert med specular highlights og glans.
- PbrMaterial – fysisk baseret rendering materiale med basis farve, metallic, grovhed, occlusion og tekstur slots.
Matematiske værktøjer
Den Europæiske Union Aspose.ThreeD Navnespace omfatter essentielle matematiske primitive:
- Fvektor3 – en præcisionsflydende 3-komponentvektor (
X,Y,Z) Bruges af:Transform.Translationog:Transform.Scale. - Vector4 (
Aspose.ThreeD.Utilities) – dobbeltpræcision 4-komponentvektor (x,y,z,w) for kontrolpunkter og normals. Bemærk: en særskilt tabel med de vigtigste oplysninger om den normale position i det pågældende område, herunder følgende:Aspose.ThreeD.Vector4(flydende, storbogstaver) findes også.;Mesh.ControlPointsbruger dobbeltpræcisionsvarianten Utilities. - Matrix4 - 4x4 transformationsmatrix.
- Kvaternjon - rotationsrepræsentation. Brugt af
Transform.Rotation. - BoundingBox – akselignet afgrænsende boks til rumlige forespørgsler.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations
Optioner til indlæse og gemme
Hvert format har dedikerede opsjonsklasser, der giver dig mulighed for at styre import- og eksportadfærd:
| Format: | Lådeindstillinger | Optimering af opslag: |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| GLB/GTF | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | FbxSaveOptions |
| 3MF | TmfLoadOptions | TmfSaveOptions |
For eksempel, for at indlæse en OBJ-fil med koordinat flipping og normal normalisering:
var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;
scene.Open("model.obj", opts);
Støttede formater
Følgende tabel opsummerer de formater, som Aspose.3D FOSS for .NET kan læse og skrive.
| Format: | Udvidelse | Import af varer | Eksport af varer | Noter til dette direktiv: |
|---|---|---|---|---|
| OBJ | .obj | - Ja, jeg gør. | - Ja, jeg gør. | Med MTL-materialer |
| STL | .stl | - Ja, jeg gør. | - Ja, jeg gør. | Binær + ASCII |
| GFT-værdi | .gltf, .glb | - Ja, jeg gør. | - Ja, jeg gør. | JSON-format; .glb er den selvstændige binære variant |
| FBX | .fbx | - Ja, jeg gør. | - Ja, jeg gør. | Kun binær eksport; ASCII-eksport er angivet, men ikke aktiv i denne version. |
| COLLADA | .dae | - Ja, jeg gør. | - Ja, jeg gør. | |
| 3MF | .3mf | - Ja, jeg gør. | - Ja, jeg gør. | ZIP-baseret 3D-produktionsformat |
Vejledning til formatvalg
Valget af det rigtige format afhænger af din brugstilstand:
- OBJ Det er ideelt, når du har brug for maksimal kompatibilitet på tværs af 3D-værktøjer. Næsten alle modelleringsprogrammer kan læse og skrive OBJ. Det fungerer godt til mesh dataudveksling, men bærer kun grundlæggende materialeinformation gennem ledsagende MTL-filer.
- STL Det gemmer rå trianguleret geometri uden materialer eller scenehierarki, hvilket er præcis hvad slicer-software forventer.
- GFT-værdi er den moderne standard for web og real-time 3D. Den understøtter PBR materialer, fuld scene hierarkier, og er designet til effektiv transmission. Brug glTF når du bygger webbaserede seere eller målrette enhver realtid rendering pipeline.
- FBX Det understøtter rige scene data, herunder hierarkier og materialer. Aspose.3D FOSS for .NET underholder FBX import og eksport.Note: export producerer kun binær FBX ASCII FBx-exportkode findes i kildekoden, men er ikke forbundet med eksportbanen i denne version.
- 3MF er et moderne 3D-printformat, der understøtter rig metadata, materialer og multiobjektscener i en enkelt ZIP-baseret pakke.
Kendte begrænsninger
Scene.Render() er: ikke støttet Hvis man kalder denne metode, vil der blive kastet en NotImplementedException.Biblioteket er designet til filbaseret 3D-behandling - indlæse, manipulere, omdanne og gemme modeller - snarere end realtidssyn på en display.
Open Source og licensering
3D FOSS for .NET udgives under den nye version af det europæiske program. MIT-licens.Det betyder, at du kan:
- Brug biblioteket i kommercielle og proprietære applikationer.
- Modificer kildekoden efter dine behov.
- Distribuer biblioteket som en del af din egen software.
Der er ingen royalties, ingen brugsgrænser og ingen tilskrivningskrav ud over hvad MIT-licensen specificerer.
Den fulde kildekode er hostet på GitHub, og bidrag er velkomne: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET
Systemkrav
| Krav til: | Detaljeret |
|---|---|
| .NET-version | 10.0 or later |
| Afhængighed | Ingen (ren C#) |
| Plattformer | Enhver platform, der kører .NET |
| Pakkeforvalter | NuGet |
Hvordan man begynder
Her er nogle ressourcer, der kan hjælpe dig med at komme i gang:
- Dokumentation - omfattende vejledninger og API-vejledning er tilgængelige på webstedet for de fleste af disse programmer. Aspose.3D-dokumentationsstedet.
- Vidensgrundlag – praktiske vejledningsartikler og fejlfindingstips i Aspose.3D KB.
- API-reference – detaljeret klasse- og metodereference på den Aspose.3D API-reference.
- Kildekode – gennemse og bidrage til GitHub.
- NuGet – pakken offentliggøres som:
Aspose.3Dpå NuGet.
Almindelige anvendelsestilfælde
Her er nogle praktiske scenarier, hvor 3D FOSS for .NET passer godt:
Formatkonverteringsrørledninger
Mange hold modtager 3D-ressourcer i et format, men har brug for dem i en anden. Et designteam kan arbejde i FBX mens webholdet behøver glTF. Biblioteket giver dig mulighed for at opbygge automatiserede konverteringsrørledninger:
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
Før du integrerer en 3D-aktiv i din applikation, kan det være nødvendigt at validere dens indhold - tjekke knudepunktantallet, verificere geometrien eller bekræfte, at forventede elementer er til stede:
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");
}
}
Scenens samling
Du kan indlæse flere modeller og kombinere dem i en scene:
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");
Hvad er det næste?
I kommende indlæg vil vi dække:
- Et dybt dyk i de vigtigste funktioner i scene-grafik API, materialer og matematik værktøjer.
- En praktisk vejledning til at arbejde med hvert understøttede 3D-format - OBJ, STL, glTF, FBX og 3MF - herunder indlæse/spar optioner og batch konverteringsmønstre.
Bliv med og følg biblioteket, og del din feedback på GitHub.