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:

KlasaKierunekKluczowe właściwości
ObjLoadOptionsImportFlipCoordinateSystem, EnableMaterials, Scale
ObjSaveOptionsEksportFlipCoordinateSystem, EnableMaterials, PointCloud
FbxLoadOptionsImport(domyślne ustawienia)
GltfLoadOptionsImport(domyślne ustawienia)
GltfSaveOptionsEksport(domyślne ustawienia)
StlLoadOptionsImport(domyślne ustawienia)
StlSaveOptionsEksport(domyślne ustawienia)
ColladaLoadOptionsImportFlipCoordinateSystem
ColladaSaveOptionsEksportIndented, TransformStyle
PlyLoadOptionsImport(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 niestandardowego LoadOptions
  • Konwertuj prymitywy na Mesh z ToMesh() przed dodaniem elementów wierzchołka
  • Użyj GltfSaveOptions z .glb rozszerzenie do kompaktowego wyjścia binarnego
  • Sprawdź node.Entity dla null przed 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

ProblemPrzyczynaRozwiązanie
ImportException przy ładowaniuNieobsługiwany lub uszkodzony plikSprawdź, 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 znalezionyUmieść .mtl plik obok .obj lub ustaw ObjLoadOptions.EnableMaterials = true
Niezgodność skali po imporcie FBXRóżne systemy jednostekUż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 / MetodaOpis
SceneGłó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
NodeWęzeł hierarchii sceny przechowujący encje i przekształcenia
Node.CreateChildNode()Utwórz i dołącz węzeł potomny
MeshSiatka wielokątowa z punktami kontrolnymi i listami ścian
Mesh.CreatePolygon()Zdefiniuj ścianę wielokąta za pomocą indeksów wierzchołków
Box / Sphere / CylinderWbudowane prymitywy parametryczne
TransformLokalny przesunięcie, obrót i skalowanie
FileFormatRejestr i wykrywacz obsługiwanych formatów
LambertMaterial / PhongMaterial / PbrMaterialTypy materiałów do cieniowania
 Polski