Характеристики и функционалности
Характеристики и функционалности
Тази страница обхваща всяка основна област на функционалността на Aspose.3D 26.1.0 с работещи C# примери.
Зареждане и запазване на сцени
Scene.Open() зарежда файл; Scene.Save() експортира го. Форматът се открива от разширението на файла:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");Използвайте статичната фабрика Scene.FromFile() като алтернатива:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");Опции, специфични за формата
Подайте LoadOptions или SaveOptions подкласове за прецизен контрол:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");Налични класове за опции:
| Клас | Посока | Ключови свойства |
|---|---|---|
ObjLoadOptions | Импорт | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Експорт | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Импорт | (по подразбиране) |
GltfLoadOptions | Импорт | (по подразбиране) |
GltfSaveOptions | Експорт | (по подразбиране) |
StlLoadOptions | Импорт | (по подразбиране) |
StlSaveOptions | Експорт | (по подразбиране) |
ColladaLoadOptions | Импорт | FlipCoordinateSystem |
ColladaSaveOptions | Експорт | Indented, TransformStyle |
PlyLoadOptions | Импорт | (по подразбиране) |
Създаване на граф на сцената
Създайте възли и прикрепете обекти, за да изградите йерархия:
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));Достъп до дъщерните елементи чрез node.ChildNodes и към прикачения обект чрез node.Entity.
Мрежа и примитиви
Създай Mesh програмно с контролни точки и полигони:
// 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);Вградени примитиви (Box, Sphere, Cylinder) могат да се конвертират в Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();Връхни елементи
Прикрепете нормали, UV координати и цветове на върховете към геометрията:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);Налични типове елементни върхове: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
Трансформации
Всеки Node пренася Transform с Translation, Rotation, и 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);Прочетете позицията в световното пространство чрез node.GlobalTransform.Matrix или node.EvaluateGlobalTransform().
Материали
Присвоете материали на възлите за данни за осветление:
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);Типове материали: LambertMaterial, PhongMaterial, PbrMaterial.
Съвети и най‑добри практики
- Използвайте
Scene.FromFile()за едноредово зареждане, когато не ви е необходим персонализиранLoadOptions - Конвертирайте примитивите в
MeshсToMesh()преди да добавите елементите на върховете - Използвайте
GltfSaveOptionsс.glbразширение за компактен двоичен изход - Проверете
node.Entityзаnullпреди преобразуване — не всеки възел съдържа геометрия - Използвайте
PolygonModifier.Triangulate()за конвертиране на четириъгълни мрежи преди експортиране към формати само с триъгълници като STL
Чести проблеми
| Проблем | Причина | Поправка |
|---|---|---|
ImportException при зареждане | Неподдържан или повреден файл | Проверете дали файлът се отваря в 3D прегледач; проверете дали форматът е в списъка с поддържаните |
| Липсващи материали след зареждане на OBJ | .mtl файл не е намерен | Поставете .mtl файл до .obj или задайте ObjLoadOptions.EnableMaterials = true |
| Несъответствие в мащаба след импортиране на FBX | Различни системи за единици | Използвайте ObjLoadOptions.Scale или приложете Transform след зареждане |
FAQ
Как да открия формата на неизвестен файл?
Използване FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);Мога ли да заредя от поток вместо от път към файл?
Да. Scene.Open() приема Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Кои формати поддържат както импорт, така и експорт?
OBJ, STL, glTF/GLB, FBX, COLLADA и 3MF поддържат и двете посоки. PLY поддържа само импортиране (експортерът за PLY не е свързан).
Резюме на API справката
| Клас / Метод | Описание |
|---|---|
Scene | Контейнер за 3D сцена от най-горно ниво |
Scene.Open() | Зареди 3D файл по път или поток |
Scene.Save() | Експортирай сцената във файл или поток |
Scene.FromFile() | Статична фабрика за зареждане и връщане на Scene |
Node | Възел в йерархията на сцената, съдържащ обекти и трансформации |
Node.CreateChildNode() | Създаване и прикрепяне на дъщерен възел |
Mesh | Полигонална мрежа с контролни точки и списъци с лица |
Mesh.CreatePolygon() | Определяне на полигонално лице чрез индекси на върховете |
Box / Sphere / Cylinder | Вградени параметрични примитиви |
Transform | Локално преместване, завъртане и мащаб |
FileFormat | Регистър и детектор за поддържани формати |
LambertMaterial / PhongMaterial / PbrMaterial | Типове материали за сенкиране |