Functies en functionaliteiten
Functies en functionaliteiten
Deze pagina behandelt elk belangrijk functiegebied van Aspose.3D 26.1.0 met werkende C#-voorbeelden.
Scènes laden en opslaan
Scene.Open() laadt een bestand; Scene.Save() exporteert het. Het formaat wordt gedetecteerd aan de hand van de bestandsextensie:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");Gebruik de statische factory Scene.FromFile() als alternatief:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");Formaat-specifieke opties
Geef LoadOptions of SaveOptions subklassen voor fijnmazige controle:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");Beschikbare optieklassen:
| Klasse | Richting | Belangrijke eigenschappen |
|---|---|---|
ObjLoadOptions | Importeren | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Exporteren | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Importeren | (standaardinstellingen) |
GltfLoadOptions | Importeren | (standaardinstellingen) |
GltfSaveOptions | Exporteren | (standaardinstellingen) |
StlLoadOptions | Importeren | (standaardinstellingen) |
StlSaveOptions | Exporteren | (standaardinstellingen) |
ColladaLoadOptions | Importeren | FlipCoordinateSystem |
ColladaSaveOptions | Exporteren | Indented, TransformStyle |
PlyLoadOptions | Importeren | (standaardinstellingen) |
Een scène‑grafiek opbouwen
Maak knooppunten aan en koppel entiteiten om een hiërarchie op te bouwen:
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));Toegang tot kinderen via node.ChildNodes en de gekoppelde entiteit via node.Entity.
Mesh en Primitieven
Maak een Mesh programmeringsmatig met controlepunten en polygonen:
// 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);Ingebouwde primitieve (Box, Sphere, Cylinder) kunnen worden geconverteerd naar Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();Vertex-elementen
Koppel normaalvectoren, UV’s en vertexkleuren aan geometrie:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);Beschikbare vertex-elementtypen: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
Transformaties
Elke Node draagt een Transform met Translation, Rotation, en 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);Lees wereldruimtepositie via node.GlobalTransform.Matrix of node.EvaluateGlobalTransform().
Materialen
Wijs materialen toe aan knooppunten voor shading-gegevens:
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);Materiaaltypes: LambertMaterial, PhongMaterial, PbrMaterial.
Tips en best practices
- Gebruik
Scene.FromFile()voor een eenregelige load wanneer je geen aangepaste nodig hebtLoadOptions - Converteer primitieve naar
MeshmetToMesh()voordat je vertex-elementen toevoegt - Gebruik
GltfSaveOptionsmet een.glbextensie voor compacte binaire output - Controleer
node.Entityopnullvoordat je cast — niet elke node bevat geometrie - Gebruik
PolygonModifier.Triangulate()om quad-meshes te converteren vóór export naar alleen-driehoekformaten zoals STL
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
ImportException bij laden | Niet-ondersteund of beschadigd bestand | Controleer of het bestand opent in een 3D-viewer; controleer of het formaat in de ondersteunde lijst staat |
| Ontbrekende materialen na OBJ-lading | .mtl bestand niet gevonden | Plaats de .mtl bestand naast de .obj of stel ObjLoadOptions.EnableMaterials = true |
| Schaal mismatch na FBX-import | Verschillende eenheidssystemen | Gebruik ObjLoadOptions.Scale of pas een Transform na het laden |
FAQ
Hoe detecteer ik het formaat van een onbekend bestand?
Gebruik FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);Kan ik laden vanuit een stream in plaats van een bestandspad?
Ja. Scene.Open() accepteert een Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Welke formaten ondersteunen zowel import als export?
OBJ, STL, glTF/GLB, FBX, COLLADA en 3MF ondersteunen beide richtingen. PLY ondersteunt alleen import (de PLY-exporteur is niet gekoppeld).
API-referentieoverzicht
| Klasse / Methode | Beschrijving |
|---|---|
Scene | Top-level 3D‑scènecontainer |
Scene.Open() | Laad een 3D‑bestand via pad of stream |
Scene.Save() | Exporteer scène naar bestand of stream |
Scene.FromFile() | Statische fabriek om te laden en een terug te geven Scene |
Node | Scène‑hiërarchieknooppunt dat entiteiten en transformaties bevat |
Node.CreateChildNode() | Maak een kindknooppunt aan en koppel het |
Mesh | Polygonmesh met controlepunten en vlaklijsten |
Mesh.CreatePolygon() | Definieer een polygonvlak met vertexindices |
Box / Sphere / Cylinder | Ingebouwde parametrische primitieven |
Transform | Lokale translatie, rotatie en schaal |
FileFormat | Register en detector voor ondersteunde formaten |
LambertMaterial / PhongMaterial / PbrMaterial | Materiaaltypes voor shading |