Funkcje i możliwości
Funkcje i możliwości
Ta strona obejmuje każdy główny obszar funkcji Aspose.3D 26.1.0 z działającymi przykładami C#.
Ładowanie i zapisywanie scen
Scene.Open() wczytuje plik; Scene.Save() eksportuje go. Format jest wykrywany na podstawie rozszerzenia pliku:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");Użyj statycznej fabryki Scene.FromFile() jako alternatywa:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");Opcje specyficzne dla formatu
Przekaż LoadOptions lub SaveOptions klasy pochodne dla precyzyjnej kontroli:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");Dostępne klasy opcji:
| Klasa | Kierunek | Kluczowe właściwości |
|---|---|---|
ObjLoadOptions | Import | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Eksport | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Import | (domyślne ustawienia) |
GltfLoadOptions | Import | (domyślne ustawienia) |
GltfSaveOptions | Eksport | (domyślne ustawienia) |
StlLoadOptions | Import | (domyślne ustawienia) |
StlSaveOptions | Eksport | (domyślne ustawienia) |
ColladaLoadOptions | Import | FlipCoordinateSystem |
ColladaSaveOptions | Eksport | Indented, TransformStyle |
PlyLoadOptions | Import | (domyślne ustawienia) |
Budowanie grafu sceny
Twórz węzły i dołączaj encje, aby zbudować hierarchię:
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));Uzyskaj dostęp do elementów potomnych przez node.ChildNodes i podłączoną encję przez node.Entity.
Mesh and Primitives
Utwórz Mesh programowo z punktami kontrolnymi i wielokątami:
// 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);Wbudowane prymitywy (Box, Sphere, Cylinder) można przekształcić na Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();Vertex Elements
Dołącz normalne, UV i kolory wierzchołków do geometrii:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);Dostępne typy elementów wierzchołka: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
Przekształcenia
Każdy Node zawiera Transform z Translation, Rotation, oraz 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);Odczytaj pozycję w przestrzeni świata za pomocą node.GlobalTransform.Matrix lub node.EvaluateGlobalTransform().
Materiały
Przypisz materiały do węzłów, aby określić dane oświetlenia:
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);Typy materiałów: LambertMaterial, PhongMaterial, PbrMaterial.
Wskazówki i najlepsze praktyki
- Użyj
Scene.FromFile()do jednowierszowego ładowania, gdy nie potrzebujesz niestandardowegoLoadOptions - Konwertuj prymitywy na
MeshzToMesh()przed dodaniem elementów wierzchołka - Użyj
GltfSaveOptionsz.glbrozszerzenie do kompaktowego wyjścia binarnego - Sprawdź
node.Entitydlanullprzed rzutowaniem — nie każdy węzeł zawiera geometrię - Użyj
PolygonModifier.Triangulate()aby przekonwertować siatki czworokątne przed eksportem do formatów tylko trójkątowych, takich jak STL
Typowe problemy
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
ImportException przy ładowaniu | Nieobsługiwany lub uszkodzony plik | Sprawdź, czy plik otwiera się w przeglądarce 3D; upewnij się, że format znajduje się na liście obsługiwanych |
| Brakujące materiały po załadowaniu OBJ | .mtl plik nie znaleziony | Umieść .mtl plik obok .obj lub ustaw ObjLoadOptions.EnableMaterials = true |
| Niezgodność skali po imporcie FBX | Różne systemy jednostek | Użyj ObjLoadOptions.Scale lub zastosuj Transform po załadowaniu |
FAQ
Jak wykryć format nieznanego pliku?
Użyj FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);Czy mogę wczytać ze strumienia zamiast ze ścieżki pliku?
Tak. Scene.Open() przyjmuje Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Które formaty obsługują zarówno import, jak i eksport?
Formaty OBJ, STL, glTF/GLB, FBX, COLLADA i 3MF obsługują oba kierunki. PLY obsługuje tylko import (eksporter PLY nie jest podłączony).
Podsumowanie referencji API
| Klasa / Metoda | Opis |
|---|---|
Scene | Główny kontener sceny 3D |
Scene.Open() | Wczytaj plik 3D z podanej ścieżki lub strumienia |
Scene.Save() | Eksportuj scenę do pliku lub strumienia |
Scene.FromFile() | Statyczna fabryka do wczytywania i zwracania Scene |
Node | Węzeł hierarchii sceny przechowujący encje i przekształcenia |
Node.CreateChildNode() | Utwórz i dołącz węzeł potomny |
Mesh | Siatka wielokątowa z punktami kontrolnymi i listami ścian |
Mesh.CreatePolygon() | Zdefiniuj ścianę wielokąta za pomocą indeksów wierzchołków |
Box / Sphere / Cylinder | Wbudowane prymitywy parametryczne |
Transform | Lokalny przesunięcie, obrót i skalowanie |
FileFormat | Rejestr i wykrywacz obsługiwanych formatów |
LambertMaterial / PhongMaterial / PbrMaterial | Typy materiałów do cieniowania |