Fonctionnalités et capacités

Fonctionnalités et capacités

Fonctionnalités et capacités

Cette page couvre chaque domaine fonctionnel majeur de Aspose.3D 26.1.0 avec des exemples C# fonctionnels.


Chargement et sauvegarde des scènes

Scene.Open() charge un fichier; Scene.Save() l’exporte. Le format est détecté à partir de l’extension du fichier:

using Aspose.ThreeD;

var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");

Utilisez la fabrique statique Scene.FromFile() comme alternative:

var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");

Options spécifiques au format

Passez LoadOptions ou SaveOptions des sous‑classes pour un contrôle fin:

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");

Classes d’options disponibles :

ClasseDirectionPropriétés clés
ObjLoadOptionsImporterFlipCoordinateSystem, EnableMaterials, Scale
ObjSaveOptionsExporterFlipCoordinateSystem, EnableMaterials, PointCloud
FbxLoadOptionsImporter(paramètres par défaut)
GltfLoadOptionsImporter(paramètres par défaut)
GltfSaveOptionsExporter(paramètres par défaut)
StlLoadOptionsImporter(paramètres par défaut)
StlSaveOptionsExporter(paramètres par défaut)
ColladaLoadOptionsImporterFlipCoordinateSystem
ColladaSaveOptionsExporterIndented, TransformStyle
PlyLoadOptionsImporter(paramètres par défaut)

Construction d’un graphe de scène

Créez des nœuds et attachez des entités pour construire une hiérarchie :

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

Accéder aux enfants via node.ChildNodes et l’entité attachée via node.Entity.


Maillage et primitives

Créer un Mesh programmatique avec des points de contrôle et des polygones :

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

Primitives intégrées (Box, Sphere, Cylinder) peuvent être converties en Mesh:

var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();

Éléments de sommet

Attachez les normales, les UV et les couleurs de sommet à la géométrie :

var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);

Types d’éléments de sommet disponibles : VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.


Transformations

Chaque Node porte un Transform avec Translation, Rotation, et 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);

Lire la position en espace monde via node.GlobalTransform.Matrix ou node.EvaluateGlobalTransform().


Matériaux

Attribuez des matériaux aux nœuds pour les données d’éclairage :

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

Types de matériau : LambertMaterial, PhongMaterial, PbrMaterial.


Conseils et bonnes pratiques

  • Utiliser Scene.FromFile() pour un chargement en une ligne quand vous n’avez pas besoin de personnalisation LoadOptions
  • Convertir les primitives en Mesh avec ToMesh() avant d’ajouter des éléments de sommet
  • Utiliser GltfSaveOptions avec un .glb extension pour une sortie binaire compacte
  • Vérifier node.Entity pour null avant le transtypage — tous les nœuds ne contiennent pas de géométrie
  • Utiliser PolygonModifier.Triangulate() pour convertir les maillages quadrangulaires avant l’exportation vers des formats uniquement triangulaires comme STL

Problèmes courants

ProblèmeCauseCorrection
ImportException au chargementFichier non pris en charge ou corrompuVérifiez que le fichier s’ouvre dans un visualiseur 3D ; vérifiez que le format figure dans la liste des formats pris en charge
Matériaux manquants après le chargement d’OBJ.mtl fichier introuvablePlacez le .mtl fichier à côté du .obj ou définir ObjLoadOptions.EnableMaterials = true
Mauvaise correspondance d’échelle après l’importation FBXDifférents systèmes d’unitésUtiliser ObjLoadOptions.Scale ou appliquer un Transform après le chargement

FAQ

Comment détecter le format d’un fichier inconnu ?

Utiliser FileFormat.Detect():

var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);

Puis-je charger depuis un flux au lieu d’un chemin de fichier ?

Oui. Scene.Open() accepte un Stream:

using var stream = File.OpenRead("model.glb");
scene.Open(stream);

Quels formats prennent en charge à la fois l’importation et l’exportation ?

OBJ, STL, glTF/GLB, FBX, COLLADA et 3MF prennent en charge les deux sens. PLY ne supporte que l’importation (l’exportateur PLY n’est pas implémenté).


Résumé de la référence API

Classe / MéthodeDescription
SceneConteneur de scène 3D de niveau supérieur
Scene.Open()Charger un fichier 3D par chemin ou flux
Scene.Save()Exporter la scène vers un fichier ou un flux
Scene.FromFile()Fabrique statique pour charger et renvoyer un Scene
NodeNœud hiérarchique de scène contenant des entités et des transformations
Node.CreateChildNode()Créer et attacher un nœud enfant
MeshMaillage polygonal avec points de contrôle et listes de faces
Mesh.CreatePolygon()Définir une face polygonale par indices de sommets
Box / Sphere / CylinderPrimitives paramétriques intégrées
TransformTranslation, rotation et mise à l’échelle locales
FileFormatRegistre et détecteur des formats pris en charge
LambertMaterial / PhongMaterial / PbrMaterialTypes de matériaux pour l’ombrage
 Français