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:

KlasseUdøvelse af en rolle
SceneTop-level container; roden af scenen graf
NodeEn navngivet position i træet; indeholder transformationer og barnknobler
EntityAbstrakt base for visuelle objekter, der er knyttet til knudepunkter
MeshPolygonal geometri – hjørner, sider og normaler.
CameraVirtuel kamera definition
TransformLokal oversættelse, rotation og skala for en node
GlobalTransformComputeret 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.Translation og: 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.ControlPoints bruger 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ådeindstillingerOptimering af opslag:
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
GLB/GTFGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

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:UdvidelseImport af varerEksport af varerNoter 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-version10.0 or later
AfhængighedIngen (ren C#)
PlattformerEnhver platform, der kører .NET
PakkeforvalterNuGet

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.3D på 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.