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:
| Classe | El rol |
|---|---|
Scene | Contingut de nivell superior; la arrel del gràfic d’escena |
Node | Una posició anomenada a l’arbre; té transformes i nodes infantils |
Entity | Base abstracta per a objectes visuals adherits als nodes |
Mesh | Geometria poligonal: verticals, cares i normals |
Camera | Definició de la càmera virtual |
Transform | Traducció local, rotació i escala per a un nucli |
GlobalTransform | Transformació 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 perTransform.TranslationiTransform.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 separatAspose.ThreeD.Vector4(Float, camps de superfície) també existeix;Mesh.ControlPointsUtilitza 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:
| Format | Opcions de càrrega | Salvar opcions |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| GST / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | FbxSaveOptions |
| 3MF | TmfLoadOptions | TmfSaveOptions |
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.
| Format | Extensions | Importació | Exportació | Notes |
|---|---|---|---|---|
| OBJ | .obj | Sí | Sí | Amb materials MTL |
| STL | .stl | Sí | Sí | Màster + ASCII |
| GSTF | .gltf, .glb | Sí | Sí | Format JSON.; .glb És la variant binària autòcontenuda |
| FBX | .fbx | Sí | Sí | Exportació binària només; l’exportación ASCII està declarada però no activa en aquesta versió |
| COLLADA | .dae | Sí | Sí | |
| 3MF | .3mf | Sí | Sí | Format 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
| Requisits | Detall |
|---|---|
| .Versió .NET | 10.0 or later |
| Dependència | No hi ha (C# pur) |
| Plataforma | Qualsevol plataforma que estigui en .NET |
| Gestió de paquets | NuGet |
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.3Den 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.