Caratteristiche e funzionalità
Caratteristiche e funzionalità
Questa pagina copre ogni area funzionale principale di Aspose.3D 26.1.0 con esempi C# funzionanti.
Caricamento e salvataggio delle scene
Scene.Open() carica un file; Scene.Save() lo esporta. Il formato viene rilevato dall’estensione del file:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");Usa la factory statica Scene.FromFile() come alternativa:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");Opzioni specifiche del formato
Passa LoadOptions o SaveOptions sottoclassi per un controllo dettagliato:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");Classi di opzioni disponibili:
| Classe | Direzione | Proprietà chiave |
|---|---|---|
ObjLoadOptions | Importa | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Esporta | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Importa | (impostazioni predefinite) |
GltfLoadOptions | Importa | (impostazioni predefinite) |
GltfSaveOptions | Esporta | (impostazioni predefinite) |
StlLoadOptions | Importa | (impostazioni predefinite) |
StlSaveOptions | Esporta | (impostazioni predefinite) |
ColladaLoadOptions | Importa | FlipCoordinateSystem |
ColladaSaveOptions | Esporta | Indented, TransformStyle |
PlyLoadOptions | Importa | (impostazioni predefinite) |
Costruzione di un grafo della scena
Crea nodi e allega entità per costruire una gerarchia:
var scene = new Scene();
var root = scene.RootNode;
var boxNode = root.CreateChildNode("box", new Box(5, 5, 5));
var sphereNode = root.CreateChildNode("sphere", new Sphere(3));Accedi ai figli tramite node.ChildNodes e l’entità allegata tramite node.Entity.
Mesh e Primitive
Crea un Mesh programmaticamente con punti di controllo e poligoni:
// Mesh.ControlPoints uses Aspose.ThreeD.Utilities.Vector4
// (double-precision, lowercase fields: x, y, z, w)
using Aspose.ThreeD.Utilities;
var mesh = new Mesh("custom");
mesh.ControlPoints.Add(new Vector4(0.0, 0.0, 0.0)); // w defaults to 1.0
mesh.ControlPoints.Add(new Vector4(10.0, 0.0, 0.0));
mesh.ControlPoints.Add(new Vector4(10.0, 10.0, 0.0));
mesh.ControlPoints.Add(new Vector4(0.0, 10.0, 0.0));
mesh.CreatePolygon(0, 1, 2, 3);Primitive integrate (Box, Sphere, Cylinder) possono essere convertite in Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();Elementi Vertex
Allega normali, UV e colori dei vertici alla geometria:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);Tipi di elementi vertice disponibili: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
Trasformazioni
Ogni Node porta un Transform con Translation, Rotation, e Scale:
var node = scene.RootNode.CreateChildNode("moved", new Box());
node.Transform.Translation = new FVector3(10, 0, 5);
node.Transform.Scale = new FVector3(2, 2, 2);Leggi la posizione nello spazio globale tramite node.GlobalTransform.Matrix oppure node.EvaluateGlobalTransform().
Materiali
Assegna materiali ai nodi per i dati di ombreggiatura:
var mat = new PhongMaterial("shiny");
mat.Diffuse = new Vector4(0.8, 0.2, 0.2, 1.0);
mat.Specular = new Vector4(1, 1, 1, 1);
mat.Shininess = 32;
scene.RootNode.CreateChildNode("red_box", new Box(), mat);Tipi di materiale: LambertMaterial, PhongMaterial, PbrMaterial.
Suggerimenti e migliori pratiche
- Usa
Scene.FromFile()per un caricamento in una sola riga quando non hai bisogno di personalizzazioniLoadOptions - Converti le primitive in
MeshconToMesh()prima di aggiungere gli elementi dei vertici - Usa
GltfSaveOptionscon un.glbestensione per output binario compatto - Verifica
node.Entitypernullprima del casting — non tutti i nodi contengono geometria - Usa
PolygonModifier.Triangulate()per convertire le mesh quad prima dell’esportazione in formati solo a triangoli come STL
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
ImportException al caricamento | File non supportato o danneggiato | Verifica che il file si apra in un visualizzatore 3D; controlla che il formato sia nella lista dei supportati |
| Materiali mancanti dopo il caricamento OBJ | .mtl file non trovato | Posiziona il .mtl file accanto al .obj oppure imposta ObjLoadOptions.EnableMaterials = true |
| Discrepanza di scala dopo l’importazione FBX | Sistemi di unità diversi | Usa ObjLoadOptions.Scale oppure applica un Transform dopo il caricamento |
FAQ
Come posso rilevare il formato di un file sconosciuto?
Usa FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);Posso caricare da uno stream invece di un percorso file?
Sì. Scene.Open() accetta un Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Quali formati supportano sia l’importazione che l’esportazione?
OBJ, STL, glTF/GLB, FBX, COLLADA e 3MF supportano entrambe le direzioni. PLY supporta solo l’importazione (l’esportatore PLY non è collegato).
Sommario del Riferimento API
| Classe / Metodo | Descrizione |
|---|---|
Scene | Contenitore della scena 3D di livello superiore |
Scene.Open() | Carica un file 3D per percorso o flusso |
Scene.Save() | Esporta la scena su file o flusso |
Scene.FromFile() | Factory statica per caricare e restituire un Scene |
Node | Nodo della gerarchia della scena che contiene entità e trasformazioni |
Node.CreateChildNode() | Crea e collega un nodo figlio |
Mesh | Mesh poligonale con punti di controllo e liste di facce |
Mesh.CreatePolygon() | Definisci una faccia poligonale mediante indici dei vertici |
Box / Sphere / Cylinder | Primitive parametriche integrate |
Transform | Traslazione, rotazione e scala locali |
FileFormat | Registro e rilevatore per i formati supportati |
LambertMaterial / PhongMaterial / PbrMaterial | Tipi di materiale per l’ombreggiatura |