Estem molt contents d’anunciar la disponibilitat de 3D FOSS per a .NET - una biblioteca de codi obert gratuït per treballar amb formats de fitxers 3D en aplicacions .NET. Construïda com a solució C# pura sense dependències natives, la biblioteca mira .Net 10.0 i posteriorment, fent-la accessible a un ampli ventall de projectes i entorns.

Aquest post recorre el que ofereix la biblioteca, com començar i on anar d’aquí.

Què és el 3D FOSS per a .NET?

Aspose.3D FOSS per a .NET és una llibreria de processament de fitxers 3D lleuger publicada sota el Llicència MIT.Proporciona una API de gràfics d’escena que li permet carregar, inspeccionar, transformar i salvar models 3D a través de diversos formats àmpliament utilitzats. La biblioteca està escrita en C# i no requereix cap configuració binària o específica per la plataforma.

El codi font està disponible a GitHub: WEB WEB / WEB i el seu nom és: WEB

Principals destacaments

  • El C# - No hi ha P/Invoke, no hi haurà biblioteques natives, ni restriccions de la plataforma.
  • .NET 10.0+ compatible amb.
  • Mit licensiada - utilitzar-lo en projectes personals, comercials o propietaris sense restriccions.
  • Arquitectura de escenaris - un arbre familiar de nodes, mesquites, càmeres i materials.
  • Suport multiformat - Llegeix i escrius els arxius OBJ, STL, glTF 2.0, GLB, FBX, Collada i 3MF.

Inici ràpid

Instal·lació NuGet

Afegeix el paquet NuGet al teu projecte:

dotnet add package Aspose.3D --version 26.1.0

La seva primera conversió

El cas més senzill d’ús és carregar un fitxer 3D en un format i salvar-lo en l’altre.Aquí hi ha una conversió de dues línies des d’OBJ a STL:

using Aspose.ThreeD;

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

El Scene La classe és el punt d’entrada central.Cal·la scene.Open() amb un camí de fitxer per carregar un model, després trucar Save() La biblioteca infereix el format de l’extenssió del fitxer.

Construir una escena de Scratch

També es poden fer escenes programàticament:

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

Això crea una nova escena, afegeix un primitiu com a nucli infantil sota la arrel, el posi en coordenades (1, 2, 3), i exporta el resultat com un fitxer glTF.

Carregar amb opcions específiques de format

Quan necessites un control més finós sobre el procés de càrrega, cada format proporciona una classe d’opcions dedicades. per exemple, carregar un fitxer STL amb opcions explícites:

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

El scene.Open() El mètode accepta qualsevol dels tipus d’opció de càrrega: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions,o TmfLoadOptions.

Travessar el Grau de l’escena

Una vegada que una escena és carregada, es pot caminar a l’arbre de nucli per inspeccionar o modificar els seus continguts:

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

Aquest patró és útil per a la descomposició, generar informes sobre el contingut del model o modificar selectivament parts d’una escena abans de reexportar.

Aplicació de transformacions

Positió de nodes en l’espai 3D es fa a través del Transform Propietats en cada un dels 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");

Les transformacions segueixen el model d’herència parental-infant: la posició espacial del nen és la combinació de la seva transformació local i tots els avantpassats es transformen fins a la raïm.

Què s’inclou

La biblioteca embarca amb un conjunt centrat de capacitats dissenyades al voltant del model de escena-graf 3D.

Escena de gràfics

El gràfic de l’escena és el racó de la API. Cada fitxer 3D es representa com una estructura d’arbre:

ClasseEl rol
SceneContingut de nivell superior; la arrel del gràfic d’escena
NodeUna posició anomenada a l’arbre; té transformes i nodes infantils
EntityBase abstracta per a objectes visuals adherits als nodes
MeshGeometria poligonal: verticals, cares i normals
CameraDefinició de la càmera virtual
TransformTraducció local, rotació i escala per a un nucli
GlobalTransformTransformació espacial computacional

El primer en els primitius

L’edició .NET inclou classes de forma paramètrica que es poden afegir directament als nodes o convertir-se en Mesh:

  • Caixa - Caixa alineada a l’eix amb amplitud, altesa i profunditat configurable.
  • Espai - Esfera paramètrica amb raigs configurables.
  • Cílindres - cilindre paramètric amb radiació i alçada configurables.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);

Materials

La biblioteca ofereix diversos tipus de materials:

  • LambertMaterial - el material difús clàssic, només amb components ambientals, difosos, emisssius i reflectius.
  • PhongMaterial - Extèn Lambert amb els seus destacaments especulars i la brillantor.
  • PbrMaterial - material de renderització basat en físic amb color bàsic, metàl·lic, duresa, occlussió i textura.

Utilitats matemàtiques

El Aspose.ThreeD El nom espacial inclou primitives matemàtiques essencials:

  • El VC3 - Un sol precisió de 3 components float vector (X, Y, ZUtilitzada per Transform.Translation i Transform.Scale.
  • Vector 4 (Aspose.ThreeD.Utilities2) - doble precisió de 4 components vector (x, y, z, w) per a punts de control i normals. Nota: un separat Aspose.ThreeD.Vector4 (Float, camps de superfície) també existeix; Mesh.ControlPoints Utilitza la variant de utilitats amb doble precisió.
  • Matriu 4 - 4x4 matriu de transformació.
  • Quaternitat - representació de rotació. utilitzat per Transform.Rotation.
  • BoundingBox - Caixa de llarga fila alineada a la punta per a les consultes espacials.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations

Carregar i salvar opcions

Cada format té classes d’opcions dedicades que li permeten controlar el comportament de les importacions i exportacions:

FormatOpcions de càrregaSalvar opcions
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
GST / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

Per exemple, per carregar un arxiu OBJ amb coordenada de flipping i normalització normal:

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

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

Formats suportats

La taula següent resumeix els formats que Aspose.3D FOSS per .NET pot llegir i escriure.

FormatExtensionsImportacióExportacióNotes
OBJ.objAmb materials MTL
STL.stlMàster + ASCII
GSTF.gltf, .glbFormat JSON.; .glb És la variant binària autòcontenuda
FBX.fbxExportació binària només; l’exportación ASCII està declarada però no activa en aquesta versió
COLLADA.dae
3MF.3mfFormat de fabricació 3D basat en ZIP

Guia de selecció de format

La selecció del format correcte depèn de la seva utilització:

  • OBJ És ideal quan necessites la màxima compatibilitat a través d’eines 3D. Quasi cada aplicació de modelatge pot llegir i escriure OBJ. Funciona bé per a l’intercanvi de dades mesh però només porta informació material bàsica a partir dels fitxers MTL companys.
  • STL És el format de l’elecció per a fluxos de treball d’impressió 3D. Està emmagatzemant geometria triangulada cru sense materials o jerarquia de escena, que és exactament el que el programari de tallador espera.
  • GSTF És la norma moderna per a web i 3D en temps real. S’aporta materials PBR, jerarquies de escena completa, i està dissenyat per una transmissió eficient. Utilitza glTF quan es construeixen espectadors basats en el web o s’adreça a qualsevol pipeline de rendiment en tempo real .
  • FBX És profundament integrada en el desenvolupament del joc i els fluxos de treball de creació de contingut digital. recolza dades d’escena rics, incloent hieràries i materials. Aspose.3D FOSS per a .NET suporta FBX Import i Exportació.Nota: l’exportació produeix només FBX binari - el codi d’esportacions de FBC existeix a la font però no està encaminat al camí d’export en aquesta versió.
  • 3MF És un format d’impressió 3D modern que suporta metadades, materials i escenes multiobjectes en un sol paquet basat en ZIP.

Limitacions conegudes

Scene.Render() És No suportat en l’edició FOSS. cridant aquest mètode serà llançar un NotImplementedException.La biblioteca està dissenyada per al processament 3D basat en arxius - carregar, manipular, transformar i salvar models - en lloc de renderitzar a temps real a una pantalla.

Open Source i llicència

Aspose.3D FOSS per a .NET es publica sota el Llicència MIT.Això significa que vostè és lliure de:

  • Utilitzar la biblioteca en aplicacions comercials i propietàries.
  • Modifica el codi font per a adaptar-se a les teves necessitats.
  • Distribuïu la biblioteca com a part del vostre propi programari.

No hi ha cap taxa de lleialtat, no hi haurà límits d’ús i no s’han de fer requisits per a l’adjudicació més enllà del que especifica la llicència MIT.

El codi font complet és hostat a GitHub, i les contribucions són benvingudes: WEB WEB / WEB i el seu nom és: WEB

Requisits del sistema

RequisitsDetall
.Versió .NET10.0 or later
DependènciaNo hi ha (C# pur)
PlataformaQualsevol plataforma que estigui en .NET
Gestió de paquetsNuGet

Començar a fer

Aquí teniu els recursos per ajudar-vos a pujar i córrer:

  • Documentació - Guides i passadissos API complets estan disponibles a la Web de documentació Aspose.3D.
  • Base de coneixement - Com practicar els articles i les consells de resolució de problemes en el Tècnic 3D KB.
  • Referència API - Referència de classe i mètode detallada a la Aspose.3D API Referència.
  • Codi de font - Brouïr i contribuir a la GitHub.
  • NuGet - El paquet es publica com a Aspose.3D en el nu.

Casos d’ús comú

Aquí teniu alguns escenaris pràctics on Aspose.3D FOSS per a .NET s’ajusta bé:

Formació de tubs de conversió

Moltes equips reben els actius 3D en un format, però els necessiten en l’altre.Un equip de disseny pot treballar en FBX mentre que el web té necessitat d’glTF. La biblioteca li permet construir tubs de conversió automatitzats:

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

Abans d’integrar un actiu 3D en la seva aplicació, pot ser que vulgui validar el seu contingut - comprovant els comptes de nuclis, verificar la geometria o confirmar que s’esperen elements:

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

Assemblea de l’escena

Podeu carregar diversos models i combinar-los en una sola escena:

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

Què és el següent

En els propers post, cobrirem:

  • Un profund immersor en les característiques clau de l’API, materials i utilitats matemàtiques.
  • Una guia pràctica per treballar amb cada format 3D suportat - OBJ, STL, glTF, FBX i 3MF - incloent opcions de càrrega / estalvi i patrons de conversió d’un batx.

Mantenir-se en la seva forma, i sentir-te lliure d’explorar la biblioteca i compartir el teu comentari a GitHub.